uni.openLocation仅支持单点定位,不支持路线规划;查路线需手动构造高德、百度、腾讯等地图的URL Scheme/Intent,并处理平台差异、坐标系转换及安装检测。

uni-app里怎么跳转到第三方地图APP查看路线
直接调用系统默认地图或指定第三方地图(如高德、百度、腾讯)查看路线,uni-app 本身不提供原生路线规划能力,必须借助 uni.openLocation 或拼接 URL Scheme / Intent 跳转。关键在于:**目标地图是否已安装 + 是否支持标准参数格式**。
最稳妥的方式是优先用 uni.openLocation,它会自动唤起系统默认地图;若需强制指定某款地图(比如用户手机装了高德但系统默认是苹果地图),就得手动构造跳转链接,此时要按各地图文档要求传参,稍有偏差就失败。
uni.openLocation 能不能指定高德/百度查路线
不能。uni.openLocation 只支持「打开一个坐标点」,不支持起点+终点+路径规划。它的参数只有 latitude、longitude、name、address,本质是“标记一个点”,不是“画一条线”。
如果你传了两个坐标想让它画路线,它只会打开第一个点——这是常见误解。
- 想查路线,必须用第三方地图的 SDK 或 URL Scheme
-
uni.openLocation适合“附近门店定位”这类单点场景 - 它在 iOS 和 Android 行为一致,兼容性好,但功能受限
手动跳转高德/百度地图查路线的正确写法
核心是构造合法的 URL Scheme(iOS)或 Intent URL(Android),并用 uni.getSystemInfoSync().platform 做平台判断。注意:URL 参数必须 URL 编码,坐标必须是小数格式(不能带空格或中文逗号),且高德、百度对起点/终点字段命名完全不同。
示例:从当前定位到某门店查驾车路线
const lat = 39.9087;
const lng = 116.3975;
const name = '某某大厦';
const address = '北京市朝阳区xxx';
// 高德:amapuri://
const amapUrl = `amapuri://route/plan?sourceApplication=uniapp&slat=${lat}&slon=${lng}&dlat=${lat}&dlon=${lng}&dname=${encodeURIComponent(name)}&dev=0&m=0`;
// 百度:baidumap://
const baiduUrl = `baidumap://map/direction?origin=latlng:${lat},${lng}|name:我的位置&destination=latlng:${lat},${lng}|name:${encodeURIComponent(name)}&mode=driving`;
// 腾讯:qqmap://
const qqUrl = `qqmap://map/routeplan?from=我的位置&fromcoord=${lat},${lng}&to=${encodeURIComponent(name)}&tocoord=${lat},${lng}&policy=0&type=drive`;
// 实际使用时需先 try/catch + 判断 scheme 是否能打开
uni.navigateTo({
url: `...` // 根据平台选上面某条
});
- 高德的
dev=0表示不走高速,m=0表示驾车;slat/slon是起点,dlat/dlon是终点 - 百度必须用
latlng:纬度,经度格式,顺序是「纬度在前」,和 GeoJSON 一致,但和高德相反(高德是lon,lat) - 腾讯地图的
policy=0是推荐路线,type=drive是驾车,不传可能默认步行 - 所有参数值必须
encodeURIComponent,否则含中文或符号时跳转会失败
跳转失败的三个高频原因
不是代码写错,而是环境或参数细节没对上:
- iOS 上高德 URL Scheme 失效?检查是否在
info.plist里加了LSApplicationQueriesSchemes并包含amapuri - Android 打不开百度地图?确认手机装的是「百度地图」官方版(非极速版、Lite 版),后者不支持 URL Scheme
- 坐标传进去显示“位置错误”?检查经纬度是 WGS84 坐标系(uni-app 获取的
uni.getLocation默认就是),高德/腾讯接受,但百度需要 BD09,得先用uni.convertLocation转换
真正麻烦的从来不是写几行跳转代码,而是每款地图的参数规则、坐标系、安装状态、iOS/Android 差异全得兜住——漏掉任意一环,用户点下去就静默失败。











