看到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以外的浏览器上是否正确。需要了解更多的在这里(英文的)。



4 Comments to “通过谷歌ditu查找中国地标经纬度信息”

  1. cosy | September 2nd, 2007 at 10:04 pm

    关于你说的地理译码器的问题,以前我在网上找了一段时间,但是没有发现有相关方面的东西。后来发现国内的51ditu(http://api.51ditu.com/docs/mapsapi/reference.html)这里有他的api文档,提供地理译码器功能,然后再转码一下就可以通过ip地址找到实际地址了。呵呵。。。。。。。

    你说的这个方法也挺好~

  2. Jeru | September 25th, 2007 at 5:58 pm

    谢谢转载我的笔记,不过我觉得ditu/map切换脚本这个方法并不是最完美的解决方案,我现在的做法是把ditu,map作为map type control button直接在地图层上显示,看起来会mashup的更加自然一些,

    另外上面我目前搜索地址的方法并不满意
    1. 不能同时查询中文和英文地址。
    2. 当查不到地址的时候没有报错信息,解析ditu源码暂时是做不到这一点的。

  3. 博主能不能把我弄个google的经纬度? | November 21st, 2007 at 2:51 am

    我在goolge上弄了个地图,但是没办法应用,找不到,本地详细地址的,经纬度.

    现在想请高手帮忙弄一个/

    我的地址是:上海大田路129号

    我的msn:kevinchang@9.cn

  4. fuelone | November 28th, 2007 at 10:47 pm

    楼上要的是121.4640619,31.23321201。

    本公司专业提供地标服务(即由地址转换成经纬度)和相应的kml/kmz文件(可以用谷歌地球直接打开)。联系:fuelone@gmail.com

Leave a Comment

Close
E-mail It