Archive for the ‘GPS’ Category

通过谷歌ditu查找中国地标经纬度信息

Sunday, July 22nd, 2007

看到jeruliu在他的blog继续 Google Map中谈到了如何通过ditu来获得经纬度信息的方法:

近期一个重要任务是要实现地址查询的定位,也就是经纬度和地址的翻译,很明显,中国地图版本没有提供接口,不像英文版用 GClientGeocoder 可以简单实现,在官方网站找了一段让人失望的话:”但是,到目前为止,中文 Google 地图 API 的地理译码器尚不支持地理译码。不过,您可以根据我们提供的规范开发自己的地理译码器,或者使用第三方提供的地理译码器”。只有自己用比较复杂的方法来 hack 一下了。

打开中国版 google 地图,查看源码,找到这一行:
<input type=”submit”id=”q_sub”name=”btnG”tabindex=”2″class=”btn”value=”搜索地图”/>

得知其调用了一个onSearch(this)的函数,可惜里面的代码真不是给人看的,*&(**&^

然后开始查看查询后的页面属性,简化后可以得到查询的url, 比如深圳,q就是地名参数变量

http://ditu.google.com/maps?f=q&hl=zh-CN&geocode=&q=%C9%EE%DB%DA

寻找程序入口为loadApplication,gApplication大概就是地图变量,同时搜索深圳,发现以下关键内容:url: “/maps?f=q\u0026hl=zh-CN\u0026geocode=\u0026q=%E6%B7%B1%E5%9C%B3\u0026ie= UTF8″,urlViewport:false,ei:”hnOXRu-aBomIjQOsspnZCQ”,form:{selected:”q”,q: {q:”深圳”},l:{q:”",near:”深圳”},d:{saddr:”",daddr:”深圳”},geocode:”"},query: {type:”g”},stickyFlags:{hl:”zh-CN”},viewport:{center:{lat:0,lng:0},span:{lat: 0,lng:0},mapType:”"},resolvedPOIID:false,mabcCenter:{id:”BE00000593″,title: “广东省深圳市”,gridcode:”3314605401″,bottomLeftId:”BF00000B26″,topRightId: “BF00000B27″,zoom:”9″},modules:[""],overlays:{sxcar:false,markers:[{id:”addr”,mapabcPoiid:”BE00000593″,

这个id:”BE00000593″估计就是系统内部的地理编码id, 因为mabcCenter一定是根据坐标来定位中心的。

再次查找资料,知道mapabc的接口是http://mapgoogle.mapabc.com/mapabcpoi

那么拿刚才的mapabcPoiid来作为参数:?pco=a;BE00000593

查询后果然得到了一个页面,上面有一串base64加密后的文字: notpcoStrbase64 = MTE0LjA1NTU3MjksMjIuNTQyMTQ4OTg=

那么对这串文字进行解码, 还原后得到了加密前的文字: 114.0555729,22.54214898

那么这个就应该是深圳的坐标位置了,进行了一下验证,完全正确!!!

但是经纬度和英文版是相反的,还有zoom level也是相反的,需要用17去减!

我想他可能是用server side的逻辑去处理来获得地标的经纬度, 如果只是在浏览器中试图去寻找位置并切换,直接用我的那个ditu/map切换脚本可以做到, 看来ditu中已经把那些转换给做了。

Google Map和谷歌地图目前在API等方面已经完全一致了,月光有篇文章介绍。

这样两个站点对照很好玩,但手工改来改去太累了,所以实现了个小书签栏的工具,可以帮助你在Google Maps和谷歌地图之间随意切换,比修改地址栏要方便许多。

地图/Maps切换

用法:把上面的链接用鼠标拖拽到firefox的书签工具条上,浏览到google maps或者地图的时候,点击书签工具条上的“地图/Maps切换”,就自动切换到另外一个站点,保持当时的地点。 

只是编来玩和自用的,没有测试在Firefox以外的浏览器上是否正确。需要了解更多的在这里(英文的)。

Close
E-mail It