簡單介紹下如何使用 swift 實現(xiàn)跳轉(zhuǎn)到高德地圖、百度地圖、或系統(tǒng)自帶地圖導(dǎo)航,有了這個,媽媽再也不用擔(dān)心app里需要實現(xiàn)導(dǎo)航功能啦?????? 總結(jié)一下,高德地圖跳轉(zhuǎn)完直接開始導(dǎo)航,個人認(rèn)為體驗最好。百度地圖需要用戶手動確認(rèn)一下,也還不錯。自帶地圖加載略慢,????
//swift3.1
let alertController = UIAlertController(title: "選擇導(dǎo)航地圖", message: nil, preferredStyle: .actionSheet)
let cancelAction = UIAlertAction.init(title: "取消", style: .cancel) { (action) in
}
//系統(tǒng)自帶地圖,內(nèi)核高德地圖,無需判斷是否安裝
let appleAction = UIAlertAction(title: "自帶地圖", style: .default){ (action) in
let currentLocation = MKMapItem.forCurrentLocation()
let toLocation = MKMapItem.init(placemark: MKPlacemark.init(coordinate: view.annotation.coordinate, addressDictionary: nil))
MKMapItem.openMaps(with: [currentLocation, toLocation],
launchOptions: [MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving,
MKLaunchOptionsShowsTrafficKey:true])
}
//百度地圖
if UIApplication.shared.canOpenURL(URL.init(string: "baidumap://")!) {//判斷是否安裝了地圖
let baiduAction = UIAlertAction(title: "百度地圖", style: .default){ (action) in
//注意:origin={{我的位置}}不要變;目的地隨便寫
let urlString = "baidumap://map/direction?origin={{我的位置}}&destination=latlng:\(view.annotation.coordinate.latitude),\(view.annotation.coordinate.longitude)|name=目的地&mode=driving&coord_type=gcj02"
let escapedString = urlString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
UIApplication.shared.openURL(URL.init(string: escapedString!)!)
}
alertController.addAction(baiduAction)
}
//高德地圖
if UIApplication.shared.canOpenURL(URL.init(string: "iosamap://")!) {
let gaodeAction = UIAlertAction(title: "高德地圖", style: .default){ (action) in
let urlString = "iosamap://navi?sourceApplication=隨便寫&backScheme=隨便寫&lat=\(view.annotation.coordinate.latitude)&lon=\(view.annotation.coordinate.longitude)&dev=0&style=2"
let escapedString = urlString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
UIApplication.shared.openURL(URL.init(string: escapedString!)!)
}
alertController.addAction(gaodeAction)
}
alertController.addAction(cancelAction)
alertController.addAction(appleAction)
present(alertController, animated: true, completion: nil)
info.plist中需要添加高德地圖、百度地圖為白名單:
在key:LSApplicationQueriesSchemes的array中增加下面兩項:

白名單配置