我正在打开Google地图应用,以便从我的代码中显示从用户的当前位置到目标坐标的路线。我使用以下代码打开地图应用。我按下按钮时调用此代码。 getCurrentLocation
是一种返回最近更新位置的方法。
- (void)showDirectionsToHere {
CLLocationCoordinate2D currentLocation = [self getCurrentLocation]; // LINE 1
NSString* url = [NSString stringWithFormat: @"http://maps.google.com/maps?saddr=%f,%f&daddr=%f,%f",
currentLocation.latitude,
currentLocation.longitude,
destCoordinate.latitude,
destCoordinate.longitude];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
}
LINE 1 中的[self getCurrentLocation]
使用CLLocationManager
来确定当前位置并返回该值。
注意:我尚未在 LINE1 中实施代码。我刚刚计划这样做。
我的问题是:
[self getCurrentLocation
会在调用openURL
之前返回当前位置吗?我对这些事情有点困惑。请指导我。感谢。
答案 0 :(得分:11)
您无需自行确定用户的当前位置,地图应用就会负责。
您可以传递Current%%20Location
而不是传递纬度/经度对,而地图则会确定用户当前的位置。
%20
是一个url编码的空格字符,额外的%
会转义实际的%
,因此不会将其解释为格式替换。
感谢 @Carlos P 在原始答案中指出我的转义字符错误。
答案 1 :(得分:7)
使用“当前位置”作为saddr仅在用户将系统语言设置为英语时才有效。最好的选择是从Core Location获取当前位置并将其用作saddr。
答案 2 :(得分:5)
正如pazustep指出的那样,“当前位置”仅适用于英语。例如,在意大利语中,正确的字符串是“Posizione attuale”。
在iPhone固件中嗅探我检测到了所有“当前位置”的翻译,我写了一个类,它提供了任何(当前)支持的语言所需的正确字符串。
我的博客上有一篇关于此内容的帖子(包括源代码):http://www.martip.net/blog/localized-current-location-string-for-iphone-apps。
答案 3 :(得分:2)
您可以使用适用于iOS 6的新MKMapItem
课程。See the Apple API docs here
基本上,如果路由到目的地坐标(destCoordinate
),你会使用这样的东西:
MKPlacemark* place = [[MKPlacemark alloc] initWithCoordinate: destCoordinate addressDictionary: nil];
MKMapItem* destination = [[MKMapItem alloc] initWithPlacemark: place];
destination.name = @"Name Here!";
NSArray* items = [[NSArray alloc] initWithObjects: destination, nil];
NSDictionary* options = [[NSDictionary alloc] initWithObjectsAndKeys:
MKLaunchOptionsDirectionsModeDriving,
MKLaunchOptionsDirectionsModeKey, nil];
[MKMapItem openMapsWithItems: items launchOptions: options];
为了在相同的代码中同时支持iOS 6+和iOS 6之前的版本,我建议在MKMapItem
API文档页面上使用类似Apple的代码:
Class itemClass = [MKMapItem class];
if (itemClass && [itemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)]) {
// iOS 6 MKMapItem available
} else {
// use pre iOS 6 technique
}
这假设您的Xcode Base SDK是iOS 6(或最新的iOS )。
In this other answer, I offer a robust technique for iOS 5.1 and lower