uniapp 安卓 geolocation error: code - 18; message - not support gcj02 如何解决?
在uniapp开发中,安卓端调用geolocation接口时出现错误:code -18,提示"not support gcj02"。请问这是什么原因导致的?应该如何解决?目前iOS端正常,只有安卓机出现这个问题。尝试过修改坐标系类型为wgs84仍然报错,求解决方案!
2 回复
安卓端不支持GCJ02坐标系。改用WGS84坐标系即可解决。修改uni.getLocation的type参数为’wgs84’。
这个问题是因为Android设备上的UniApp在使用Geolocation API时,不支持坐标系类型gcj02(国测局坐标系,即火星坐标系)导致的。通常是因为设备或系统版本限制,或API配置问题。
解决方法:
-
修改坐标系类型
将geolocation的type参数改为wgs84(国际通用坐标系):uni.getLocation({ type: 'wgs84', // 改为wgs84 success: (res) => { console.log(res.latitude, res.longitude); }, fail: (err) => { console.error('定位失败:', err); } }); -
检查设备兼容性
部分旧Android设备或定制系统可能不支持gcj02,建议在代码中动态判断或统一使用wgs84。 -
坐标系转换(如必须用gcj02)
若业务需gcj02坐标,可先获取wgs84坐标,再通过工具库转换(如使用coordtransform库):npm install coordtransformimport { wgs84togcj02 } from 'coordtransform'; uni.getLocation({ type: 'wgs84', success: (res) => { const [lat, lng] = wgs84togcj02(res.longitude, res.latitude); console.log('转换后坐标:', lat, lng); } }); -
更新UniApp或HBuilderX
确保使用最新开发工具和基础库,避免旧版本兼容问题。
注意:
- 国内地图SDK(如高德、百度)通常需
gcj02坐标,若定位与地图结合,建议通过转换实现。 - 若问题持续,检查设备定位权限及网络状态。

