iOS开发:调用Apple Maps绘制两点路线失败(显示路线不可用)求解
解决Apple Maps跳转后无法显示路线的问题
你遇到的问题其实很常见,主要是当前的URL参数设置有几个小问题,导致Apple Maps没法正确生成路线。咱们一步步来解决:
问题根源分析
你当前的URL只指定了终点(daddr),却没明确传入起点(saddr)。虽然Apple Maps理论上可以自动使用当前位置作为起点,但有时候会因为权限、定位精度或者参数解析问题失败,导致无法生成有效路线。另外直接拼接字符串生成URL还可能存在编码问题,比如经纬度的负号、小数点这些字符如果没正确编码,也会让地图应用解析出错。
修正方案
推荐用URLComponents来构建URL,它会自动处理参数编码,比直接拼接字符串更可靠。同时要明确传入起点和终点的经纬度,还要确保路线类型参数(dirflg)符合两地之间的可用路线类型。
这里给你修改后的代码示例:
// 假设你已经有起点的经纬度:startLat, startLong let startLat = 39.9042 // 示例起点纬度 let startLong = 116.4074 // 示例起点经度 let destLat = 31.2304 // 示例终点纬度 let destLong = 121.4737 // 示例终点经度 var components = URLComponents(string: "http://maps.apple.com/maps")! components.queryItems = [ URLQueryItem(name: "saddr", value: "\(startLat),\(startLong)"), URLQueryItem(name: "daddr", value: "\(destLat),\(destLong)"), URLQueryItem(name: "dirflg", value: "d") // d=驾车,w=步行,r=公交 ] if let url = components.url { print(url) if #available(iOS 10.0, *) { UIApplication.shared.open(url, options: [:], completionHandler: nil) } else { UIApplication.shared.openURL(url) } }
额外注意事项
- 确认经纬度的顺序是纬度在前,经度在后,Apple Maps的参数要求是这个顺序,搞反了会定位到错误的地点
- 检查
dirflg参数:如果两地之间没有驾车路线(比如跨海洋),可以换成w(步行)或者r(公交)试试,或者移除这个参数让Apple Maps自动推荐 - 确保你的App已经获取了定位权限(如果想让Apple Maps自动用当前位置当起点的话),不过明确传入起点经纬度会更可靠
内容的提问来源于stack exchange,提问作者Govind Rakholiya
相关产品推荐
相关产品推荐

