70

Apple 开发人员文档(链接现已失效)解释说,如果您在网页中放置一个链接,然后在 iPhone 上使用 Mobile Safari 时单击它,则作为 iPhone 标准提供的 Google 地图应用程序将启动。

如何从我自己的本地 iPhone 应用程序(即不是通过 Mobile Safari 的网页)中启动具有特定地址的相同 Google 地图应用程序,就像在联系人中点击地址启动地图一样?

注意:这仅适用于设备本身。不在模拟器中。

4

16 回答 16

65

对于 iOS 5.1.1 及更低版本,请openURL使用UIApplication. 它将执行正常的 iPhone 神奇 URL 重新解释。所以

[someUIApplication openURL:[NSURL URLWithString:@"http://maps.google.com/maps?q=London"]]

应该调用谷歌地图应用程序。

从 iOS 6 开始,您将调用 Apple 自己的地图应用程序。为此,MKMapItem请使用要显示的位置配置对象,然后向其发送openInMapsWithLaunchOptions消息。要从当前位置开始,请尝试:

[[MKMapItem mapItemForCurrentLocation] openInMapsWithLaunchOptions:nil];

为此,您需要与 MapKit 链接(我相信它会提示您进行位置访问)。

于 2008-08-27T13:26:18.517 回答
32

确切地。您需要实现这一点的代码是这样的:

UIApplication *app = [UIApplication sharedApplication];
[app openURL:[NSURL URLWithString: @"http://maps.google.com/maps?q=London"]];

因为根据文档,除非您调用 sharedApplication,否则 UIApplication 仅在 Application Delegate 中可用。

于 2008-08-27T13:51:20.313 回答
29

要在特定坐标处打开 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]];

您可以将 latlong 字符串替换为 CoreLocation 中的当前位置。

您还可以使用 (“z”) 标志指定缩放级别。值为 1-19。这是一个例子:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@" http://maps.google.com/maps?z=8 "]];

于 2009-02-10T01:55:24.203 回答
18

现在还有 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=.

于 2012-12-13T14:05:54.857 回答
13

这是地图链接的 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。

**有关支持的参数列表,请参阅上面的链接。

于 2009-11-13T18:27:41.147 回答
9

如果您使用的是 ios 10,请不要忘记在 Info.plist 中添加查询方案

<key>LSApplicationQueriesSchemes</key>
<array>
 <string>comgooglemaps</string>
</array>

如果您使用的是objective-c

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]];
    }

如果您使用的是 swift 2.2

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)!)
}

如果您使用的是 swift 3.0

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)!)
}
于 2016-12-29T17:26:08.463 回答
2

对于电话问题,您是否在模拟器上进行测试?这仅适用于设备本身。

此外,openURL 返回一个布尔值,您可以使用它来检查您正在运行的设备是否支持该功能。例如,您不能在 iPod Touch 上拨打电话 :-)

于 2009-02-10T02:07:41.163 回答
2

只需调用此方法并将 Google Maps URL Scheme 添加到与此答案相同的 .plist 文件中。

斯威夫特 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!)
        }
    }
}

希望,这就是你要找的。任何问题都可以回复我。:)

于 2017-12-27T10:29:33.087 回答
1

“g”改成“q”

[[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"http://maps.google.com/maps?q=London"]]
于 2009-11-30T18:28:58.257 回答
1

如果您仍然遇到问题,该视频展示了如何从 google 获取“我的地图”以显示在 iphone 上——然后您可以获取链接并将其发送给任何人,并且它可以工作。

http://www.youtube.com/watch?v=Xo5tPjsFBX4

于 2010-07-21T15:05:20.267 回答
1

要移动到 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];
于 2017-03-07T07:40:09.717 回答
0

如果您需要比 Google URL 格式提供的更大的灵活性,或者您想在应用程序中嵌入地图而不是启动地图应用程序,这里就是一个示例

它甚至会为您提供执行所有嵌入的源代码。

于 2008-12-06T23:53:02.620 回答
0

如果您需要比 Google URL 格式提供的更多灵活性,或者您想在应用程序中嵌入地图而不是启动地图应用程序,那么可以在https://sourceforge.net/projects/quickconnect找到一个示例。

于 2012-04-03T12:57:22.277 回答
0

iPhone4 iOS 6.0.1 (10A523)

适用于 Safari 和 Chrome。迄今为止的最新版本(2013 年 6 月 10 日)。

下面的 URL 方案也有效。但是如果 Chrome 只能在页面内部工作,则不能从地址栏中工作。

地图:q=GivenTitle@纬度,经度

于 2013-06-10T10:54:11.687 回答
0
**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]];
于 2016-07-18T12:38:23.680 回答
0

Swift 4 上的工作代码:

第 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)
        }
    }
于 2019-02-19T13:37:43.223 回答