美文网首页WEB前端程序开发微信小程序开发
微信小程序坐标系纠正,计算偏差整理

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

作者: 无枉少年 | 来源:发表于2019-08-05 16:00 被阅读1次

    这是一篇关于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
        })
      },
    

    希望能帮到你!

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/hqpmdctx.html