1

アプリで expectedTravelTime を計算しようとしていますが、GoogleMaps と比較すると異なる値が得られます。

これが私のコードです:

NSArray *startLocationArray = [startLocation componentsSeparatedByString:@","];
NSArray *destinationArray = [destination componentsSeparatedByString:@","];

MKPlacemark *placemarkStartLocation = [[MKPlacemark alloc] initWithCoordinate:CLLocationCoordinate2DMake([startLocationArray[0] intValue],
                                                                                            [startLocationArray[1] intValue]) addressDictionary:nil];
MKMapItem *mapItemStartLocation = [[MKMapItem alloc] initWithPlacemark:placemarkStartLocation];

MKPlacemark *placemarkDestination = [[MKPlacemark alloc] initWithCoordinate:CLLocationCoordinate2DMake([destinationArray[0] intValue],
                                                                                            [destinationArray[1] intValue]) addressDictionary:nil];
MKMapItem *mapItemDestination = [[MKMapItem alloc] initWithPlacemark:placemarkDestination];

MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init];
[request setSource:mapItemStartLocation];
[request setDestination:mapItemDestination];
[request setTransportType:MKDirectionsTransportTypeAutomobile];
[request setRequestsAlternateRoutes:NO];
MKDirections *directions = [[MKDirections alloc] initWithRequest:request];
__block MKRoute *route;

[directions calculateDirectionsWithCompletionHandler:
 ^(MKDirectionsResponse *response, NSError *error)
{
    if ( ! error && [response routes] > 0)
    {
        route = [[response routes] objectAtIndex:0];

        double exceedingTime = fmod(route.expectedTravelTime, 60);
        eta = (route.expectedTravelTime - exceedingTime)/60;
        int iEta = (int)eta;

        lblEta.text = [NSString stringWithFormat:@"%im", iEta, nil];
    }
}];

startLocation と destination はメソッドの外に渡され、その値は次のとおりです。

startLocation = 37.776402,-122.408470
destination = 37.831287,-122.485519

私は得る:

route.distance = 1513 (meters)
route.expectedTravelTime = 491 (should be seconds, so finally 8 minutes)

しかし GoogleMaps では、expectedTravelTime は 30 分以上、距離は 9 マイル以上です。

どこが間違っていますか?

4

1 に答える 1

1

intValue問題は、代わりに使用するこれらの変換doubleValueです。

[startLocationArray[0] intValue], [startLocationArray[1] intValue]

[destinationArray[0] intValue], [destinationArray[1] intValue]


出発地と目的地の座標には小数部 (例: ) があるため、(構造体で定義された緯度と経度の型に一致37.776402する) を使用する必要があります。doubleValueCLLocationCoordinate2D


を使用しintValueて、コードは から37, -122へのルートを取得しています。このルート37, -122は、カリフォルニア州サンタクルーズにあるゴルフコース内の短い旅行です。


intValue上記の行を に 変更しdoubleValueます。

于 2014-09-06T12:09:13.993 に答える