路线规划:
高德地图
tip:sourceApplication字段必须经过编码
链接: 文档地址.
百度地图
链接: 文档地址.
腾讯地图
链接: 文档地址.
iOS Demo
/// 打开地图步行导航
public static func openMap(desPoint:String) {
var mapArray: [String] = ["苹果地图"]
if UIApplication.shared.canOpenURL(URL(string: "iosamap://")!) {
mapArray.append("高德地图")
}
if UIApplication.shared.canOpenURL(URL(string: "baidumap://")!){
mapArray.append("百度地图")
}
if UIApplication.shared.canOpenURL(URL(string: "qqmap://")!) {
mapArray.append("腾讯地图")
}
/// 打开地图
let alert = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
for (index, item) in mapArray.enumerated() {
alert.addAction(UIAlertAction(title: item, style: .default, handler: {(aleraction) in
goMapAction(type: index, des: desPoint)
}))
}
alert.addAction(UIAlertAction(title: "取消", style: .cancel, handler: nil))
UIApplication.shared.keyWindow?.rootViewController?.present(alert, animated: true, completion: nil)
}
/// 跳到地图界面 进行步行导航 type : 0 :苹果 1 是 高德 2 是百度
static func goMapAction(type:NSInteger, des: String) {
// 获取我的位置
guard let mylocation = UserDefaults.getMyLocation() else {
// 要不要提示我的位置问题
return
}
// 解析目的地
do {
let desLocation = try pumpkinDecoder(jsonstr: des, modelType: GPSPoint.self)
let lat = mylocation.latitude
let lng = mylocation.longitude
let endlat = desLocation.latitude
let endLng = desLocation.longitude
switch type {
case 0:
let currentLocation:MKMapItem = MKMapItem(placemark: MKPlacemark(coordinate: CLLocationCoordinate2D(latitude: Double(lat)!, longitude: Double(lng)!), addressDictionary: nil))
let toLocation:MKMapItem = MKMapItem(placemark: MKPlacemark(coordinate: CLLocationCoordinate2D(latitude: Double(endlat)!, longitude: Double(endLng)!), addressDictionary: nil))
MKMapItem.openMaps(with: [currentLocation,toLocation], launchOptions: [MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDefault])
case 1:
let manager = ConfigManager.share()
let applicationName = manager.getProduceName()
if let iosmapUrl = URL(string: "iosamap://path?sourceApplication=\(applicationName)&sid=&slat=\(lat)&slon=\(lng)&sname=&did=&dlat=\(endlat)&dlon=\(endLng)&dname=&dev=0&t=2".initPercent()) {
UIApplication.shared.open(iosmapUrl, options: [:], completionHandler: nil)
}
case 2:
//APP Url Scheme 框架 例如:[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mqq://"]]; 直接打开qq
UIApplication.shared.open(URL(string: "baidumap://map/direction?origin=\(lat),\(lng)&destination=\(endlat),\(endLng)&mode=walking&coord_type=gcj02")!, options: [:], completionHandler: nil)
case 3:
//
let urlStr = "qqmap://map/routeplan?type=walk&fromcoord=\(lat),\(lng)&tocoord=\(endlat),\(endLng)&policy=1"
UIApplication.shared.open(URL(string: urlStr)!, options: [:], completionHandler: nil)
default:
break
}
} catch {}
}