5

私のアプリでは、内部がマップになるビューコントローラーを作成する必要があります。このマップには、2 つのピンを結ぶルートが表示されます。(ピンが 2 つあるため) この結果を得るための最善の解決策を知りたいです。再び、2 種類のルートが表示されるはずです: 車を使用するルートと徒歩のルートです... 私を助けることができるフレームワークはありますか? (mapkit は私の問題を解決しないため) ありがとう

4

4 に答える 4

4

UIWebView を使用する場合は、JavaScript を使用して基本的に無料で機能を取得できます。それは非常に簡単です。基本については、このGoogleマップのチュートリアルを確認してください。もちろん、この方法で、html と javascript のすべての長所と短所を得ることができます。

JavaScript コードを html (ここではmap.html) に記述し、それをプロジェクト フォルダーに置き、その html ファイルを次のように開始するだけです。

NSString *html = [[NSString alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"map" ofType:@"html"] encoding:NSUTF8StringEncoding error:&error];
  [self.mapView loadHTMLString:html baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];

このように、objective-c から JavaScript 関数を呼び出します。ここでは、map.html に という JavaScript 関数がありsetMarkerAtPosition(latitude, longitude)ます。かなり簡単です。

[self.mapView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"setMarkerAtPosition(%f,%f)",latlong.latitude, latlong.longitude]];

リクエストに応じて編集:

UIWebView を追加し、それをコントローラーに接続します (これを行う方法がわからない場合は、間違いなくここから離れて、いくつかの基本的なチュートリアルを実行する必要があります) (mapView を合成することを忘れないでください。それが何であるかわからない基本的な読書をする)

#import <UIKit/UIKit.h>
@interface MapViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIWebView *mapView;
@end

次に、次のコードを viewDidLoad メソッドに追加します。NSString を作成し、ローカルの html ファイルの内容で初期化します (既に投稿されているように)。次に、UIWebView の loadHTMLString メソッドを呼び出します。html 文字列は、ローカルの html ファイルに基づいていますmap.html(まだ追加していない場合は、その名前を付けて、プロジェクトにドラッグ アンド ドロップするだけです)。

- (void)viewDidLoad
{
  [super viewDidLoad];
    NSError *error = nil;
  // create NSString from local HTML file and add it to the webView
  NSString *html = [[NSString alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"map" ofType:@"html"] encoding:NSUTF8StringEncoding error:&error];
  [self.mapView loadHTMLString:html baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];  
  [self.view sendSubviewToBack:self.mapView];
}

次に、ビューにボタンを追加し (インターフェイス ビルダー、方法を知っておく必要があります)、メソッドに接続します。このメソッド内に、このコードを挿入します (ちなみに、これによりドイツのルートが表示されます)。

[self.mapView stringByEvaluatingJavaScriptFromString:@"calculateRoute(50.777682, 6.077163, 50.779347, 6.059429)"];    

最後に、これをmap.htmlファイルのコンテンツとして使用します (注: 内部には役に立たないものもありますが、後で理解できます。ルートを表示する必要のないコードはすべて削除しましたが、役に立たないヘッダー):

<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<script type="text/javascript" src="http://maps.google.de/maps/api/js?sensor=false&region=DE"></script>
<script src="http://www.google.com/jsapi"></script>
<script src="http://code.jquery.com/jquery-1.7.2.js"></script>
<script src="json.js"></script>
<script type="text/javascript">google.load("jquery", "1");</script> 
<script type="text/javascript"> google.load("maps", "3", {other_params:"sensor=false"}); </script> 
<script type="text/javascript">

  // global variables
  var currentPosition;
  directionsDisplay = new google.maps.DirectionsRenderer();
  var directionsService = new google.maps.DirectionsService();
  var map;

  var infowindow = new google.maps.InfoWindow();

  // calculates the current userlocation
  function getCurrentLocation(){
    if (navigator.geolocation) {
      navigator.geolocation.getCurrentPosition(success, error);
    } else {
      alert('geolocation not supported');
    }
  }

  // called when the userLocation has been located
  function success(position) {
    currentPosition = position;
    drawMap(position.coords.latitude, position.coords.longitude);
  }

  // called when the userLocation could not be located
  function error(msg) {
    alert('error: ' + msg);
  }

  // calculate and route from-to and show on map
  function calculateRoute(fromLat, fromLong, toLat, toLong){
      var start =  new google.maps.LatLng(fromLat, fromLong);
      var end = new google.maps.LatLng(toLat, toLong);
      var request = {
          origin:start, 
          destination:end,
          travelMode: google.maps.DirectionsTravelMode.WALKING
      };
      directionsService.route(request, function(response, status) {
          if (status == google.maps.DirectionsStatus.OK) {
             directionsDisplay.setDirections(response);
          }
      });
      directionsDisplay.setMap(map);
  }


  // draws the inital map and shows userlocation
  function drawMap(latitude, longitude) {
    var latlng = new google.maps.LatLng(latitude, longitude);
      var myOptions = {
      disableDefaultUI: true,
      zoom: 15,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
      map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
      google.maps.event.addListener(map, 'click', function() {if(infowindow){infowindow.close();}});
      setMarkerAtPosition(latitude, longitude);
  }

</script>
</head>
<body onload="getCurrentLocation()">
 <div id="map_canvas" style="width:100%; height:100%">
</body>
</html>
于 2012-05-13T19:57:08.817 に答える
2

mkmapview でポリラインまたはルートを描画するには、このチュートリアルを参照してください。

1> mapkitを使ってルートを描く

2>ios4.0 以上のバージョンから MKOverlayPathView を使用できますApple Docs を参照してください

于 2012-05-13T20:09:41.583 に答える
1

You can use a web view and open the url

https://maps.google.com/maps?saddr=START_LOCATION&daddr=DESTINATION_LOCATION

this will open a web page as you want.

You can enter either pair of(lat, long) or direct city name.

Hope this will help you

于 2012-12-30T13:06:33.813 に答える
1

Google マップにそのルートを尋ね、json の回答を解析して、マップ上に PolyLineView としてラインを表示できます。これが iOS マップ アプリでの動作です。https://developers.google.com/maps/documentation/directions/で Google Maps Route API を確認してください。

于 2012-05-13T19:41:21.780 に答える