关于地图坐标和定位误差

 

实验背景:

  研究并比较,三种定位结果(主要是讨论GPS定位):android

  1Google Maps + Android API的定位算法

  2.百度地图SDK+百度定位SDK编程

  3.高德地图SDK+高德定位SDK网络

 

  测试条件:国产Android手机。测试

 

定位结果:

  2和3都比较靠谱,定位精度符合预期(室外GPS定位偏差在10米之内),固然因为百度和高德的定位SDK中通常是混合定位,会结合利用网络定位和后台数据支持什么的。加密

  1的定位结果基本无效,显示的位置和在地图上标记的位置会有几十米的差距。spa

  虽然谷歌地图能够同时注册多种定位方式,好比GPS和网络定位同时开启,而后手动编程选择最佳位置,可是网络定位的精度过低,GPS的精度虽然高可是存在固有误差(精确但不许确),因此没法拯救这种位置误差。.net

 

缘由分析:

  因为国家测绘局的规定,地图坐标必须加密,加入随机的偏移。至少须要知足的一个标准叫GCJ-02htm

  GCJ-02参见百度百科:blog

  GCJ-02是由中国国家测绘局制订的地理信息系统的坐标系统。
  它是一种对经纬度数据的加密算法,即加入随机的误差。
  国内出版的各类地图系统(包括电子形式),必须至少采用GCJ-02对地理位置进行首次加密。

 

Google Maps为何出错:

  Google Maps的原生坐标是WGS-84,国际坐标,可是中国区域的部分,为了符合中国测绘法律规定,加入了偏移,知足了GCJ-02标准。

  而Android API得出的定位结果值,是GPS读出的,是没有加入偏移的,是WGS-84坐标

  因此坐标体系的不对应致使了偏差。

 

 

百度地图为何是对的:

  百度定位SDK部分介绍

http://developer.baidu.com/map/geosdk-android-classv4.0.htm#import.E7.9B.B8.E5.85.B3.E7.B1.BB

  能够经过public void setCoorType ( String )方法定义返回位置值的坐标类型。

  支持返回若干种坐标系,包括国测局坐标系、百度坐标系,须要更多坐标系请联系百度。

  目前这些参数的代码为

  返回国测局经纬度坐标系 coor=gcj02

  返回百度墨卡托坐标系 coor=bd09

  返回百度经纬度坐标系 coor=bd09ll

  百度手机地图对外接口中的坐标系默认是bd09ll,若是配合百度地图产品的话,须要注意坐标系对应问题。

 

  相关问题:

http://developer.baidu.com/map/geosdk-android-qa.htm#.E7.99.BE.E5.BA.A6.E5.9C.B0.E5.9B.BE.E5.AE.9A.E4.BD.8DAPI.E4.BD.BF.E7.94.A8.E4.BB.80.E4.B9.88.E5.9D.90.E6.A0.87.E7.B3.BB.EF.BC.9F

  国际经纬度坐标标准为WGS-84,国内必须至少使用国测局制定的GCJ-02,对地理位置进行首次加密。

  百度坐标在此基础上,进行了BD-09二次加密措施,更加保护了我的隐私。

  百度对外接口的坐标系并非GPS采集的真实经纬度,须要经过坐标转换接口进行转换。

 


高德地图的处理方式

  大体也是和百度相似的:
  http://developer.amap.com/location/faq
  高德地图的对外提供的坐标都是通过国家测绘局加密处理的,符合国家测绘局对地理信息保密要求,所以若是使用GPS得到的原始坐标在高德地图显示,会有误差,须要将原始坐标通过加密转换,转化为高德坐标。

 

一些参考资料:

  (也不知道靠谱不)

  http://kongxz.com/2013/10/wgs-cgj/

  转换算法:http://blog.csdn.net/coolypf/article/details/8686588

相关文章
相关标签/搜索