百度地图的位置到腾讯地图上定位偏差

1,221 阅读2分钟
  • 测试: 微信小程序地图上的机构位置 偏差很大啊,直接定位到海里了,这不对,给你提个bug.
  • 开发: 那不能啊,那经纬度都是后台返回的,有位置偏差,那是腾讯地图的锅。
  • 测试: 那你想想办法,解决一下。
  • 开发: 这,我查。。。。

这个位置动百度地图上获取的的经纬度,怎么可能不对呢。找了一圈,最后定位到 坐标系的问题。百度地图 与 腾讯地图是两种 地图坐标系统。

火星坐标系统 GCJ-02 地图厂商如下

  • 腾讯搜搜地图
  • 搜狐搜狗地图
  • 阿里云地图
  • 高德MapABC地图
  • 灵图51地图

百度坐标系统 BD-09【对火星坐标系进行一次加密】 地图厂商如下

  • 百度Baidu地图

上段 代码

  • 百度经纬度转换成腾讯/高德地图经纬度
function bMapTransQQMap(lng, lat) {
      let x_pi = 3.14159265358979324 * 3000.0 / 180.0;
      let x = lng - 0.0065;
      let y = lat - 0.006;
      let z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
      let theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
      let lngs = z * Math.cos(theta);
      let lats = z * Math.sin(theta);
      
      return {
          lng: lngs,
          lat: lats        
      }   
}
  • 腾讯/高德地图经纬度转换成百度经纬度
function qqMapTransBMap(lng, lat) {
      let x_pi = 3.14159265358979324 * 3000.0 / 180.0;
      let x = lng;
      let y = lat;
      let z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
      let theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
      let lngs = z * Math.cos(theta) + 0.0065;
      let lats = z * Math.sin(theta) + 0.006;
     
      return {
          lng: lngs,
          lat: lats 
      } 
}

后续的故事

  • 测试: 乡镇地图的位置也是定位不准呐,你看看?
  • 开发: 那不能奥,经纬度是百度地图上取到的,echarts也是百度的,肯定是一种地图坐标系的啊,
  • Echarts issues查查去,喔。还真有人遇见定位不准的事情啊,底下的回复指出是坐标系的问题。
  • 开发: 在网上下载的【乡镇地图数据】是到底是哪一个坐标系,翻翻记录,果然,是火星坐标系!!!!有了上一次的经验,这下直接处理好了问题。 至此完美解决。