百度地图,高德地图,HTML5经纬度比较

对于一个地点的经纬度,是确定的?这个问题,我想很多人都会回答,肯定了,可实际上呢?我只能呵呵了。

在使用百度地图的过程中,发现一个很奇怪的现象,有时候调用百度地图js API时,后得到一个错的离谱的地方。然后我自己也就研究了一下jsAPI获取地理位置的相关信息,jsAPI其实都是利用了HTML5中的方法获取地理信息的。但很奇怪,使用HTML5获取到的经纬度和百度获取的竟然相差很大。

HTML5获取到的经纬度

function getLocation() {
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(showPosition);
    }
    else {alert( "Geolocation is not supported by this browser.") }
} 

        function showPosition(position)
  {
      $("#lngl").val(position.coords.longitude );
      $("#latl").val(position.coords.latitude);
}

百度地图获取经纬度的方法

  // 百度地图API功能
    var map = new BMap.Map("allmap");
    var circle = new BMap.Geolocation();
    var options={};
    options.enableHighAccuracy=true;
    options.timeout=10;
    options.maximumAge=0;
    circle.getCurrentPosition(locationResult, options);  //enableHighAccuracy	Boolean	要求浏览器获取最佳结果。,timeout	Number	超时时间。,maximumAge	Number	允许返回指定时间内的缓存结果。如果此值为0,则浏览器将立即获取新定位结果。
    map.addOverlay(circle);
    var tempGeocoder = new BMap.Geocoder();
    function locationResult(geolocationResult) {
        var Status = this.getStatus()
        if (Status == 0)//检索成功。对应数值“0”。
        {
            $("#lngBaidu").val(geolocationResult.point.lng);
            $("#latBaidu").val(geolocationResult.point.lat);
            var address = geolocationResult.address;
            $("#cityBaidu").val(address.city);
            $("#districtBaidu").val(address.district);
            $("#streetBaidu").val(address.street);
        else {
            alert("定位失败错误码" + Status)
        }
    }

高德地图获取经纬的方法

  // 高德地图API功能
        var mapObj, geolocation;
        var MGeocoder;
        mapObj = new AMap.Map(‘allmap1‘);
        mapObj.plugin(‘AMap.Geolocation‘, function () {
            geolocation = new AMap.Geolocation({
                enableHighAccuracy: true, //是否使用高精度定位,默认:true
                timeout: 10000,          //超过10秒后停止定位,默认:无穷大
                maximumAge: 0,           //定位结果缓存0毫秒,默认:0
                convert: false,           //自动偏移坐标,偏移后的坐标为高德坐标,默认:true
                showButton: false,        //显示定位按钮,默认:true
                buttonPosition: ‘LB‘,    //定位按钮停靠位置,默认:‘LB‘,左下角
                buttonOffset: new AMap.Pixel(10, 20), //定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20)
                showMarker: false,        //定位成功后在定位到的位置显示点标记,默认:true
                showCircle: false,        //定位成功后用圆圈表示定位精度范围,默认:true
                panToLocation: true,     //定位成功后将定位到的位置作为地图中心点,默认:true
                zoomToAccuracy: true      //定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false
            });
            mapObj.addControl(geolocation);
            AMap.event.addListener(geolocation, ‘complete‘, onComplete); //返回定位信息
            AMap.event.addListener(geolocation, ‘error‘, onError);      //返回定位出错信息
            geolocation.getCurrentPosition();
        });
        function onComplete(data) {
            var lnglatXY = [data.position.getLng(), data.position.getLat()];
            $("#accuracy").val(data.accuracy);
            $("#lng").val(data.position.getLng());
            $("#lat").val(data.position.getLat());
        }
		 function onError(data) {
            var str = ‘定位失败;‘;
            str += ‘错误信息:‘
            switch (data.info) {
                case ‘PERMISSION_DENIED‘:
                    str += ‘浏览器阻止了定位操作‘;
                    break;
                case ‘POSITION_UNAVAILBLE‘:
                    str += ‘无法获得当前位置‘;
                    break;
                case ‘TIMEOUT‘:
                    str += ‘定位超时‘;
                    break;
                default:
                    str += ‘未知错误‘;
                    break;
            }
            alert(str);
        }

使用这三种方法获取的经纬度竟然有很大不同!!

小数点后第一位就有可能不一样了,小数点后第二位是肯定不一样的,0.01的偏差就会导致几十公里的偏差,测试多次依然是这样。

最后在百度地图的官方文档找到了这样的的话

百度地图坐标转换API是一套以HTTP形式提供的坐标转换接口,用于将常用的非百度坐标(目前支持GPS设备获取的坐标、google地图坐标、soso地图坐标、amap地图坐标、mapbar地图坐标)转换成百度地图中使用的坐标,并可将转化后的坐标在百度地图JavaScript API、车联网API、静态图API、web服务API等产品中使用。注意Android SDK、iOS SDK、定位SDK和导航SDK坐标转换服务需单独申请

百度地图官方文档

才知道HTML5得到的数据是需要转化之后才是百度地图的经纬度。难怪测试了很多次,几乎都有这么大的偏差。

HTML5经纬度转化为百度地图经纬度的方法:

 var ggPoint = new BMap.Point(position.coords.longitude, position.coords.latitude);//HTML5的经纬度
 var convertor = new BMap.Convertor();
            var pointArr = [];
            pointArr.push(ggPoint);
            convertor.translate(pointArr, 1, 5, translateCallback)
        }
		 //坐标转换完之后的回调函数
    translateCallback = function (data) {
        if (data.status === 0) {
          //  data.points[0];
       //转换后的百度坐标(正确)
            $("#lngz").val(data.points[0].lng);
            $("#latz").val(data.points[0].lat);
        }
    }

