在项目中,遇到了应用中打开第三方地图的功能,网上的文章几乎清一色的打开第三方地图并且导航,但我的项目中不需要导航的功能,需要标记地点,故只能查官方的文档。
应用中用URL Secheme的方式打开第三方地图应用。对应的地图App有,谷歌地图,高德地图,百度地图。
他们对应的URL Secheme:
- 谷歌地图
URL Scheme:comgooglemaps://
官方文档 - 高德地图
URL Scheme:iosamap://
官方说明 - 百度地图
URL Scheme:baidumap://
官方文档
在iOS 9之后,由于苹果进一步完善了安全机制,我们要想用URL Secheme跳转,需要在Info.plist
中添加如下代码:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>comgooglemaps</string>
<string>iosamap</string>
<string>baidumap</string>
</array>
跳转到谷歌地图:
if UIApplication.shared.canOpenURL(URL(string: Const.MapURL.googleSecheme)!) {
let googleURLStr = "comgooglemaps://?q=\(coordinate.latitude),\(coordinate.longitude)&zoom=17&views=traffic"
let googlemap = UIAlertAction(title: Const.MapType.googlemap, style: .default) { _ in
if let url = URL(string: googleURLStr) {
self.open(url: url)
}
}
alert.addAction(googlemap)
}
跳转到高德地图:
if UIApplication.shared.canOpenURL(URL(string: Const.MapURL.gaodeSecheme)!) {
let gaodeURLStr = "iosamap://viewMap?sourceApplication=\(Const.AppMessage.appName)&poiname=\(name)&lat=\(coordinate.latitude)&lon=\(coordinate.longitude)&dev=0"
let gaodemap = UIAlertAction(title: Const.MapType.gaodemap, style: .default) { _ in
if let url = URL(string: gaodeURLStr) {
self.open(url: url)
}
}
alert.addAction(gaodemap)
}
跳转到百度地图:
if UIApplication.shared.canOpenURL(URL(string: Const.MapURL.baiduSecheme)!) {
let baiduURLStr = "baidumap://map/marker?coord_type=gcj02&zoom=17&location=\(coordinate.latitude),\(coordinate.longitude)&title=\(name)&content=\(address)&src=webapp.marker.demo.MapTest"
let baidumap = UIAlertAction(title: Const.MapType.baidumap, style: .default) { _ in
if let url = URL(string: baiduURLStr) {
self.open(url: url)
}
}
alert.addAction(baidumap)
}
具体的参数请参考对应的官方文档。