谷歌地图坐标纠偏算法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、在此显示的列表中,如果存在邗江县的记录,则说明记录已经存在。
Google maps javascript api v3 叠加层(Overlays)介绍+
Google maps javascript api v3 叠加层(Overlays )介绍叠加层是地图上与纬度/经度坐标绑定的对象,会随您拖动或缩放地图而移动。
叠加层表示的是“添加”到地图中以标明点、线、区域或对象集合的对象。
Google Maps API 包含以下几种叠加层:∙地图上的单个位置显示为标记。
标记有时可显示自定义的图标图片,此时标记通常被称为“图标”。
标记和图标是 Marker 类型的对象。
∙地图上的线显示为折线(表示一系列按顺序排列的位置)。
线是 Polyline 类型的对象。
∙地图上的不规则形状区域显示为 多边形,多边形类似于折线。
与折线相同的是,多边形也是由一系列按顺序排列的位置构成的;不同的是,多边形定义的是封闭区域。
∙地图图层可显示为叠加层地图类型。
您可以通过创建自定义地图类型以创建自己的图块集,该自定义地图类型可取代基本地图图块集,或作为叠加层显示在现有基本地图图块集之上。
∙信息窗口也是特殊类型的叠加层,用于在指定地图位置的一个弹出式气泡框内显示内容(通常是文字或图片)。
∙ 您还可以实现自己的自定义叠加层。
这些自定义叠加层会实现 OverlayView 接口。
[1].[代码] 添加叠加层 跳至 [1] [2] [3]?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15var myLatlng = new tLng(-25.363882,131.044922);var myOptions = {zoom: 4,center: myLatlng,mapTypeId: google.maps.MapTypeId.ROADMAP,}var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);var marker = new google.maps.Marker({position: myLatlng,title:"Hello World!"});// To add the marker to the map, call setMap();marker.setMap(map);[2].[代码] 删除叠加层 跳至 [1] [2] [3]?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 var map;var markersArray = [];function initialize() {var haightAshbury = new tLng(37.7699298, -122.4469157);var mapOptions = {zoom: 12,center: haightAshbury,mapTypeId: google.maps.MapTypeId.TERRAIN};map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);google.maps.event.addListener(map, 'click', function(event) {addMarker(tLng);});}function addMarker(location) {marker = new google.maps.Marker({position: location,map: map});markersArray.push(marker);}// Removes the overlays from the map, but keeps them in the arrayfunction clearOverlays() {if (markersArray) {29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 for (i in markersArray) {markersArray[i].setMap(null);}}}// Shows any overlays currently in the arrayfunction showOverlays() {if (markersArray) {for (i in markersArray) {markersArray[i].setMap(map);}}}// Deletes all markers in the array by removing references to themfunction deleteOverlays() {if (markersArray) {for (i in markersArray) {markersArray[i].setMap(null);}markersArray.length = 0;}}[3].[文件] overlay-remove.html ~ 2KB 下载(264) 跳至 [1] [2] [3]?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 <!DOCTYPE html><html><head><title>Google Maps JavaScript API v3 Example: Overlay Removal</title><link href="/apis/maps/documentation/javascript/examples/standard.css" rel="stylesheet" type="text/css" /><script type="text/javascript" src="/maps/api/js?sensor=false"></script> <script type="text/javascript">var map;var markersArray = [];function initialize() {var haightAshbury = new tLng(37.7699298, -122.4469157);var mapOptions = {zoom: 12,center: haightAshbury,mapTypeId: google.maps.MapTypeId.TERRAIN};map = new google.maps.Map(document.getElementById("map_canvas"),mapOptions);google.maps.event.addListener(map, 'click', function(event) {addMarker(tLng);});}function addMarker(location) {marker = new google.maps.Marker({position: location,map: map});markersArray.push(marker);}// Removes the overlays from the map, but keeps them in the arrayfunction clearOverlays() {if (markersArray) {for (i in markersArray) {markersArray[i].setMap(null); }414243444546474849505152535455565758596061626364656667686970 71}}// Shows any overlays currently in the arrayfunction showOverlays() {if (markersArray) {for (i in markersArray) {markersArray[i].setMap(map);}}}// Deletes all markers in the array by removing references to them function deleteOverlays() {if (markersArray) {for (i in markersArray) {markersArray[i].setMap(null);}markersArray.length = 0;}}</script></head><body onload="initialize();"><div><input onclick="clearOverlays();"type=button value="Clear Overlays"/><input onclick="showOverlays();"type=button value="Show All Overlays"/><input onclick="deleteOverlays();"type=button value="Delete Overlays"/> </div><div id="map_canvas"style="width:600px; height:500px"></div></body></html>。
Google Maps坐标偏移的修正算法
Google Maps坐标偏移的修正算法
杨骏;李中华;倪明涛
【期刊名称】《计算机工程与应用》
【年(卷),期】2011(047)006
【摘要】基if-Google Maps开发GPS监控系统时,存在Google Maps的地图经纬度坐标与实际的经纬度坐标有较大的偏移的现象.研究发现,通过修正数据库可以进行不同精度的偏移修正.针对修正大量的位置数据时的低效率问题,提出了固定精度下不断改进的四种修正算法,并通过实验得出了不同算法适用于不同情形的结论.【总页数】3页(P62-64)
【作者】杨骏;李中华;倪明涛
【作者单位】乐山师范学院,智能信息处理及应用实验室,四川,乐山,614000;乐山师范学院,智能信息处理及应用实验室,四川,乐山,614000;乐山师范学院,智能信息处理及应用实验室,四川,乐山,614000
【正文语种】中文
【中图分类】TP301.6
【相关文献】
1.Google Earth中UTM坐标与大地坐标精密互转算法的实现 [J], 郭玉珍;陈慧;张向伟
2.Google Map数字栅格地图算法及应用 [J], 寇曼曼;王勤忠;谭同德
3.结合Google Map影像的坐标转换实现 [J], 蔡耀君;华璀;卢远;高峰
4.Google Earth、Geomap间坐标转换与标注方法在姬塬油田的应用 [J], 王勇;
杨萍
5.一种傅氏算法在频率偏移时根据相角修正幅值的方法 [J], 李培宜; 孙攀; 陈贻骜因版权原因,仅展示原文概要,查看原文内容请购买。
【IT专家】谷歌地图Javascript Api v3放置自动完成未在iPhone应用程序中显示正确的结果
谷歌地图Javascript Api v3放置自动完成未在iPhone应用程序中显示正确的结果谷歌地图Javascript Api v3放置自动完成未在iPhone应用程序中显示正确的结果[英]Google Map Javascript Api v3 places autocomplete Not Showing Proper Results In iPhone App I am making one Map Kit app in iPhone and used “Google Map Javascript Api v3 places autocomplete”. I followed the document given by Google code.google/apis/maps/documentation/places/autocomplete.html and created API key also as instructions by Google. 我正在iPhone中制作一个Map Kit应用程序并使用“Google Map Javascript Api v3 place autocomplete”。
我按照Google提供的文档code.google/apis/maps/documentation/places/autocomplete.html创建了API密钥,并作为Google的说明。
But the problem is that when i got the results then every time it returned “Request Denied” and shows no values to me. 但问题是,当我得到结果时,每次它返回“请求被拒绝”并且没有向我显示任何值。
1 Just check whether u are using v=3.exp in the URL. I figured it out after several attempts: 只需检查您是否在URL中使用v = 3.exp。
谷歌地图坐标纠偏算法javascript版
/*** 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];。
高斯克吕格与地理坐标相互转换算法(JS版本)
⾼斯克吕格与地理坐标相互转换算法(JS版本)最近⼀段时间在研究⾼斯克吕格与地理坐标的互换算法,刚才的时候写了⼀个只能⽤于标准分带的算法,发现并不符合实际的⼀些地⽅坐标系的互换操作。
经过研究最终写出了即可以应⽤于标准分带的和地⽅性的⾼斯克吕格与地理坐标系的算法,现在贴出来供⼤家参考,也希望⼤家批评指正。
代码如下:/** 投影变换算法。
⽤于地⽅坐标系*MZ(f, 2)的MZ()⽅法为平⽅函数*/SuperMap.Web.Tool.ProjectionTransfor=function(TuoqiuCanshu, CentralMeridian,OriginLatitude,EastOffset,NorthOffset){/* '说明: ⽤于初始化转换参数'TuoqiuCanshu 枚举类型,提供北京54、西安80和WGS84三个椭球参数'CentralMeridian 中央经线OriginLatitude 原点纬度,如果是标准的分幅,则该参数是0'EastOffset东偏移NorthOffset 北偏移*////'基本变量定义var a ;//'椭球体长半轴var b;// '椭球体短半轴var f; //'扁率var e;// '第⼀偏⼼率var e1; //'第⼆偏⼼率var FE ;//'东偏移var FN ;//'北偏移var L0 ;//'中央经度var W0;//'原点纬线var k0 ;//'⽐例因⼦var PI = 3.14159265358979;/** Canshu* Beijing54 = 0Xian80 = 1WGS84 = 2**//*'Krassovsky (北京54采⽤) 6378245 6356863.0188'IAG 75(西安80采⽤) 6378140 6356755.2882'WGS 84 6378137 6356752.3142*/if(TuoqiuCanshu==0)//北京五四{a = 6378245;b = 6356863.0188;}else if(TuoqiuCanshu==1)// '西安⼋零{a = 6378140;b = 6356755.2882;}if(TuoqiuCanshu==2)//'WGS84{a = 6378137;b = 6356752.3142;}f = (a - b) / a;//扁率//e = Math.sqrt(1 - MZ((b / a) ,2));//'第⼀偏⼼率e = Math.sqrt(2*f - MZ(f ,2));//'第⼀偏⼼率//eq = Math.sqrt(MZ((a / b) , 2) - 1);//'第⼆偏⼼率e1 = e / Math.sqrt(1 - MZ(e , 2));//'第⼆偏⼼率L0 = CentralMeridian;//中央经W0= OriginLatitude;//原点纬线k0 = 1;//'⽐例因⼦FE = EastOffset;//东偏移FN = NorthOffset;//北偏移/** 输⼊参数分别是:经度、纬度*/this.JWgetGK=function( J, W){//'给出经纬度坐标,转换为⾼克投影坐标var resultP=new SuperMap.Web.Core.Point2D() ;var BR = (W - W0) * PI / 180;//纬度弧长var lo = (J - L0)*PI/180; //经差弧度var N = a / Math.sqrt(1 - MZ((e * Math.sin(BR)) , 2)) //卯⾣圈曲率半径//求解参数svar B0;var B2;var B4;var B6;var B8;var C = MZ(a , 2)/ b;B0 = 1 - 3 * MZ(e1 , 2) / 4 + 45 *MZ( e1 ,4) / 64 - 175 * MZ(e1 , 6) / 256 + 11025 * MZ(e1 , 8 )/ 16384;B2 = B0 - 1B4 = 15 / 32 * MZ(e1 , 4) - 175 / 384 * MZ(e1 , 6 )+ 3675 / 8192 *MZ( e1 , 8);B6 = 0 - 35 / 96 *MZ( e1 , 6) + 735 / 2048 * MZ(e1 , 8);B8 = 315 / 1024 * MZ(e1 , 8);s = C * (B0 * BR + Math.sin(BR) * (B2 * Math.cos(BR) + B4 * MZ((Math.cos(BR)) , 3) + B6 * MZ((Math.cos(BR)) , 5 )+ B8 *MZ((Math.cos(BR)) , 7)))var t = Math.tan(BR);var g = e1 * Math.cos(BR);var XR= s + MZ(lo , 2) / 2 * N * Math.sin(BR) * Math.cos(BR) + MZ(lo , 4 )* N * Math.sin(BR) * MZ((Math.cos(BR)) , 3) / 24 * (5 -MZ( t , 2 )+ 9 * MZ(g , 2) + 4 *MZ( g , 4)) + MZ(lo , 6) * N * Math.sin(BR) * MZ((Math.cos(BR)) , 5) * (61 - 58 *MZ( t , 2) + MZ(t , 4)) / 720;var YR= lo * N * Math.cos(BR) + MZ(lo , 3 )* N / 6 *MZ( (Math.cos(BR)) , 3) * (1 - MZ(t , 2) + MZ(g , 2)) + MZ(lo , 5) * N / 120 *MZ((Math.cos(BR)) , 5) * (5 - 18 * MZ(t , 2) + MZ(t , 4) + 14 * MZ(g , 2) - 58 * MZ(g , 2) * MZ(t , 2));resultP.x=YR+FE;resultP.y=XR+FN;return resultP;}/** 输⼊参数分别为:X、Y*/this.GKgetJW=function( X, Y){//'给出⾼克投影坐标,转换为经纬度坐标var resultP=new SuperMap.Web.Core.Point2D();var El1 = (1 - Math.sqrt(1 - MZ(e , 2))) / (1 + Math.sqrt(1 -MZ( e , 2)));var Mf = (Y- FN)/ k0 ;//真实坐标值var Q = Mf / (a * (1 - MZ(e , 2) / 4 - 3 * MZ(e , 4) / 64 - 5 *MZ( e , 6) / 256));//⾓度Bf = Q + (3 * El1 / 2 - 27 *MZ( El1 , 3) / 32) * Math.sin(2 * Q) + (21 *MZ( El1 , 2) / 16 - 55 *MZ( El1 , 4 )/ 32) * Math.sin(4 * Q) + (151 *MZ( El1 ,3 )/ 96) * Math.sin(6 * Q) + 1097 / 512 * MZ(El1 , 4) * Math.sin(8 * Q);Rf = a * (1 -MZ( e , 2)) / Math.sqrt(MZ((1 - MZ((e * Math.sin(Bf)) ,2)) , 3));Nf = a / Math.sqrt(1 - MZ((e * Math.sin(Bf)) , 2));//卯⾣圈曲率半径Tf = MZ((Math.tan(Bf)) , 2);D =(X - FE) / (k0 * Nf);Cf =MZ( e1 , 2) * MZ((Math.cos(Bf)) , 2);var B = Bf - Nf * Math.tan(Bf) / Rf * (MZ(D , 2) / 2 - (5 + 3 * Tf + 10 * Cf - 9 * Tf * Cf - 4 *MZ( Cf , 2) - 9 * MZ(e1 , 2)) *MZ( D , 4) / 24 + (61 + 90 * Tf + 45 * MZ(Tf , 2) - 256 * MZ(e1 , 2) - 3 * MZ(Cf , 2)) *MZ( D , 6) / 720);var L = CentralMeridian*PI/180 + 1 / Math.cos(Bf) * (D - (1 + 2 * Tf + Cf) *MZ( D , 3) / 6 + (5 - 2 * Cf + 28 * Tf - 3 *MZ( Cf , 2) + 8 * MZ(e1 , 2) + 24 * MZ(Tf , 2)) * MZ(D , 5 )/ 120);var Bangle = B * 180 / PI;var Langle = L * 180 / PI;resultP.x = Langle;//RW * 180 / PI;resultP.y = Bangle + W0;//RJ * 180 / PI;return resultP;}};SuperMap.Web.Tool.ProjectionTransfor.registerClass('SuperMap.Web.Tool.ProjectionTransfor');。
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度的经线上偏移值变化图,横坐标为纬度。
js轨迹纠偏算法
js轨迹纠偏算法JavaScript轨迹纠偏算法在地理信息系统(GIS)领域中起着重要的作用。
它可以用于处理由于GPS信号误差和不完全性而导致的轨迹偏移问题。
本文将介绍JS轨迹纠偏算法的原理和应用,并探讨其在实际场景中的优势和限制。
在定位应用中,GPS设备能够提供准确的经纬度信息,但由于多种原因,如建筑物、山脉、天气等,GPS信号可能出现一定程度的误差。
这导致了轨迹数据的偏移,使得在地图上显示的轨迹与实际路径不一致。
为了解决这个问题,需要对轨迹数据进行纠偏处理。
JS轨迹纠偏算法的核心思想是通过将原始的轨迹数据点映射到道路网络上,从而得到更加准确的轨迹。
该算法基于道路网络的拓扑结构和路段信息,通过最短路径算法和插值算法来纠正轨迹偏移。
算法会将原始的轨迹数据点投影到道路网络上的最近路段。
这一步骤可以通过计算每个轨迹点到道路网络上每条路段的距离来实现。
然后,算法会利用最短路径算法找到连接这些投影点的最短路径。
最短路径算法可以基于Dijkstra算法或A*算法来实现。
通过这一步骤,算法可以得到更加接近实际路径的轨迹。
然而,由于GPS信号的不完全性和误差,轨迹数据点可能会在道路网络上出现断裂的情况。
为了解决这个问题,JS轨迹纠偏算法还使用了插值算法。
插值算法可以根据已有的轨迹点和道路网络的拓扑结构,推断出可能的轨迹路径。
这样,在纠偏处理后,轨迹数据点之间就不会出现断裂的情况。
JS轨迹纠偏算法在实际应用中具有广泛的应用场景。
例如,在出行导航应用中,用户的轨迹数据可以通过该算法进行纠偏处理,从而得到准确的导航路径。
在物流配送应用中,该算法可以用于规划最优的配送路线,提高配送效率。
此外,该算法还可以应用于运动轨迹记录、地理信息分析等领域。
然而,JS轨迹纠偏算法也存在一些限制。
首先,该算法的纠偏效果受到道路网络数据的精度和完整性的限制。
如果道路网络数据不准确或不完整,那么纠偏效果可能会受到影响。
其次,该算法在处理大规模数据时可能会面临效率问题。
使用js对WGS-84,GCJ-02与BD-09的坐标进行转换
使⽤js对WGS-84,GCJ-02与BD-09的坐标进⾏转换获取到经纬度在⽤百度地图进⾏定位时,却发现⾏驶轨迹的路线定到海⾥⾯去了。
从⽹上查阅,知道此⽅法。
⼀。
在进⾏地图开发过程中,我们⼀般能接触到以下三种类型的地图坐标系: 1.WGS-84原始坐标系,⼀般⽤国际GPS纪录仪记录下来的经纬度,通过GPS定位拿到的原始经纬度,Google和⾼德地图定位的的经纬度(国外)都是基于WGS-84坐标系的;但是在国内是不允许直接⽤WGS84坐标系标注的,必须经过加密后才能使⽤; 2.GCJ-02坐标系,⼜名“⽕星坐标系”,是我国国测局独创的坐标体系,由WGS-84加密⽽成,在国内,必须⾄少使⽤GCJ-02坐标系,或者使⽤在GCJ-02加密后再进⾏加密的坐标系,如百度坐标系。
⾼德和Google在国内都是使⽤GCJ-02坐标系,可以说,GCJ-02是国内最⼴泛使⽤的坐标系; 3.百度坐标系:bd-09,百度坐标系是在GCJ-02坐标系的基础上再次加密偏移后形成的坐标系,只适⽤于百度地图。
(⽬前百度API提供了从其它坐标系转换为百度坐标系的API,但却没有从百度坐标系转为其他坐标系的API) ⼆。
为什么会发⽣偏移? 1.由于坐标系之间不兼容,如在百度地图上定位的经纬度拿到⾼德地图上直接描点就肯定会发⽣偏移;只考虑国内的情况,⾼德地图和Google地图是可以不经过转换也能够准确显⽰的(在国内⽤的都是GCJ-02坐标系);下⾯是收录了⽹上的WGS-84,GCJ-02,百度坐标系(bd-09)之间的相互转换的⽅法,经测试,是转换后相对准确可⽤的:var GPS = {PI : 3.14159265358979324,x_pi : 3.14159265358979324 * 3000.0 / 180.0,delta : function (lat, lon) {// Krasovsky 1940//// a = 6378245.0, 1/f = 298.3// b = a * (1 - f)// ee = (a^2 - b^2) / a^2;var a = 6378245.0; // a: 卫星椭球坐标投影到平⾯地图坐标系的投影因⼦。
- 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];。