谷歌地图坐标纠偏算法javascript版
GoogleMapAPI使用详解(十)——使用JavaScript创建地图详解(上)

GoogleMapAPI使用详解(十)——使用JavaScript创建地图详解(上)在网页MyTest1.html中我们已经使用了JavaScript来创建地图,下面总结一下使用JavaScript创建一个地图的核心步骤:1、导入地图API类库。
<script src="/maps?file=api&hl=zh-CN&v=2&key=YOUR_API_KEY"type="text/javascript"></script>注意这里的参数key,我在以前的文章里已经详细解释过了,如果你只是在本地运行,暂时可以随便使用一段字符串。
2、在页面的body元素中定义一个地图容器。
<body><div id="mapContainer" style="height:400px; width:400px;"></div></body>这个地图容器一般使用div元素来定义,如果你愿意,使用p元素或者其他你能想到的元素都可以,但是都应该是块元素,并且必须定义它的id,保证在后面的步骤里能够通过document.getElementById找到这个元素。
容器的style属性在这里是用来定义这个容器的大小,从而决定所显示地图的大小,当然,如果你在这里不定义也可以通过其他的手段来达到目的,这里暂且先认为这个style的定义和id属性一样也是必不可少的吧。
其实body元素在这里也有一些特殊的作用,就是保证下一步骤在页面的html元素全部加载结束后再执行。
3、定义你自己的script区域,在里面new一个GMap2对象,并且指定其显示所需的两个基本要素:中心、缩放层次。
<script type="text/javascript">var map = new GMap2(document.getElementById("mapContainer"));map.setCenter(new GLatLng(39.970981,116.314108), 16);</script>前面已经讲过,GMap2是谷歌地图API中最重要的核心类,对应在页面上显示的地图,所有对地图的操作都需要在已经创建(new)了GMap2对象的基础上才能够进行。
Google全国地图纠偏数据偏移数据火星坐标修正方案

Google 全国地图纠偏数据偏移数据火星坐标修正方案谷歌地图纠偏有两种精度:分别为0.01和0.001,精度为0.01:经纬度每变化0.01,取一次偏移值,共980万条,access文件约600mb,误差5~10米。
精度为0.001:经纬度每变化0.001,取一次偏移值,共9亿条,csv文件共20gb,几乎没有误差。
非常的精准,也是当前开发最牛的纠偏技术解决方案。
下面来说明如何使用国内最权威的技术方案:使用方法:1、假设原始gps数据为(73.528888,39.368888)2、查询数据库:SELECT * FROM offset where lng=73.52 and lat=39.36,得出offsetlat、offsetlng3、用原始的lat加上offsetlat,lng加上offsetlng,得出纠偏后的经纬度,可以直接在google地图上显示正确位置了。
以上方法,百度地图和谷歌地图通用,但是纠偏数据库是完全不同的,原因可以查看其他博客,有详细的说明!具体的获取方法可以QQ:2640056519,官方新浪博客/s/blog_ae91db6001014pi6.html我们平时用到的地球坐标系统,叫做WGS84坐标,国家保密插件,也叫做加密插件或者加偏或者SM模组,其实就是对真实坐标系统进行人为的加偏处理,按照几行代码的算法,将真实的坐标加密成虚假的坐标,而这个加偏并不是线性的加偏,所以各地的偏移情况都会有所不同。
而加密后的坐标也常被人称为火星坐标系统,这是我们的国家又一个伟大的发明,让国外的go-vern-ment和企业等,都看不懂我们的坐标系统。
其实很少有人知道国家保密插件问题,但作为导航电子地图产业或者汽车导航产业中的人,吧,你真实的坐标是这个,加密后就成了那个,导航电子地图上看到的就是那个,那么人家导弹要是攻击那个的时候,那么导弹就打不中我们的鸟巢啦,我们的鸟巢就安全了。
不过,个人担心这样加密后没有打中鸟巢,会不会打中水立方呢,可能是无心插柳柳成荫了。
(整理)如何对谷歌地图的火星坐标进行纠偏校正

