收藏
回答

小程序 getLocation 无论传入哪种 type 返回的坐标系都相同?

问题现象

用 wx.getLocation({ type: 'gcj02' }) 取到的坐标是 wgs84 坐标系并非 gcj02 坐标系

测试环境

系统:iphoneX iOS 13.3.1 微信版本:7.0.12

证明步骤

第一:无论 type 是 gcj02 还是 wgs84,返回的坐标基本相同

我尝试调用 wx.getLocation({ type: 'gcj02' }) 和 wx.getLocation({ type: 'wgs84' }),这两者返回的坐标基本都相同的,如图1 type=gcj02 与图2 type=wgs84:

(图1 wx.getLocation({ type: 'gcj02' }) 取到的值

(图2 wx.getLocation({ type: 'wgs84' }) 取到的值)

获取到的两个坐标分别是 (118.170624, 24.487984) 和 (118.170670, 24.487993) ,这两个坐标相差很小基本可以认为是同一个坐标系下坐标。而且在两次实验期间,我是删掉小程序重新进入,并全程使用4G网络,应该不存在小程序的缓存和WIFI定位偏差问题。

第二:用 wx.openLocation 打开 type=gcj02 的坐标有偏差

除了两者坐标值相近外,还有一点,就是 wx.getLocation 文档中写到 gcj02 可用于 wx.openLocation 的坐标:

(图3 wx.getLocation 接口文档截图)

第三:type=gcj02 的坐标当成 wgs84 转成 gcj02 坐标系所得位置为真实位置

我尝试着用 gcj02 得到的坐标传入 openLocation 中,得到了如图4:

(图4 用 gcj02 得到的坐标传入 openLocation 结果

绿色坐标点是从 wx.getLocation 得到的坐标值,蓝色圆点是我真实的坐标,说明当 type=“gcj02” 的时候获取到的可能不是 gcj02 坐标系而是 wgs84 坐标系的。

接着,我用坐标转换工具(https://tool.lu/coordinate/)将 type="gcj02" 获取的坐标系 (118.170624, 24.487984) 当成”wgs84“转换成"gcj02"坐标系,结果为:(118.17546965034533, 24.48524971152184)。再将这个坐标值作为参数传给 wx.openLocation({ latitude: 24.48524971152184, longitude: 118.17546965034533 }),结果地图展示的坐标刚好是我真实的位置,如图5所示:

(图5)

因此,我可以断定用 type=gcj02 取到的坐标大概率也是 wgs84 坐标系中的坐标。


最后,请教一下,wx.getLocation 应该怎么传参才能取到 gcj02 坐标系的坐标?我们最近有需求要用到比较精确的定位,希望官方同学可以在此解答,多谢~

(我做实验的代码片段:https://developers.weixin.qq.com/s/9PByLVm47jgC,因为代码片段无法在真机上运行,以上实验是将代码片段中的代码 copy 到真实小程序中运行的,代码片段仅做代码逻辑是否正确的检验。)



最后一次编辑于  2020-04-28
回答关注问题邀请回答
收藏

1 个回答

  • 小宝
    小宝
    2020-05-05

    我也遇到这个问题,不知道是不是阿拉丁统计脚本默认用wgs84 格式有关系

    2020-05-05
    有用
    回复 1
    • w_西辰
      w_西辰
      2020-05-19
      应用打开后我们有用wgs84做定位过一次,再次调用就缓存了wgs84坐标系的定位
      2020-05-19
      1
      回复
登录 后发表内容
问题标签