民用地图经纬度纠偏-高德系地图纠偏

民用地图经纬度纠偏-高德系地图纠偏

发表于:2012年06月20日  13:51 0

Autonavi,高德系地图(google地图、mapabc地图、腾讯的soso地图等,在地图下方有?autonavi.?mapabc 版权信息的)

 

高德为互联网/移动互联网用户和网站提供互联网地图(Mapabc.com)服务、地图API服务及基础地图服务。目前,MapABC地图网站已经成为中 国知名的地图网站及地图API的窗口。高德同时还为谷歌、腾讯、新浪、阿里巴巴、微软必应、京东商城等著名互联网网站提供基础地图服务支撑。而通过高德提供的地图API服务,已经有包括人人、搜房、赶集、拉手等3万多家互联网网站/移动互联网应用开发者构建起了自己的地图服务解决方案。

 

上面一段是高德网站原文复制,但绝不是为了打广告。。。。。只是提示有哪些地图是使用了高德的基础地图服务。

 

根据中国的相关法规,在国内发行的民用地图产品不允许使用真实坐标,必须加入一定偏移(出于国家安全考虑)。由于是相对偏移,并不会影响用户的使用。这种偏移是通过测绘部门的国家保密插件来实现的。

国家保密插件,也叫做加密插件或者加偏或者SM模组,其实就是对真实坐标系统进行人为地加偏处理,按照几行代码的算法,将真实的坐标加密成虚假的坐标,而这个加偏并不是线性的加偏,所以各地的偏移情况有所不同。

所有电子地图所有导航设备,都需要加入国家保密插件。第一步,地图公司测绘地图,测绘完成后,送到国家测绘局,将真实坐标的电子地图,加密成“保密坐标“,这样的地图才是可以出版和发布的,然后才可以让GPS公司处理。第二步,所有GPS公司,只要需要汽车导航的,需要用到导航电子地图的,统统需要在软件中加入国家保密算法,将Com口读出来的真实的坐标信号,加密转换成国家要求的保密的坐标,这样,GPS导航仪和导航电子地图就可以完全匹配,GPS也就可以正常工作。

目前中国的几家互联网地图公司(百度地图、搜狗地图、谷歌地图、Mapbar等)也模仿国家加密的做法,在国家加密的基础上又加入了自己的加密量,目的是防止竞争对手抓取、分析自家的数据。

地图的偏移算法通常有几种:一种是线性偏移,这种偏移算法容易被破解,使用不多;另一种非线性,在不同的区域,偏移的值和方向各有不通(如偏移字典)。因此破解地图偏移最常见的一种做法是:同名点计算。即知道不同地图上相同点的坐标,再计算这些点坐标之间的差值。这种方法就依赖于同名点数量和分布程度。

 

上面都是废话,下面给出一网上有一强人破解了地图偏移的方法:

Google 中国地图偏移接口

接口地址:http://ditu.google.cn/maps/vp?spn=0.0,0.0&z=18&vp=39.111195,117.148067(注:.cn和.com都可以,我用国内服务器就会选择.cn用美国服务器就会选择.com)

返回内容中的有效部分 (39.111195, 117.148067, 18, [9, -2, 18, -4, 37, -8, 74, -16, 149, -33, 298, -67, 596, -135, 1193, -270]),Spn参数暂时未知实际意义,但是需要上发spn参数,任意两个小数用逗号分开Vp参数纬经度值,用逗号分隔,z参数为地图缩放级别,无实际意义

取回的部分中有效数字为[9, -2, 18, -4, 37, -8, 74, -16, 149, -33, 298, -67, 596, -134, 1192, -268]这个数组总共有8组数字,每两个为一组,分为别从11级到18级的地图和卫星图的偏移像素数量,我们前一组数字精确的等于后一组数字除二,我们为了得到最精确的偏移,故选择第18级的偏移量,1193为x方向上精度的偏移像素,-270为y方向上维度偏移像素

经纬度的偏移转换,我们需要将经纬度39.111195,117.148067转化为18级像素值25620917 和 55392414,然后分别加上偏移量-270,1193,然后再转化为经纬度39.11231854918217 和117.15446412563324,即位偏移后的经纬度

(精度指的是当时偏移数据的间隔,而不是每条数据的精度,0.01版本可以达到18级5个像素以内的纠偏精度)

以上方法经过本人测试,得到的经纬度和GPS仪器的位置完全吻合。不进行纠偏操作,误差范围大概有300-500米。

低精度版本: (0.1 精度) 适合个人开发(可以免费提供)

高精度版本: (0.01 精度) 适合商业应用(5米之内,有贴子说精度在1米,有点夸张了,再说GPS技术也有误差(10米))。

还有说是有纠偏算法的,既然在每个经纬度点的偏移量都不同,而且偏移量的变化也没什么规律,对于这种偏移算法的,我只能心底感慨一下了。

 

0.01精度的有近1000W条数据。截图为证:

民用地图经纬度纠偏-高德系地图纠偏_第1张图片

 

民用地图经纬度纠偏-高德系地图纠偏_第2张图片

列abcd依次为:LNG*100 LAT* 100 OFFSET_X OFFSET_Y

 

大家可能疑问,为什么要*100,为什么不直接把偏移经纬度算出来,而是存上偏移像素。我只好告诉大家,112.00是double类型(8字节)。而11200我可以只存int型(4字节)。同理偏移像素都是.0000级别的double了。按照存储算字节数,我想这种存法应该可以节省数据库大小,没准查询速度还快一些。。。。。存储成字符的,实在不推荐。所以说,有时候做的多未必好,呵呵


转自:http://qing.weibo.com/tj/5f84cd6e33001ntr.html

你可能感兴趣的:(加密,算法,互联网,api,Google,破解)