经过这么转化后,偏差基本上在小数点后前三位基本上都一样了。

经过测试发现,高德地图似乎直接使用了HTML5返回的经纬度,但没找到相关的文档,百度地图使用的是转化过的经纬度。一个简单的经纬度问题却由于各种原因导致了这么一个背离常识的问题,实在是令人难以理解!!

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-31 20:32:09

百度地图,高德地图,HTML5经纬度比较的相关文章

iOS判断并使用百度地图 高德地图 导航 (使用URI,不集成sdk)

[objc] view plaincopy  1. BOOL hasBaiduMap = NO;   2.         BOOL hasGaodeMap = NO;   3.            4.         if ([[UIApplication sharedApplication]canOpenURL:[NSURL URLWithString:@"baidumap://map/"]]){   5.             hasBaiduMap = YES;   6.

openlayers 3加载百度、高德、google瓦片地图

1.加载高德地图 //高德地图 var AMapLayer = new ol.layer.Tile({ source: new ol.source.XYZ({ url: 'http://wprd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=7&x={x}&y={y}&z={z}' }) }); 2.google地图 //google地图 var googleMapLayer = new ol.la

js中实现高德地图坐标经纬度转百度地图坐标

1 function tobdMap(x, y) { 2 var x_pi = 3.14159265358979324 * 3000.0 / 180.0; 3 var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi); 4 var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi); 5 var bd_lon = z * Math.cos(theta) + 0.00

百度地图API和高德地图API资料集锦

[高德地图API]从零开始学高德JS API(五)路线规划--驾车|公交|步行 [高德地图API]从零开始学高德JS API(四)搜索服务--POI搜索|自动完成|输入提示|行政区域|交叉路口|自有数据检索 [高德地图API]从零开始学高德JS API(三)覆盖物--标注|折线|多边形|信息窗口|聚合marker|麻点图|图片覆盖物 [高德地图API]从零开始学高德JS API(二)地图控件与插件--测距.圆形编辑器.鼠标工具.地图类型切换.鹰眼鱼骨 [高德地图API]从零开始学高德JS API

ios 一步一步学会自定义地图吹出框(CalloutView)-->(百度地图,高德地图,google地图)

前言 在 ios上边使用地图库的同学肯定遇到过这样的问题:吹出框只能设置title和subtitle和左右的view,不管是百度地图还是高德地图还是自带的 google地图,只提供了这四个属性,如果想添加更多的view,只能自定义.可是,类库只能看到.h文件,.m都看不到,这让新手比较蛋疼,庞大的地 图类库一时半会摸不着头脑,从头再学还需要时间,本文就教大家快速制作一个属于自己的 CalloutView!等你一步一步调通后,再回过头来使用系统自带的方法设置callout,就会领悟这个过程. 正文

Android笔记:百度地图与高德地图坐标转换问题

Android笔记:百度地图与高德地图坐标转换问题 安卓项目使用了百度地图的定位SDK,web端使用的也是百度地图, 后来发现界面显示百度地图不如高德效果好,web改用高德地图,原本的百度地图坐标是可以直接使用的,由于高德和百度地图的坐标系不一致 要如何转换呢. 补充了下坐标系知识后发现高德使用的坐标系是“gcj02”也就是大家所说的“火星坐标”, 百度使用的是“BD09”因为是百度所用大家习惯称之为“百度坐标”  ,如何将bd09转为gcj02呢,突然想到在百度的定位sdk里有这样一段说明(来

高德,百度,Google地图定位偏移以及坐标系转换

一.在进行地图开发过程中,我们一般能接触到以下三种类型的地图坐标系: 1.WGS-84原始坐标系,一般用国际GPS纪录仪记录下来的经纬度,通过GPS定位拿到的原始经纬度,Google和高德地图定位的的经纬度(国外)都是基于WGS-84坐标系的:但是在国内是不允许直接用WGS84坐标系标注的,必须经过加密后才能使用: 2.GCJ-02坐标系,又名"火星坐标系",是我国国测局独创的坐标体系,由WGS-84加密而成,在国内,必须至少使用GCJ-02坐标系,或者使用在GCJ-02加密后再进行加

高德地图使用心得,百度地图使用心得

1.环境配置 高德开发定位,地图,搜索,加覆盖物,这四个功能只需要要做三部 第一,下载三个架包,高德里面不涉及到3d地图没有.so文件,只需要三个架包,对于我们不需要的功能其他架包可以不用下载,比如不涉及到导航我们就不需要下载导航架包,这样可以减少应用的负重,将下载好的架包导入工程,配上截图! 这是加入项目中截图 导包完成之后然后就是添加服务,首先,请在application标签中声明service组件,每个app拥有自己单独的定位service.<service android:name=&quo

APICloud打开三方地图整合(百度,高德,腾讯,苹果自带)

一直想系统的整理打开地图的方法,今天抽时间把了百度,高德,腾讯,苹果自带地图都整理出来了,闲话不多说,直接上干货 ----------------------------------------------------------------------code start---------------------------------------------------------------------------------------------------- <!DOCTYPE HT