高德地图手机端定位偏移问题

手机端定位偏移问题

1、坐标系

  • WGS-84原始坐标系:也就是GPS定位拿到的经纬度,谷歌和高德在国外可以正常使用GPS定位,国内不允许各个平台使用GPS坐标。
  • GCJ-02坐标系,又名火星坐标系,由WGS-84加密而成,在国内各个地图平台需要使用这种坐标系,或者在GCJ-02的基础上在进行加密。像谷歌,高德,腾讯都是通用的GCJ-20坐标系
  • BD-09坐标系,是百度地图通过再次加密GCJ-20坐标系得到的独有的坐标系只适用于百度地图。(慎用)

2、原生安卓,ios定位偏移(vue+crodova)

navigator.geolocation.getCurrentPosition(geolocationSuccess,
                                         [geolocationError],
                                         [geolocationOptions]);

以上代码为crodova调用手机的原生定位方法,得到的经纬度为GPS坐标系,在国内各个地图平台上是无法使用的,亲测会发生大约一公左右的偏移。

3、偏移解决方案

以高德地图为例,高德地图中jsapi中有一个坐标转换的方法可将gps坐标转换为GCJ-20坐标。

var gps = [116.3, 39.9];
AMap.convertFrom(gps, 'gps', function (status, result) {
  if (result.info === 'ok') {
    var lnglats = result.locations; // Array.<LngLat>
  }
});

4.地图API定位

地图SDK会自动选择加密的方式,然后再将点显示在地图上,这个时候是没有偏移的。以高德地图为例。

mapObj = new AMap.Map('iCenter');
mapObj.plugin('AMap.Geolocation', function () {
    geolocation = new AMap.Geolocation({
        enableHighAccuracy: true,//是否使用高精度定位,默认:true
        timeout: 10000,          //超过10秒后停止定位,默认:无穷大
        maximumAge: 0,           //定位结果缓存0毫秒,默认:0
        convert: true,           //自动偏移坐标,偏移后的坐标为高德坐标,默认:true
        showButton: true,        //显示定位按钮,默认:true
        buttonPosition: 'LB',    //定位按钮停靠位置,默认:'LB',左下角
        buttonOffset: new AMap.Pixel(10, 20),//定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20)
        showMarker: true,        //定位成功后在定位到的位置显示点标记,默认:true
        showCircle: true,        //定位成功后用圆圈表示定位精度范围,默认:true
        panToLocation: true,     //定位成功后将定位到的位置作为地图中心点,默认:true
        zoomToAccuracy:true      //定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false
    });
    mapObj.addControl(geolocation);
    geolocation.getCurrentPosition();
    AMap.event.addListener(geolocation, 'complete', onComplete);//返回定位信息
    AMap.event.addListener(geolocation, 'error', onError);      //返回定位出错信息
});

在移动端,如果开发者开启了sdk辅助定位,那么安卓手机上我们会优先尝试调用sdk的定位接口,失败之后优先调用浏览器原生定位接口进行定位,浏览器定位失败之后尝试进行精确IP定位,如果以上三种定位全部尝试失败则返回error事件或回调error信息,否则和PC端的一样,定位成功之后进行高德坐标转化和地址融合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值