微信小程序坐标系纠正,计算偏差整理

这是一篇关于WGS-84坐标系,GCJ-02坐标系,BD09坐标系相互转换的文章,方法都是网上查询得到的,并非原创。在我的项目中使用到地图定位功能,后台中返回两种坐标系经纬度,一种是百度地图获取的经纬度,另一种是GPS获取的经纬度。

首先介绍一下当前的互联网的坐标系都有哪些坐标系
地图坐标(WGS84)

-国际标准,从专业GPS 设备中取出的数据的坐标系
-国际地图提供商使用的坐标系

火星坐标 (GCJ-02)也叫国测局坐标系

-中国标准,从国行移动设备中定位获取的坐标数据使用这个坐标系
-国家规定: 国内出版的各种地图系统(包括电子形式),必须至少采用GCJ-02对地理位置进行首次加密。

百度坐标 (BD-09)

-百度标准,百度 SDK,百度地图,Geocoding 使用

需要注意的是小程序默认的是WGS84

第一种方法百度经纬度转换腾讯经纬度

微信小程序-百度地图坐标转腾讯地图坐标

//百度经纬度转换腾讯经纬度
  reverseLocation: function() {
    var that = this;
    // 实例化API核心类
    var demo = new QQMapWX({
      key: '你的秘钥'
    });
    // 调用接口
    demo.reverseGeocoder({
      location: {
        latitude: that.data.latitude,
        longitude: that.data.longitude
      },
      coord_type: 3, //baidu经纬度
      success: function(res) {
        var latitude = res.result.ad_info.location.lat;
        var longitude = res.result.ad_info.location.lng;
        var markers = [{
          iconPath: '../../../images/common/location.png',
          longitude: longitude,
          latitude: latitude,
          id: "map",
        }]
        console.log(markers)
        that.setData({
          markers: markers,
          longitude: longitude,
          latitude: latitude
        })
      }
    });
  },
第二种方法

微信小程序-腾讯地图显示偏差问题

这里面有详细介绍

markerMap: function() {
    var latitude = this.data.latitude
    var longitude = this.data.longitude
    var resultMap = gcoord.transform(
      [latitude, longitude], // 经纬度坐标
      gcoord.WGS84, // 当前坐标系
      gcoord.GCJ02
    )
    var latitudeMap = resultMap[0]
    var longitudeMap = resultMap[1]
    var markers = [{
      iconPath: '../../../images/common/location.png',
      latitude: latitudeMap,
      longitude: longitudeMap,
      id: "map",
    }]
    console.log(markers)
    this.setData({
      markers: markers,
      latitude: latitudeMap,
      longitude: longitudeMap
    })
  },
第三个,也是解决我问题的方法(推荐)
原文链接

百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系互转

小程序安装方法
npm i coordtransform -S --production
//国测局坐标(火星坐标,比如高德地图在用),百度坐标,wgs84坐标(谷歌国外以及绝大部分国外在线地图使用的坐标)
var coordtransform=require('coordtransform');
//百度经纬度坐标转国测局坐标
var bd09togcj02=coordtransform.bd09togcj02(116.404, 39.915);
//国测局坐标转百度经纬度坐标
var gcj02tobd09=coordtransform.gcj02tobd09(116.404, 39.915);
//wgs84转国测局坐标
var wgs84togcj02=coordtransform.wgs84togcj02(116.404, 39.915);
//国测局坐标转wgs84坐标
var gcj02towgs84=coordtransform.gcj02towgs84(116.404, 39.915);
console.log(bd09togcj02);
console.log(gcj02tobd09);
console.log(wgs84togcj02);
console.log(gcj02towgs84);
//result
//bd09togcj02:   [ 116.39762729119315, 39.90865673957631 ]
//gcj02tobd09:   [ 116.41036949371029, 39.92133699351021 ]
//wgs84togcj02:  [ 116.41024449916938, 39.91640428150164 ]
//gcj02towgs84:  [ 116.39775550083061, 39.91359571849836 ]
marker:function(){
    var wgs84togcj02 = markerJS.wgs84togcj02(this.data.longitude, this.data.latitude);
    var gpslatitude = wgs84togcj02[1];
    var gpslongitude = wgs84togcj02[0];
    var markers = [{
      iconPath: '../../../images/common/location.png',
      latitude: gpslatitude,
      longitude: gpslongitude,
      id: "map",
    }]
    console.log(markers)
    this.setData({
      markers: markers,
      latitude: gpslatitude,
      longitude: gpslongitude
    })
  },

希望能帮到你!

你可能感兴趣的:(微信小程序坐标系纠正,计算偏差整理)