问题现象
用 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 到真实小程序中运行的,代码片段仅做代码逻辑是否正确的检验。)
我也遇到这个问题,不知道是不是阿拉丁统计脚本默认用wgs84 格式有关系