uni.getLocation调用失败或坐标偏差大,主因是iOS与Android行为不一致及坐标系混用:iOS默认返回WGS84,而高德地图等国内服务要求GCJ02;必须显式指定type: 'gcj02'(大小写敏感),否则定位偏移、逆地理编码失败或uni.openLocation跳转错位。

uni.getLocation 调用失败或返回坐标偏差大
直接调用 uni.getLocation 时,iOS 和 Android 行为不一致:iOS 默认返回 WGS84 坐标(GPS 原始坐标),而高德地图 SDK 要求 GCJ02(国测局加密坐标)。若未指定 type,Android 可能返回模糊的基站/WiFi 定位,误差常达数百米。
必须显式传入 type: 'gcj02',否则后续调用高德逆地理编码或 uni.openLocation 会偏移、跳转错位。部分安卓机型(如小米、华为)即使开启 GPS,isHighAccuracy: true 也未必生效——需同时确保系统设置中「定位服务」+「高精度模式」已打开。
-
type必须是'gcj02',不能省略或写成'GCJ02'(大小写敏感) -
altitude: true在部分 Android 机型上会导致失败,可先去掉再测试 - 真机调试务必用自签名证书打包,云端打包默认不启用高德定位模块
为什么 uni.chooseLocation 返回的坐标不能直接用于高德 API
uni.chooseLocation 是唤起原生地图选点,它返回的 latitude/longitude 已是 GCJ02 坐标,但仅适用于展示和跳转;若想拿到该位置的省市区、区域编码(adcode)、结构化地址(如“北京市朝阳区建国路88号”),仍需调用高德逆地理接口 https://restapi.amap.com/v3/geocode/regeo。
注意:uni.chooseLocation 的 success 回调中,res.address 是平台拼接的简略字符串(iOS 为空,Android 不稳定),不可信;必须以返回的经纬度为参数,主动请求高德接口解析。
高德地图 API 调用工具,返回原始 JSON 数据。Use when users ask about 天气、地址、坐标、周边、路线、导航、打车、行程 in China. Commands: weather, geo, regeo, search, around, detail, route, distance,...
- 请求 URL 中
location参数格式必须为'经度,纬度'(不是纬度在前) - 高德 key 需在「应用管理」中开通「Web 服务」和「逆地理编码」权限
- H5 端调用该接口需配置 HTTPS + Referer 白名单,否则返回
info: "INVALID_USERIP"
高德逆地理请求返回 status=0 或 info="INSUFFICIENT_PRIVILEGES"
常见于 key 未正确配置权限或平台不匹配。错误码 status=0 通常表示请求被拦截,而非网络失败;INSUFFICIENT_PRIVILEGES 明确指向权限问题。
关键检查点:Android 包名、iOS Bundle ID、H5 的域名,三者必须与高德控制台创建应用时填写的完全一致(包括大小写和点号)。例如 Android 包名填了 com.example.app,但实际打包用的是 com.example.myapp,就会拒绝请求。
- Android 端还需校验 SHA1 签名是否与打包证书一致(debug 和 release 签名不同)
- 使用
uni.request调用时,url必须是完整 HTTPS 地址,不能漏掉https:// - 不要在请求体里传
headers: { 'Content-Type': 'application/json' },高德接口只接受 query string 参数
uni.openLocation 打开地图后定位点漂移或空白
uni.openLocation 本身不依赖高德 key,但它对坐标系极其敏感:参数中的 latitude 和 longitude 必须是 GCJ02 坐标,且必须由 uni.getLocation({ type: 'gcj02' }) 或 uni.chooseLocation 提供。若混用 WGS84 坐标,iOS 可能显示空白,Android 则大概率偏移 500 米以上。
另一个隐藏坑是:某些 Android 厂商(如 OPPO、vivo)系统级地图 App 不支持 uni.openLocation 的 schema 跳转,此时会静默失败。建议加兜底逻辑——失败时提示用户手动复制坐标到地图 App 搜索。
- 调用前务必验证
latitude和longitude是否为合法数字(非null、undefined或字符串) - 不要对坐标做四舍五入或截断(如
toFixed(6)),浮点精度丢失会导致跳转失败 - 鸿蒙 NEXT 设备需确认已集成高德
amap_lbs_map3d >=2.2.4原生组件,否则uni.openLocation不可用
uni.getLocation 输出,到逆地理请求输入,再到 uni.openLocation 输入,三者必须同为 GCJ02。任何一环混入 WGS84 或 BD09LL,都会导致肉眼可见的偏移,且难以排查。


