如何对谷歌地图的火星坐标进行纠偏校正一、为什么要纠偏?针对中国用户而言,我们可以下载的谷歌卫星地图数据有两种。
一种是从国外服务器(map.google,com)下载,坐标准确无偏移,但道路和地名等信息只到第12级;另一种是从国内服务器(map.google,cn)下载,道路和地名信息非常详细,但坐标有偏移,也就是大家俗称的“火星坐标”。
如果我们只需要下载卫星地图,并不关注道路和地名信息,那么直接从国外服务器下载就可以了,但如果既想要准确的坐标,又希望有详细的道路和地名信息,那么我们就必须得对谷歌地图的火星坐标进行纠偏校正。
二、准备工作安装水经注影像转换器,如果你没有安装该软件,可以到水经注软件的官方网站去下载,只需要百度一下“水经注软件”即可找到该软件的官方网站。
三、下载谷歌卫星地图启动水经注影像转换器。
点击软件中如下图所示的按钮,会启动水经注万能地图下载器,如果没有安装该软件,会提示下载安装。
水经注万能地图下载器启动时列出了本软件所能下载的所有地图类型的列表,这里我们只需要勾选“卫星.谷歌”,并点击“确定”按钮就可以了,如下图所示。
由于我们需要有详细的道路和地名信息,因此这里我们需要在服务器菜单中选择国内服务器(国外服务器下载的数据无偏移但标签数据只到12级),如下图所示。
我们以成都为例,框选市中心一个较小的区域范围,如下图所示。
在选择范围内双击新建任务,在级别中选择第19级,如下图所示。
在新建任务对话框中,点击“确定”按钮,开始下载任务,如下图所示。
下载完成之后,会询问是否导出,点“否”不导出,因为我们将用水经注影像转换器对任务文件(*.dat)进行直接纠偏校正转换。
注意:这里下载完成后,请务必关闭下载器,否则当转换器读取任务文件时会因为被下载器占用而读取不成功。
四、打开任务文件单击“输入地图文件”所对应的“输入现有DAT影像文件”按钮,如下图所示。
点击该按钮后会显示“输入地图文件”对话框,如下图所示。
Google_Maps_JavaScript_API_V3_教程

Google Maps JavaScript API V3 教程注意:以下网页中提到的Google Maps JavaScript API 第 3 版现在是正式的JavaScript API 版本。
该API 的第 2 版已根据我们的弃用政策正式弃用。
欢迎您将代码移植到这个功能更强、最近更新的版本中!1简介Google Maps 的“世界,您好”1将您的应用程序声明为HTML51载入Google Maps API 第3 版1地图DOM 元素1地图选项1google.maps.Map - 基本对象1载入地图2纬度和经度3缩放级别简介任何Google Maps 第 3 版API 应用程序中的基本元素都是“地图”本身。
本文介绍了google.maps.Map 基础对象的用法和地图操作的基础知识。
(如果您已经学习了第 2 版的辅导手册,您会发现,这两版辅导手册中的很多内容都是相同的。
但两者之间也会有些区别,因此,请仔细阅读本文。
)Google Maps 第3 版的“Hello, World”初步了解Google Maps API 的最简单方法就是看一个简单的示例。
以下网页显示了以澳大利亚新南威尔士的悉尼为中心的一个地图:<!DOCTYPE html><html><head><meta name="viewport" content="initial-scale=1.0, user-scalable=no" /><style type="text/css">html{ height: 100% }body{ height: 100%; margin: 0px; padding: 0px }#map_canvas{ height: 100% }</style><script type="text/javascript"src="https:///maps/api/js?sensor=set_to_true_or_false"></script><script type="text/javascript">function initialize() {var latlng= new tLng(-34.397, 150.644);var myOptions= {zoom: 8,center: latlng,mapTypeId: google.maps.MapTypeId.ROADMAP};var map= new google.maps.Map(document.getElementById("map_canvas"),myOptions);}</script></head><body onload="initialize()"><div id="map_canvas" style="width:100%; height:100%"></div></body></html>查看示例(map-simple.html)即使在这个简单的示例中,也有几点需要注意:4我们使用了<!DOCTYPE html> 声明将应用程序声明为HTML5。
谷歌地球影像的纠偏和使用

