在苹果开发者文档(链接现在是死的)解释说,如果你把在网页中的链接,然后单击它,而在iPhone上,也作为标准配置提供与iPhone将推出谷歌地图应用程序中使用移动Safari浏览器。
如何在我自己的本机iPhone应用程序(即不是通过Mobile Safari的网页)中使用特定地址启动相同的Google Maps应用程序,就像在“通讯录”中轻按地址即可启动地图一样?
注意:这仅适用于设备本身。不在模拟器中。
Answers:
对于iOS 5.1.1及更低版本,请使用的openURL
方法UIApplication
。它将执行普通的iPhone神奇URL重新解释。所以
[someUIApplication openURL:[NSURL URLWithString:@"http://maps.google.com/maps?q=London"]]
应该调用Google地图应用。
从iOS 6开始,您将调用Apple自己的Maps应用。为此,MKMapItem
用您要显示的位置配置一个对象,然后向其发送openInMapsWithLaunchOptions
消息。要从当前位置开始,请尝试:
[[MKMapItem mapItemForCurrentLocation] openInMapsWithLaunchOptions:nil];
为此,您需要针对MapKit进行链接(我相信它会提示您进行位置访问)。
[[NSURL alloc] initWithString:]
您不应该使用[NSURL URLWithString:]
它,因为它提供了自动释放的对象。
someUIApplication
也可以代替您提出[UIApplication sharedApplication]
(因为我不知道实际上不知道您会UIApplication
做出什么其他情况)
究竟。您需要实现的代码是这样的:
UIApplication *app = [UIApplication sharedApplication];
[app openURL:[NSURL URLWithString: @"http://maps.google.com/maps?q=London"]];
因为根据文档,除非您调用sharedApplication,否则UIApplication仅在应用程序委托中可用。
要在特定坐标处打开Google地图,请尝试以下代码:
NSString *latlong = @"-56.568545,1.256281";
NSString *url = [NSString stringWithFormat: @"http://maps.google.com/maps?ll=%@",
[latlong stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
您可以使用CoreLocation中的当前位置替换latlong字符串。
您也可以使用(“ z”)标志指定缩放级别。值是1-19。这是一个例子:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@“ http://maps.google.com/maps?z=8 ”]];
现在也有App Store的Google Maps应用程序,记录在https://developers.google.com/maps/documentation/ios/urlscheme
因此,您首先要检查它是否已安装:
[[UIApplication sharedApplication] canOpenURL:
[NSURL URLWithString:@"comgooglemaps://"]];
然后,您可以有条件地替换http://maps.google.com/maps?q=
为comgooglemaps://?q=
。
这是地图链接的Apple URL方案参考:https : //developer.apple.com/library/archive/featuredarticles/iPhoneURLScheme_Reference/MapLinks/MapLinks.html
创建有效地图链接的规则如下:
- 域必须是google.com,子域必须是maps或ditu。
- 如果查询包含site作为键,而local作为值,则路径必须为/,/ maps,/ local或/ m。
- 路径不能为/ maps / *。
- 必须支持所有参数。有关支持的参数列表,请参见表1。
- 如果值是URL,则参数不能为q = *(因此不选择KML)。
- 参数不能包含view = text或dirflg = r。
**有关支持的参数列表,请参见上面的链接。
<key>LSApplicationQueriesSchemes</key>
<array>
<string>comgooglemaps</string>
</array>
if ([[UIApplication sharedApplication] canOpenURL: [NSURL URLWithString:@"comgooglemaps:"]]) {
NSString *urlString = [NSString stringWithFormat:@"comgooglemaps://?ll=%@,%@",destinationLatitude,destinationLongitude];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
} else {
NSString *string = [NSString stringWithFormat:@"http://maps.google.com/maps?ll=%@,%@",destinationLatitude,destinationLongitude];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:string]];
}
if UIApplication.sharedApplication().canOpenURL(NSURL(string: "comgooglemaps:")!) {
var urlString = "comgooglemaps://?ll=\(destinationLatitude),\(destinationLongitude)"
UIApplication.sharedApplication().openURL(NSURL(string: urlString)!)
}
else {
var string = "http://maps.google.com/maps?ll=\(destinationLatitude),\(destinationLongitude)"
UIApplication.sharedApplication().openURL(NSURL(string: string)!)
}
if UIApplication.shared.canOpenURL(URL(string: "comgooglemaps:")!) {
var urlString = "comgooglemaps://?ll=\(destinationLatitude),\(destinationLongitude)"
UIApplication.shared.openURL(URL(string: urlString)!)
}
else {
var string = "http://maps.google.com/maps?ll=\(destinationLatitude),\(destinationLongitude)"
UIApplication.shared.openURL(URL(string: string)!)
}
只需调用此方法,然后将Google Maps URL Scheme添加到您的.plist文件中即可与此Answer相同。
斯威夫特4:-
func openMapApp(latitude:String, longitude:String, address:String) {
var myAddress:String = address
//For Apple Maps
let testURL2 = URL.init(string: "http://maps.apple.com/")
//For Google Maps
let testURL = URL.init(string: "comgooglemaps-x-callback://")
//For Google Maps
if UIApplication.shared.canOpenURL(testURL!) {
var direction:String = ""
myAddress = myAddress.replacingOccurrences(of: " ", with: "+")
direction = String(format: "comgooglemaps-x-callback://?daddr=%@,%@&x-success=sourceapp://?resume=true&x-source=AirApp", latitude, longitude)
let directionsURL = URL.init(string: direction)
if #available(iOS 10, *) {
UIApplication.shared.open(directionsURL!)
} else {
UIApplication.shared.openURL(directionsURL!)
}
}
//For Apple Maps
else if UIApplication.shared.canOpenURL(testURL2!) {
var direction:String = ""
myAddress = myAddress.replacingOccurrences(of: " ", with: "+")
var CurrentLocationLatitude:String = ""
var CurrentLocationLongitude:String = ""
if let latitude = USERDEFAULT.value(forKey: "CurrentLocationLatitude") as? Double {
CurrentLocationLatitude = "\(latitude)"
//print(myLatitude)
}
if let longitude = USERDEFAULT.value(forKey: "CurrentLocationLongitude") as? Double {
CurrentLocationLongitude = "\(longitude)"
//print(myLongitude)
}
direction = String(format: "http://maps.apple.com/?saddr=%@,%@&daddr=%@,%@", CurrentLocationLatitude, CurrentLocationLongitude, latitude, longitude)
let directionsURL = URL.init(string: direction)
if #available(iOS 10, *) {
UIApplication.shared.open(directionsURL!)
} else {
UIApplication.shared.openURL(directionsURL!)
}
}
//For SAFARI Browser
else {
var direction:String = ""
direction = String(format: "http://maps.google.com/maps?q=%@,%@", latitude, longitude)
direction = direction.replacingOccurrences(of: " ", with: "+")
let directionsURL = URL.init(string: direction)
if #available(iOS 10, *) {
UIApplication.shared.open(directionsURL!)
} else {
UIApplication.shared.openURL(directionsURL!)
}
}
}
希望,这就是您想要的。如有任何疑问,请联系我。:)
将“ g”更改为“ q”
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"http://maps.google.com/maps?q=London"]]
如果您仍然遇到问题,该视频将演示如何从Google获取“我的地图”以显示在iPhone上-然后您可以获取链接并将其发送给任何人,并且可以正常使用。
要移动到Google地图,请使用此API并发送目标纬度和经度
NSString* addr = nil;
addr = [NSString stringWithFormat:@"http://maps.google.com/maps?daddr=%1.6f,%1.6f&saddr=Posizione attuale", destinationLat,destinationLong];
NSURL* url = [[NSURL alloc] initWithString:[addr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL:url];
如果您需要的灵活性超出了Google URL格式所提供的灵活性,或者您想在应用程序中嵌入地图而不是启动地图应用程序,请参见https://sourceforge.net/projects/quickconnect上的示例。
**Getting Directions between 2 locations**
NSString *googleMapUrlString = [NSString stringWithFormat:@"http://maps.google.com/?saddr=%@,%@&daddr=%@,%@", @"30.7046", @"76.7179", @"30.4414", @"76.1617"];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:googleMapUrlString]];
步骤1-将以下内容添加到info.plist
<key>LSApplicationQueriesSchemes</key>
<array>
<string>googlechromes</string>
<string>comgooglemaps</string>
</array>
第2步-使用以下代码显示Google地图
let destinationLatitude = "40.7128"
let destinationLongitude = "74.0060"
if UIApplication.shared.canOpenURL(URL(string: "comgooglemaps:")!) {
if let url = URL(string: "comgooglemaps://?ll=\(destinationLatitude),\(destinationLongitude)"), !url.absoluteString.isEmpty {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
}else{
if let url = URL(string: "http://maps.google.com/maps?ll=\(destinationLatitude),\(destinationLongitude)"), !url.absoluteString.isEmpty {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
}