2011-12-08 32 views
0

私は2つのMKCoordinateRegionオブジェクトを持っています。それらのオブジェクトからの値に基づいて、マップ上に2つのannotationsを作成します。 はその後、私はそれらの2つの位置の間の距離を計算します。道路に基づく2つの場所間の距離を計算する

CLLocationCoordinate2D pointACoordinate = [ann coordinate]; 
    CLLocation *pointALocation = [[CLLocation alloc] initWithLatitude:pointACoordinate.latitude longitude:pointACoordinate.longitude]; 

    CLLocationCoordinate2D pointBCoordinate = [ann2 coordinate]; 
    CLLocation *pointBLocation = [[CLLocation alloc] initWithLatitude:pointBCoordinate.latitude longitude:pointBCoordinate.longitude]; 

    float distanceMeters = [pointBLocation distanceFromLocation:pointALocation]; 

    distanceMeters = distanceMeters/1000; 

をしかし、私は私が得る値が正しいことを確認していないミリアンペア。
これらの値は空気ですか?距離?
距離を取得することは可能です道路に基づいて
私は車で渡す必要がある距離が必要です。

答えて

2

@coolanilkothariは、ほとんどの場合、getDistanceFromがios 3.2で廃止されていることを除いてほぼ正しいと言います。これは..リンゴのドキュメントを言っているかである

getDistanceFrom:

が 指定された場所に受信機の位置から(メートル単位)を返します。 (iOSの3.2では非推奨 distanceFromLocation使用します。代わりに方法を。。) - (CLLocationDistance)getDistanceFrom:(定数CLLocation *)場所は

場所

The other location. 

戻り値

距離(パラメータ2つの場所の間の距離(メートル単位)。考察

この方法では、地球の曲率に沿った線の間に の線をたどって、2つの場所の距離を測定します。 結果として生じる円弧は滑らかな曲線であり、2つの場所の間で特定の標高の変化が考慮されません( )。可用性

Available in iOS 2.0 and later. 
Deprecated in iOS 3.2. 
CLLocation.h

で宣言

+0

しかし、私はすでにCLLocationとdistanceFromLocationをコード内で使っています。( – 1110

+0

yup、道路から正確な距離を得ることはできません。このメソッドは、曲率に従う線の間を線でトレースすることによって2つの場所の距離を測定しますあなたはそれのためにgoogle maps direction apiを使う必要があります。 –

4

これらの値は空気間隔です。

道路に基づいた距離はApple SDKでは見つかりません。

CLLocationの間の距離を取得するために

- (CLLocationDistance)getDistanceFrom:(const CLLocation *)location 

を使用すると

-(id)initWithLatitude:(CLLocationDegrees)latitude longitude:(CLLocationDegrees)longitude. 

という名前のinitメソッドを持っています - :APIをGoogleにhttp://code.google.com/intl/fr-FR/apis/maps/index.html

4

利用代わりCLLocationCoordinateのCLLocationが直接尋ねるようにしてください道路上の2つのCLLocationオブジェクト。

距離はキロメートルです。

+3

距離はメートルではないキロメートルです。 – progrmr

2

あなたはこれでその情報を取得することができます

+ (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; 

} 
関連する問題