原帖:http://blog.sina.com.cn/s/blog_65bd7eef0100hu5o.html
由于受到国家一些法律法规限制,所有的电子地图服务提供商都需要给地图数据加上偏移和加密,因此广受大家关注的google地图也不例外。但是作为一些用惯了免费服务的网友们,始终对google MAP上的标注偏移很头疼,我收集了一些资料,今天在这里和大家一起分享。
所谓的地图数据加密偏移,其实就是用一个偏移算法对地图的经纬度做一个加减偏移量,从而达到与实际地图不一致。这个偏移算法本身是没有什么规律可言的,每家地图服务商都有一套自己的加密偏移算法,既然算法上没有什么规律可言,但是对于算法中生成的偏移量是否有规律呢?这个是可以肯定的,但是偏移算法中生成的偏移量是有规律而言的。偏移量的规律很难得到,要是能拿到这个偏移量,就可以说是破解了某一个地图服务商的地图加密。
那我们怎么解决这个偏差呢!我在网上找到了一个强人破解google map偏移的方法
毕竟做地图开发的都存在卫星图和地图的切换,谁不想让切换以后的地图对上呢!后来我发现google的地图服务,ditu.gogle开始的都没有偏差,maps.google开头的服务就有偏差,我就开始查找google的取偏移量算法,事前我还是图破解google手机版本的数据,没有成功,估计是使用了自己的压缩或加密算法,最后也没有找到规律,后来才尝试破解web版本的不过web版本的接口我对于js不是特别熟悉,所以本次破解放弃了分析源代码的步骤,而是直接采用排除法那就是把地图部分访问的全部地址,一个接一个封杀掉,查找那个起偏移做用的网址 http://ditu.google.cn/maps/vp?spn=0.0,0.0&z=18& vp=39.111195,117.148067 最后找到了就是这个,记住每次测试用清理浏览器缓存哦,使用fixfox的fildder和adblock就够了 然后就是分析每次返回内容的规律,皇天不负有心人啊,我总算是搞定了,下面是我整理的接口
Google 中国地图偏移接口
1. 接口地址:http://ditu.google.cn/maps/vp?spn=0.0,0.0&z=18&vp=39.111195,117.148067
(注:.cn和.com都可以,我用国内服务器就会选择.cn用美国服务器就会选择.com)
2. 返回内容中的有效部分:
3. (39.111195, 117.148067, 18, [9, -2, 18, -4, 37, -8, 74, -16, 149, -33, 298, -67, 596, -135, 1193, -270])
4. Spn参数暂时未知实际意义,但是需要上发spn参数,任意两个小数用逗号分开Vp参数纬经度值,用逗号分隔,z参数为地图缩放级别,无实际意义
5. 取回的部分中有效数字为[9, -2, 18, -4, 37, -8, 74, -16, 149, -33, 298, -67, 596, -134, 1192, -268]这个数组总共有8组数字,每两个为一组,分为别从11级到18级的地图和卫星图的偏移像素数量,我们前一组数字精确的等于后一组数字除二,我们为了得到最精确的偏移,故选择第18级的偏移量1193,-270,1193为x方向上精度的偏移像素,-270为y方向上维度偏移像素
6. 经纬度的偏移转换我们需要江经纬度39.111195,117.148067转化为18级像素值25620917 和 55392414,然后分别加上偏移量-270,1193,然后再转化为经纬度39.11231854918217 和117.15446412563324,即位偏移后的经纬度
google的地图采用将地球圆表面投影成平面的方式进行贴图
假设zoom=15;
横坐标从左至右像素为0-256*2的15次幂,也就是每增加一级,地图大小横纵坐标加倍,256为一个标准图片的大小
显示-180度到+180的范围,经度越大x越大
纵坐标从上到下像素为0-256*2的15次幂,显示+85到-85度的范围,纬度越小y越大
我们先看一下经度的转换
经度的转换,我就不多说了,均匀分布,大家简单的看一下下面的公式就明白了
经度到像素X值
public static double lngToPixel(double lng, int zoom) {
return (lng + 180) * (256L << zoom) / 360;
}
像素X到经度
public static double pixelToLng(double pixelX, int zoom) {
return pixelX * 360 / (256L << zoom) - 180;
}
纬度到像素Y
public static double latToPixel(double lat, int zoom) {
double siny = Math.sin(lat * Math.PI / 180);
double y = Math.log((1 + siny) / (1 - siny));
return (128 << zoom) * (1 - y / (2 * Math.PI));
}
像素Y到纬度
public static double pixelToLat(double pixelY, int zoom) {
double y = 2 * Math.PI * (1 - pixelY / (128 << zoom));
double z = Math.pow(Math.E, y);
double siny = (z - 1) / (z + 1);
return Math.asin(siny) * 180 / Math.PI;
}
维度的这个转换,单纯去理解不是很好理解,我也没有太深入的了解,从公式来看,采用了一种非线性变化,也就是靠近赤道的地方单位像素表现的纬度间距大,越靠近两极越小,可能是因为 经度在靠近两极的方向均匀变化,导致纬度也要进行拉伸,否则 靠近两极的地方,地理形状就该发生变化了,总之上面的转换公式大家还是可以研究一下的,google维度的表示范围是-85到+85,这个可以求出来!
上面得到的像素XY是像素的坐标,并非是google地图取地图的那个XY那个XY是把像素所标除以256得到的商,也就是每张图片的大小
分享到:
相关推荐
google地图经纬度偏移修正算法完美解决方案.doc
本篇将详细解析一种C++实现的Google地图经纬度偏移修正算法。 首先,我们需要了解GPS坐标系统。GPS使用的是世界大地坐标系(WGS84),这是一种基于地球椭球模型的三维坐标系统,用于精确地表示地球上任何位置。...
在百度、谷歌、soso、等地图上,对经纬度偏移进行正确的纠偏的最佳技术解决方案,内容包含技术解决与相关获取资料方式!
这里,我们将深入探讨“Google地图经纬度偏差纠正”这一主题。 首先,GPS接收器获取的原始坐标是基于WGS84(World Geodetic System 1984)坐标系统,这是一个国际通用的大地坐标系,用于全球定位。然而,Google地球...
偏移经纬度需要通过特定的算法才能转换回真实经纬度,以便进行准确的定位和导航。 该压缩包中的"offset.dat"可能是一个数据文件,存储了偏移量或者转换规则,而"LLConvert2.exe"则可能是一个可执行程序,用于实现...
民间开发者已经根据偏移算法开发了一些修正偏移的地图,这些地图在水货GPS设备上可以实现精确的导航和定位,因为它们的坐标是真实的,与设备输出的坐标匹配。然而,对于中国本土的行货GPS设备,即使其软件进行了偏移...
本主题聚焦于“最新全国百度、高德、谷歌等各类地图经纬度偏移,经纬度纠偏,GPS偏移,GPS纠偏数据库”,这些概念涉及到地图数据处理的核心技术,对确保精确地理位置信息至关重要。 首先,我们要理解经纬度偏移的...
GPS偏移权威技术解决方案是中国GPS开发和互联网项目开发中不可或缺的一部分,解决了经纬度偏移问题,提高了GPS导航和地图应用的可靠性和准确性。 在国家保密插件和纠偏数据库的基础上,我们还可以提供更多的解决...
Google baidu 地图 gps偏移(经纬度偏移)的技术纠偏解决方案 讲解如何通过官方API实现0偏移 不要相信网上的数据库或者算法之类的,感觉都有些扯淡,并且超级影响系统性能,通过官方的解决方案更完美,更稳定
标题“地图选择及地图偏移解决方案(一)”暗示了我们即将探讨的是关于地图应用开发中的一个重要主题,即如何在不同的地图平台之间进行选择,并处理地图显示时可能出现的偏移问题。这通常涉及到地理信息系统(GIS)...
高德地图和百度地图作为两大主要的地图服务提供商,对于地图偏移的问题也有着不同的解决方法。 什么是地图偏移? 地图偏移是指由于坐标系的不同和数据采集方法的差异,导致地图上显示的坐标点与实际坐标点之间存在...
这是我的文章【Google地图经纬度与平面坐标的相互转换、简单地图Demo】的附件,内含无水印世界地图、简单地图demo源码 接到公司派下来的一个任务,让我做一个简单的地图Demo,要求是输入城市名,然后在地图上标记出...
通过以上步骤,C++源代码可以实现从GPS设备获取的原始坐标到Google地图上可匹配坐标的转换,从而解决"Google map 与 Google Earth 经纬度不匹配问题"。理解和掌握这些知识点对于进行GIS应用开发或进行GPS数据分析的...
"GOOGLE地图经纬度批量查询V1.0"是一款专为处理此类需求设计的工具,它允许用户快速、有效地获取大量地址的经纬度信息。在本文中,我们将深入探讨谷歌地图API的使用,经纬度的概念,以及批量查询的实现方法。 首先...
它提供了一个便捷的方法,将百度地图的经纬度坐标(BD-09)转换成腾讯地图/Google地图所使用的WGS84坐标。这个类通常包含以下几个核心方法: 1. **构造函数**:初始化类,可能包含一些配置参数,如API密钥等,虽然...
### Google Maps坐标偏移的修正算法 #### 背景介绍 在使用Google Maps进行位置服务时,可能会遇到坐标偏移的问题。这种偏移可能是由于地理位置编码错误、地图数据更新不及时或地理位置服务提供商的数据差异等原因...
一个google map小应用 应用google map api可以获得点的经纬度并且可以根据地理位置名称定位。
总之,"GOOGLE地图经纬度批量查询"工具提供了一个便捷的解决方案,帮助用户快速准确地获取大量地点的经纬度信息,对于需要处理地理数据的场景具有很高的实用价值。通过熟练掌握这类工具,IT从业者能够更高效地进行与...
本示例主要关注如何在C# WinForm应用中实现百度地图经纬度到腾讯地图经纬度的转换,这对于那些需要在不同地图服务之间进行路径规划或者位置信息处理的开发者来说尤其重要。 首先,我们需要理解经纬度系统。经纬度是...