8

这是一个奇怪的问题:我的应用程序应该能够调用 iOS 中的内置地图(5.1 和 6)。事实证明,它在 iOS6 下工作得很好,但在 iOS5.1 下却不行。调用 iOS6 中的地图并跟踪从 saddr 到 daddr 的方向,但是当我在 iOS5 中时,地图应用程序被调用,但只有一个 pin 放在 daddr 上。由于某些未知原因,初始坐标 (saddr) 没有显示,也没有跟踪方向。

这是我的代码:

addr = [NSString stringWithFormat: @"maps://saddr=%f,%f&daddr=%f,%f", newLocation.coordinate.latitude, newLocation.coordinate.longitude, oldLatitude, oldLongitude];
NSURL *url = [NSURL URLWithString:addr];
[[UIApplication sharedApplication] openURL:url];

我尝试将 URL 更改为“http://maps.google.com/something”,但它调用 Safari 而不是内置的地图应用程序。我注意到变量正在正确地传递给 URL。

有任何想法吗?

提前致谢!

4

2 回答 2

35

我遇到了类似的问题,我不得不创建一些有条件的操作系统代码来处理谷歌地图应用程序已被删除的事实。来自新的MKMapItem 参考

//first create latitude longitude object
CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(latitude,longitude);

//create MKMapItem out of coordinates
MKPlacemark* placeMark = [[MKPlacemark alloc] initWithCoordinate:coordinate addressDictionary:nil];
MKMapItem* destination =  [[MKMapItem alloc] initWithPlacemark:placeMark];

if([destination respondsToSelector:@selector(openInMapsWithLaunchOptions:)])
{
    //using iOS6 native maps app
    [destination openInMapsWithLaunchOptions:@{MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving}];        
} 
else
{
    //using iOS 5 which has the Google Maps application
    NSString* url = [NSString stringWithFormat: @"http://maps.google.com/maps?saddr=Current+Location&daddr=%f,%f", latitude, longitude];
    [[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]];
}

[placeMark release];
[destination release];

获取步行路线:

  1. 对于 iOS 6 地图 - 您可以设置MKLaunchOptionsDirectionsModeWalking而不是MKLaunchOptionsDirectionsModeDriving
  2. 对于 Google 地图 - 添加&dirflg=w到 url。

我认为在 iOS6 中使用 openInMapsWithLaunchOptions 会更好,因为它可以让您完全控制地图应用程序的响应方式。

于 2012-09-14T21:57:57.127 回答
0

您可以使用MKPlacemarkMKMapItem启动地图应用程序,同时在地图图钉上显示坐标标题:

NSString *pinTitle;
CLLocationCoordinate2D coordinate;

MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:coordinate addressDictionary:@{(id)kABPersonAddressStreetKey: pinTitle}];
MKMapItem *mapItem = [[MKMapItem alloc] initWithPlacemark:placemark];

if ([mapItem respondsToSelector:@selector(openInMapsWithLaunchOptions:)])
{
    [mapItem openInMapsWithLaunchOptions:@{MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving}];
}
else
{
    // Google Maps fallback
    NSString *urlString = [NSString stringWithFormat:@"http://maps.google.com/maps?daddr=%f,%f&saddr=Current+Location", locationItem.coordinate.latitude, locationItem.coordinate.longitude];
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
}

请注意,您需要链接AddressBook.framework#import <AddressBook/AddressBook.h>在代码中添加某处以使用该kABPersonAddressStreetKey常量。

于 2012-11-20T01:38:26.790 回答