2009年08月04日

Google 的算法分析见:http://www.codeproject.com/KB/scrapbook/googlemap.aspx

Google 使用http://mt[0-3].google.cn/mt/v=cn1.11&hl=zh-CN&x=%d&y=%d&z=%d&s=Galile这样的URL来表示一个放大等级中最小的地图分块。
mt0—-mt3是四个Google 的服务器
v=cn1.11 是当前地图的版本 一直在变化中
x,y,z分别代表当前分块所在位置和放大等级,Z=19为最大的放大等级,目前很多城市都可以查看到该等级下的地图
在某个放大等级z下,整个地球被分成2^z分块
x,y可以根据经纬度来计算;x的计算比较好理解(longitude->经度):
longitude=180+longitude #修正经度值到0-360 因为经度的表示是从-180—>180
longTileSize=360.0/(pow(2,zoom)) #计算每个分块所占的角度数
tilex = longitude/longTileSize #计算当前经度所在的分块位置

y的计算要牵扯到墨卡托投影这个地图算法,比较麻烦没看懂。不过并不影响使用,相应的代码上面已经给出来了,然后就可以用下载地图分块,使用PIL库把分块合并。

代码见Google Code

(这个是西安地图):
#GMap2Png(108.80824,34.37075,109.10316,34.15366,16)
参数为你需要确定的图片左上角的经纬度和右下角的经纬度 最后一个是放大的等级
使用的时候需要注意如果你选择的经纬度范围较大,那么放大等级就不能太大,不然要生成一个巨大图片,PIL会报MemoryError的错误。

还有些问题我在CPyUG记录了下来,不过没使用好的解决方案。

标签 :

随机日志

5 楼了已经

  • 草儿写于09年08月04日

    墨卡托投影。。。。
    我发现你现在就是一全才。。。

  • 可可熊写于09年08月04日

    晕 没看到我说看不懂了
    要站在巨人的肩膀上。

  • da壮熊写于09年08月24日

    恩,要不断学习。要不断向cocobear学习!

  • da壮熊写于09年08月24日

    呃。。。为什么IE发不了评论。而firefox却可以。。。

  • haoziyanwo写于09年11月14日

    向cocobear学习,hoho

发表评论

在下面加入你的评论,或者 trackback 从你的博客站点。 订阅本文的评论。

:

:

:

«
»