web-dev-qa-db-ja.com

組み込みのApple APIを使用してmkmapviewでルートを取得する方法はありますか?

私はグーグルマップがそこにある最高のマップであることが知られていることを知っていますが、私はたくさんの追加のライブラリなどをダウンロードする必要はありません。ポイントAからBへのクイックルートを取得し、それで完了するために、素早く簡単なことをしたいと思います。組み込みの関数/ライブラリでこれを行う方法はありますか?誰かが私を正しい方向に向けることができますか?

[〜#〜]編集[〜#〜]

私の場合、ターンバイターン方式などではなく、最初から最後まで線を引きたいだけです。たぶんどのルートを取るかについてのオプションを与える。それを行う方法はありますか?

27
Katushai

IOS 7では、MKDirectionsRequestを使用してルートを取得および表示できます。

現在の場所から別のマップアイテムへの道順を表示するサンプルコードを次に示します。

MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init];
[request setSource:[MKMapItem mapItemForCurrentLocation]];
[request setDestination:myMapItem];
[request setTransportType:MKDirectionsTransportTypeAny]; // This can be limited to automobile and walking directions.
[request setRequestsAlternateRoutes:YES]; // Gives you several route options.
MKDirections *directions = [[MKDirections alloc] initWithRequest:request];
[directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error) {
    if (!error) {
        for (MKRoute *route in [response routes]) {
            [myMapView addOverlay:[route polyline] level:MKOverlayLevelAboveRoads]; // Draws the route above roads, but below labels.
            // You can also get turn-by-turn steps, distance, advisory notices, ETA, etc by accessing various route properties.
        }
    }
}];

IOS 7を初めて使用する場合は、オーバーレイを表示するためにmapView:rendererForOverlay:メソッドを実装する必要があります。何かのようなもの:

- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay
{
    if ([overlay isKindOfClass:[MKPolyline class]]) {
        MKPolylineRenderer *renderer = [[MKPolylineRenderer alloc] initWithOverlay:overlay];
        [renderer setStrokeColor:[UIColor blueColor]];
        [renderer setLineWidth:5.0];
        return renderer;
    }
    return nil;
}
65
Kamaros

Swiftバージョン

        let request = MKDirectionsRequest();
        request.source = MKMapItem.mapItemForCurrentLocation();
        let locationPlacemark = MKPlacemark(coordinate: CLLocationCoordinate2DMake(13.724362, 100.515342), addressDictionary: nil);
        request.destination = MKMapItem(placemark: locationPlacemark);
        request.transportType = MKDirectionsTransportType.Any;
        request.requestsAlternateRoutes = true;
        let directions = MKDirections(request: request);

        directions.calculateDirectionsWithCompletionHandler ({
            (response: MKDirectionsResponse?, error: NSError?) in
            print(response?.description)
            print(error?.description)
            guard let response = response else {
                //handle the error here
                return;
            }
            self.myRoute = response.routes[0]
            self.mkMapView.addOverlay(self.myRoute!.polyline)
        });

そしてそのデリゲート

        func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer {
        let myLineRenderer = MKPolylineRenderer(polyline: (self.myRoute?.polyline)!)
        myLineRenderer.strokeColor = UIColor.redColor()
        myLineRenderer.lineWidth = 3
        return myLineRenderer
        }
2
Deepak Thakur

もう1つの可能性は、アドレスをAppleマップアプリに送信することです。私はこれがプロの設定で行われるのを見ただけで、それが選択された方法でした。

1
Katushai