11

ユーザーの現在の位置から別の位置への道順でマップアプリを開くことができるアプリを構築しています。コードは次のようになります。

- (id)resolveDirectionsFromCoordinate:(CLLocationCoordinate2D)startCoordinate toCoordinate:(CLLocationCoordinate2D)endCoordinate
{
    NSString* url = [NSString stringWithFormat: @"http://maps.google.com/maps?saddr=%f,%f&daddr=%f,%f",
                 startCoordinate.latitude, startCoordinate.longitude,
                 endCoordinate.latitude, endCoordinate.longitude];
    [[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]];

    return nil;
}

ThosはiOS5.xでうまく機能します。ただし、iOS 6では、マップがGoogleマップを使用しなくなったため、代わりにSafariが表示されます。

iOS 6でどのURLを呼び出すべきか誰か知っていますか?

4

4 に答える 4

19

Appleのドキュメントでは、同等のmaps.apple.comURLスキームを使用することを推奨しています

だから使用する

http://maps.apple.com/maps?saddr=%f,%f&daddr=%f,%f

それ以外の

http://maps.google.com/maps?saddr=%f,%f&daddr=%f,%f

下位互換性を保つために、コードは次のようになります。

    NSString* versionNum = [[UIDevice currentDevice] systemVersion];
    NSString *nativeMapScheme = @"maps.apple.com";
    if ([versionNum compare:@"6.0" options:NSNumericSearch] == NSOrderedAscending){
        nativeMapScheme = @"maps.google.com";
    }
    NSString* url = [NSString stringWithFormat: @"http://%@/maps?saddr=%f,%f&daddr=%f,%f", nativeMapScheme startCoordinate.latitude, startCoordinate.longitude,
                 endCoordinate.latitude, endCoordinate.longitude];
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]]; 

または、このスキームを使用することもできますがmaps://saddr=%f,%f&daddr=%f,%f、すべてのパラメーターをサポートしているようには見えません。

于 2012-09-20T10:28:50.700 に答える
8

+ (BOOL)openMapsWithItems:(NSArray *)mapItems launchOptions:(NSDictionary *)launchOptionsメソッドを使用します。MKMapItemクラスリファレンスから:

このメソッドを使用して、1つ以上のマップアイテムをマップアプリに渡します。たとえば、この方法を使用して、アプリによって生成された位置ベースの検索結果を表示するようにマップアプリに要求できます。マップは、指定した各場所にピンを表示し、各マップアイテムオブジェクトのコンテンツを使用して追加情報を表示します。
于 2012-09-13T14:20:51.367 に答える
2
// Check for iOS 6
Class mapItemClass = [MKMapItem class];
if (mapItemClass && [mapItemClass     respondsToSelector:@selector(openMapsWithItems:launchOptions:)]) 
{
    // Create an MKMapItem to pass to the Maps app
    CLLocationCoordinate2D coordinate = 
                CLLocationCoordinate2DMake(16.775, -3.009);
    MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:coordinate 
                                        addressDictionary:nil];
    MKMapItem *mapItem = [[MKMapItem alloc] initWithPlacemark:placemark];
    [mapItem setName:@"My Place"];

    // Set the directions mode to "Driving"
    // Can use MKLaunchOptionsDirectionsModeWalking instead
    NSDictionary *launchOptions = @{MKLaunchOptionsDirectionsModeKey :   MKLaunchOptionsDirectionsModeDriving };
    // Get the "Current User Location" MKMapItem
    MKMapItem *currentLocationMapItem = [MKMapItem mapItemForCurrentLocation];
   // Pass the current location and destination map items to the Maps app
   // Set the direction mode in the launchOptions dictionary
   [MKMapItem openMapsWithItems:@[currentLocationMapItem, mapItem] 
                launchOptions:launchOptions];
   }

それがすべてです:)

于 2012-12-13T10:27:12.607 に答える
0

特定のマッピングリクエストでApple、Google、その他のiOSマッピングアプリを起動するために作成したミニライブラリであるCMMapLauncherをチェックすることをお勧めします。CMMapLauncherを使用すると、質問の方向を取得するためのコードは次のようになります。

[CMMapLauncher launchMapApp:CMMapAppAppleMaps
          forDirectionsFrom:[CMMapPoint mapPointWithName:@"Origin"
                                              coordinate:startCoordinate]
                         to:[CMMapPoint mapPointWithName:@"Destination"
                                              coordinate:endCoordinate]];

ご覧のとおり、iOS6と他のユーザーの間で必要なバージョンチェックもカプセル化されています。

于 2013-09-07T12:32:04.950 に答える