当前位置:  开发笔记 > 编程语言 > 正文

如何使用当前位置作为起始地址调用iPhone地图

如何解决《如何使用当前位置作为起始地址调用iPhone地图》经验,为你挑选了5个好方法。

我知道可以通过调用openURL带有参数saddrdaddr位置字符串或Lat/Long 的谷歌地图URL 来启动iPhone地图应用程序(参见下面的示例).

但我想知道是否可以将起始地址设为"当前位置"地图书签,以便我可以使用地图应用程序的位置处理代码.我的谷歌搜索一直没有结果.

例如:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat: @"http://maps.google.com/maps?saddr=%@&daddr=%@", myLatLong, latlong]]];

除了要调用当前位置书签代替的东西myLatLong.



1> Nate..:

在iOS 6之前

您需要使用核心位置来获取当前位置,但是使用该纬度/长对,您可以获取地图以将您从那里路由到街道地址或位置.像这样:

CLLocationCoordinate2D currentLocation = [self getCurrentLocation];
// this uses an address for the destination.  can use lat/long, too with %f,%f format
NSString* address = @"123 Main St., New York, NY, 10001";
NSString* url = [NSString stringWithFormat: @"http://maps.google.com/maps?saddr=%f,%f&daddr=%@",
                    currentLocation.latitude, currentLocation.longitude,
                    [address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]];

最后,如果您确实希望避免使用CoreLocation显式查找当前位置,并希望改为使用该@"http://maps.google.com/maps?saddr=Current+Location&daddr=%@"URL,请参阅下面评论中提供的此链接,了解如何本地化Current + Location字符串.但是,您正在利用另一个未记录的功能,正如Jason McCreary在下面指出的那样,它可能在将来的版本中无法可靠地运行.


iOS 6更新

最初,地图使用谷歌地图,但现在,苹果和谷歌有单独的地图应用程序.

1)如果您希望使用Google地图应用进行路线,请使用comgooglemaps网址计划:

NSString* url = [NSString stringWithFormat: @"comgooglemaps://?daddr=%@&directionsmode=driving",
                    [address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
BOOL opened = [[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]];

2)要使用Apple Maps,您可以使用MKMapItem适用于iOS 6 的新类. 请参阅此处的Apple API文档

基本上,如果路由到目标坐标(latlong),你将使用这样的东西:

    MKPlacemark* place = [[MKPlacemark alloc] initWithCoordinate: latlong 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,我建议在MKMapItemAPI文档页面上使用类似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).


虽然之前的"当前+位置"工作,但这似乎不再适用于iOS 5.1.1.
这比必要的更复杂.请参阅下面@bob的答案,其中您将"当前+位置"作为参数传递
实际上,威尔斯特......它并不比必要的复杂.看看这个帖子的日期.没有OS 4.0.在3.x上,您需要传入坐标.正如Joe暗示的那样,你仍然有很多iPad仍然在3.2,更不用说iPod Touch,或用户根本无法升级的iPhone.此外,还有本地化问题.如果用户不使用英语,则当前+位置不起作用.因此,如果您希望解决方案具有可靠性,则需要传递坐标.

2> Tchettane..:
NSString* addr = [NSString stringWithFormat:@"http://maps.google.com/maps?daddr=Current Location&saddr=%@",startAddr];
NSURL* url = [[NSURL alloc] initWithString:[addr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL:url];
[url release];

仅当iPhone/iPod语言设置为英语时才有效.如果要支持其他语言,则必须使用本地化字符串来匹配地图书签名称.


适用于iPhone但不适用于iPad.在后一种情况下,我最终从Current,MO开始.:(

3> 小智..:

这适用于iPhone:

http://maps.google.com/maps?saddr=当前位置&daddr = 123 Main St,Ottawa,ON



4> TheIntereste..:

您可以使用预处理器#define,如:

#define SYSTEM_VERSION_LESS_THAN(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)

了解您的iOS版本.然后,我也可以使用此代码来支持iOS 6:

NSString* addr = nil;
if (SYSTEM_VERSION_LESS_THAN(@"6.0")) {
   addr = [NSString stringWithFormat:@"http://maps.google.com/maps?daddr=%1.6f,%1.6f&saddr=Posizione attuale", view.annotation.coordinate.latitude,view.annotation.coordinate.longitude];
} else {
   addr = [NSString stringWithFormat:@"http://maps.apple.com/maps?daddr=%1.6f,%1.6f&saddr=Posizione attuale", view.annotation.coordinate.latitude,view.annotation.coordinate.longitude];
}

NSURL* url = [[NSURL alloc] initWithString:[addr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL:url];



5> August..:

由于沙盒,您无权访问Map应用程序的书签.

而是使用Core Location自己确定当前位置.然后在您构建的URL中使用该位置(lat和long)来打开Maps.


我相信答案是指"当前位置"是地图应用程序中的书签之一,并且应用程序无权访问这些书签.不是废话,只是错过了那个连接.
我无法看到沙盒如何与地图使用当前位置相关.这是一个无意义的答案.
推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有