式, 逐 次用新值代替旧值 , 这样辗 转递推 、 重复操作 , 一次一次逼近所希望的精度 。为避免 高清影像整体 消隐、 局部 可用的缺 陷,
可 以通过 叠加 图层 的方法 , 实现 不同层 次窗 口的读 图 目的。高清影像技术在质 量保 证体 系中愈发 显示 出其优 势, 同时对促使
H S E 体 系稳 健 运行 发挥 出显 著 的 作 用 。
检查 记 录 , 要 求质 量 控 制 的时 空动 态 分 布情 势 愈益
出获得 G . E . 影像的纠偏和使用问题 。
翔实和量化 , 不断体现“ 预 防在先” 、 “ 全部覆盖” 以 及“ 重点部位重点检查” 的理 念 n 。过 去 常用 的行 之有效的时空动态分布表 , 由于高清遥感影像的获 得使 用 , 更多地改作时空动态分布图 , 以便 更 加 清
2谷歌地球影像的输 出
测量上从球面到平面, 从全球一体 数据到局部 地方数据 , 需要进行坐标投影与转换 ] 。而 G . E . 影像
与测 量 电 子 图件 譬 如 MI 、 G . M. 等软件 , 亦 有着 不 同 的坐 标 定 义 , 不 同 的表 达 坐标 系 。 因此 G . E . 影像 的 输 出就 是 不 同坐标 系 间的转 换 。
google地图经纬度偏移修正算法完美解决方案

google地图经纬度偏移修正算法完美解决方案由于受到国家一些法律法规限制,所有的电子地图服务提供商都需要给地图数据加上偏移和加密,因此广受大家关注的google地图也不例外。
但是作为一些用惯了免费服务的网友们,始终对google MAP上的标注偏移很头疼,我收集了一些资料,今天在这里和大家一起分享。
所谓的地图数据加密偏移,其实就是用一个偏移算法对地图的经纬度做一个加减偏移量,从而达到与实际地图不一致。
这个偏移算法本身是没有什么规律可言的,每家地图服务商都有一套自己的加密偏移算法,既然算法上没有什么规律可言,但是对于算法中生成的偏移量是否有规律呢?这个是可以肯定的,但是偏移算法中生成的偏移量是有规律而言的。
偏移量的规律很难得到,要是能拿到这个偏移量,就可以说是破解了某一个地图服务商的地图加密。
那我们怎么解决这个偏差呢!我在网上找到了一个强人破解google map偏移的方法毕竟做地图开发的都存在卫星图和地图的切换,谁不想让切换以后的地图对上呢!后来我发现google的地图服务,ditu.gogle开始的都没有偏差,maps.google开头的服务就有偏差,我就开始查找google的取偏移量算法,事前我还是图破解google 手机版本的数据,没有成功,估计是使用了自己的压缩或加密算法,最后也没有找到规律,后来才尝试破解web版本的不过web版本的接口我对于js不是特别熟悉,所以本次破解放弃了分析源代码的步骤,而是直接采用排除法那就是把地图部分访问的全部地址,一个接一个封杀掉,查找那个起偏移做用的网址/maps/vp?spn=0.0,0.0&z=18& vp=39.111195,117.148067 最后找到了就是这个,记住每次测试用清理浏览器缓存哦,使用fixfox的fildder和adblock就够了然后就是分析每次返回内容的规律,皇天不负有心人啊,我总算是搞定了,下面是我整理的接口Google 中国地图偏移接口1. 接口地址:/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;}纬度到像素Ypublic 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中国地图经纬度偏移

数学之美~Google 中国地图经纬度偏移以前一直以为Google 手机地图是在客户端程序内置有矫偏算法的,看了 dongmeng11C 的blog 才知道Google 地图偏移其实是有接口可以取到的:&z=18&vp=.给定经纬度坐标,返回地图tile 的偏移像素值。
没想到居然就是直接从服务器 取,这样所有的偏移量其实都是公开的了。
接下来,我对偏移数据做了一些分析。
纵坐标是 18级地图的偏移量首先是较小尺度,在经纬度1度的范围内每度取得一个偏移值。
图二,与图一相同的数据,可以看出偏移在平面上的变化图一:纬度不变,经度1度变化范围内,偏移量的变化(横坐标数字为经度度)-------- ShrftX -------- ShiftYStiiftX1200 -----------------------1000 ----------------------------图四,与图三相同的数据,可以看出偏移在平面上的变化900920 940 9&0980 1000 1020 1040图三,经度不变,纬度1度变化范围内, 可见偏移量变化不如经度变化时大。
偏移量的变化(横坐标数字为纬度度)SO O迦 -------------------■ Shift X ------- Shift V9S0 985 990 99S 1000 Shift X图五,经度纬度均1度范围内,偏移在平面上的变化。
其实是图二与图四“相乘” 的结果555550545540535530525520595Shift X接下来从大尺度上看看。
图六,北纬40度的纬线上偏移值变化图,横坐标为经度。
看得出以经度 1度为 周期呈现出一定的规律性,在y 向偏移量上特别明显。
900 320 540 5605S0 1000 1020 1C40 10605 55 5 2 555 4图七,东经116度的经线上偏移值变化图,横坐标为纬度。
Google+Map地图校正方法

