2

質問全体を読まずに重複としてマークしないでください

地図を表示せずに iOS の 2 地点間の運転ルートの長さを取得する方法はありますか?CLLocation

カラスが飛ぶようにではありません!!! でもMKドライビングモードのように

Googleマップに結果を表示する必要があるため、Googleを使用できません。

このコードを見つけましたが、これは iOS マップを表示する場合にのみ機能します。

-(void)showMapRouteFromCurrentLocation
{
    CLLocationCoordinate2D currentUserCoordinate = YourCoordinate;
    //currentUserCoordinate.latitude=  +53.509980;
    //currentUserCoordinate.longitude =  -0.133700;

    MKPlacemark *place = [[MKPlacemark alloc]
                          initWithCoordinate:currentUserCoordinate
                          addressDictionary:nil];


    MKMapItem *mapItem = [[MKMapItem alloc]initWithPlacemark:place];

    NSDictionary *routeOption = [[NSDictionary alloc] initWithObjectsAndKeys:MKLaunchOptionsDirectionsModeDriving,MKLaunchOptionsDirectionsModeKey, nil];

    [mapItem openInMapsWithLaunchOptions:routeOption];
}

しかし、それは私が必要とするものではありません。

4

5 に答える 5

6

Brainrayが言ったように、iOS7から、次のことができます:

MKDirectionsRequest *routeRequest = [[MKDirectionsRequest alloc] init];
routeRequest.transportType = MKDirectionsTransportTypeAutomobile;
[routeRequest setSource:startPoint]; // startPoint is an MKMapItem with the starting lat/long coordinate
[routeRequest setDestination :endPoint]; // endPoint an MKMapItem with the ending lat/long coordinate

MKDirections *routeDirections = [[MKDirections alloc] initWithRequest:routeRequest];
[routeDirections calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse * routeResponse, NSError *routeError)
{
    // Check for error and then do something with the route...
    MKRoute *route = routeResponse.routes[0];
}];
于 2014-11-06T05:48:51.483 に答える
3

私の知る限り、これは Apple の API を使用して行うことはできません。2 地点間の道順を尋ねるには、サードパーティのシステムを使用する必要があります。グーグルと同じですが、マップに表示するなど、他の制限があることがよくあります(あなたが述べたように)。

同様の要件があるかどうかはわかりませんが、Map Quest's Apiを確認できます

于 2013-03-20T16:02:09.680 に答える
2

iOS7 では、API 内で完全な指示を得ることができます

このチュートリアルチュートリアルを見てください。

于 2013-10-24T08:37:12.760 に答える
0

ケンは良い答えを出しましたが、座標を MKMapItem に変換する方法も追加します。

+ (void)distanceByRoadFromPoint:(CLLocationCoordinate2D)fromPoint
                        toPoint:(CLLocationCoordinate2D)toPoint
              completionHandler:(MKDirectionsHandler)completionHandler {

    MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init];
    request.transportType = MKDirectionsTransportTypeAutomobile;

    request.source = [self mapItemFromCoordinate:fromPoint];
    request.destination = [self mapItemFromCoordinate:toPoint];

    MKDirections *directions = [[MKDirections alloc] initWithRequest:request];
    [directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse * routeResponse, NSError *routeError) {

         MKRoute *route = [routeResponse.routes firstObject];
         CLLocationDistance distance = route.distance;
         NSTimeInterval expectedTime = route.expectedTravelTime;

         //call a completion handler that suits your situation

     }];    

   }


+ (MKMapItem *)mapItemFromCoordinate:(CLLocationCoordinate2D)coordinate {

    MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:coordinate addressDictionary:nil];
    MKMapItem *item = [[MKMapItem alloc] initWithPlacemark:placemark];

    return item;

}
于 2016-01-13T14:53:33.030 に答える
-3
give latitude2,lang of destination   and latitude,longitude of first place.

this function return distance in kilometer.


  -(double)distanceFilter:(double) latitude2 :(double)lang{
        double distance=(((acos(sin((latitude*M_PI/180)) * sin((latitude2*M_PI/180))+cos((latitude*M_PI/180)) * cos((latitude2*M_PI/180)) * cos(((longitude- lang)*M_PI/180))))*180/M_PI)*60*1.1515*1.609344);

        return distance;
    }
于 2013-04-26T10:47:12.780 に答える