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配置问题。

解决方法:

  1. 修改坐标系类型
    geolocationtype参数改为wgs84(国际通用坐标系):

    uni.getLocation({
      type: 'wgs84', // 改为wgs84
      success: (res) => {
        console.log(res.latitude, res.longitude);
      },
      fail: (err) => {
        console.error('定位失败:', err);
      }
    });
    
  2. 检查设备兼容性
    部分旧Android设备或定制系统可能不支持gcj02,建议在代码中动态判断或统一使用wgs84

  3. 坐标系转换(如必须用gcj02)
    若业务需gcj02坐标,可先获取wgs84坐标,再通过工具库转换(如使用coordtransform库):

    npm install coordtransform
    
    import { wgs84togcj02 } from 'coordtransform';
    
    uni.getLocation({
      type: 'wgs84',
      success: (res) => {
        const [lat, lng] = wgs84togcj02(res.longitude, res.latitude);
        console.log('转换后坐标:', lat, lng);
      }
    });
    
  4. 更新UniApp或HBuilderX
    确保使用最新开发工具和基础库,避免旧版本兼容问题。

注意:

  • 国内地图SDK(如高德、百度)通常需gcj02坐标,若定位与地图结合,建议通过转换实现。
  • 若问题持续,检查设备定位权限及网络状态。
回到顶部