Google Map地图校正方法程宪平2009-09-09在Gooogle Map中,由于中国的相关法律的规定,地图模式是有偏差的,但是卫星模式是准确的,所以根据此可以进行地图的校正,由于Google Map的地图的偏差值是与所在的地区有关,不同的地区,其偏差值也不一样,所以必须是每个地方都需要进行校正,一般认为的校正的单位是以市为单位,但有些地方,可能到了县或区一级。
此处的校正需要用到数据库方面的知识,如果不懂,请先查阅相关的书籍,谢谢。
1、找到车辆所在的位置,最好是精确到车辆所在的县一级本文档示例的区域为中国江苏省扬州市邗(hán)江县2、先在卫星模式下找一个标志比较明显的地方,如立交桥、十字路口,同时缩放比尽可能大的值,这样卫星看得也就更清楚,得到的偏差值也会更小,如下图:此处将卫星模式放到了最大,同时选择的是一个十字的路口,这样的标志就很明显。
3、点击右上角的测量4、变成这样时,在这个十字路口的中心打上一个点5、再切换到地图模式6、找到对应的地图上的十字路口,在这个路口的中心再打上个点7、这时你可以看到,右上角测试的距离值,这个值就是偏差的距离从这里看出,这个地方相差555米,也就是说,如果不校正的话,地图上的位置与实际位置有555米左右的偏差。
8、现在缩小地图,或将图上的两个点移到可见的位置9、先点击卫星模式的点,会弹出如下的信息框10、记录下卫星模式下的经纬度信息,此处是:东经119.3842059 , 北纬32.367230311、同样的方法操作,记下地图模式的点的经纬度信息12、即此时地图模式下的经纬度信息是:东经119.3896695 , 北纬32.365352213、现在开始计算偏移值:计算公式:经度偏移值(xOffset)=卫星经度-地图经度纬度偏移值(yOffset)=卫星纬度-地图纬度xOffset=119.3842059-119.3896695yOffset=32.3672303-32.3653522此处的结果为:xOffset=-0.0054636 yOffset=0.001878114、到数据库中检查是否存在(本文档区域是中国江苏省扬州市邗江县)保存在数据库中的偏移值表为tbl_offset在数据库中运行此语句:select * from tbl_offset where priv=’江苏省’15、在此显示的列表中,如果存在邗江县的记录,则说明记录已经存在。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/**
* gps纠偏算法,适用于google,高德体系的地图
*/
var pi = 3.14159265358979324;
var aa = 6378245.0;
var ee = 0.00669342162296594323;
var GpsCorrect = {
transform:function(wgLat,wgLon){
var latlng = [];
if(GpsCorrect.outOfChina(wgLat,wgLon)){
latlng[0] = parseFloat(wgLat);
latlng[1] = parseFloat(wgLon);
}else{
var dLat = GpsCorrect.transformLat(wgLon - 105.0, wgLat - 35.0);
var dLon = GpsCorrect.transformLon(wgLon - 105.0, wgLat - 35.0);
var radLat = wgLat / 180.0 * pi;
var magic = Math.sin(radLat);
magic = 1 - ee * magic * magic;
var sqrtMagic = Math.sqrt(magic);
dLat = (dLat * 180.0) / ((aa * (1 - ee)) / (magic * sqrtMagic) * pi);
dLon = (dLon * 180.0) / (aa / sqrtMagic * Math.cos(radLat) * pi);
latlng[0] = parseFloat(wgLat) + dLat;
latlng[1] = parseFloat(wgLon) + dLon;
}
return latlng;
},
outOfChina:function(lat,lon){
if (lon < 72.004 || lon > 137.8347)
return true;
if (lat < 0.8293 || lat > 55.8271)
return true;
return false;
},
transformLat:function(x,y){
var ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x));
ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;
ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0; ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0;
return ret;
},
transformLon:function(x,y){
var ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x)); ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;
ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0; ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 * pi)) * 2.0 / 3.0;
return ret;
}
}
调用:
var pointCorrect =GpsCorrect.transform(mapY, mapX);
lo = pointCorrect[1];
la = pointCorrect[0];。