http://www.gissky.net- GIS空间站

我要投稿 投稿指南 RSS订阅 网站资讯通告:
搜索: 您现在的位置: GIS空间站 >> 技术专栏 >> 技术前沿 >> 正文

研究Google maps及51ditu的图片切割及存储方法

作者:王继锋    文章来源:http://www.cnblogs.com/wangjifeng/articles/455700.html    点击数:    更新时间:2006-10-23
摘要:

<!--[if !supportLists]-->1.         <!--[endif]-->

缩放等级与图幅数      

Google maps的缩放等级是0-1718个等级,比例尺与缩放等级是成反比的(比例尺越大地图越详细),其第17等级只有一幅世界地图,某一等级下所含地图数的计算公式为 2<!--[endif]-->^(17-n)^2n为缩放等级)。

<!--[if !supportLists]-->2.         <!--[endif]-->

图幅生成与编号

可以假设Google maps在每一缩放等级下的地图上都建立了一个坐标系,坐标原点为(西经180度,北纬90度),正方向分别为向东向南,经度跨度为360度,纬度跨度为180度。一般情况下,为便于理解可以这么认为,若在缩放等级n的情况下,共需生成(2<!--[endif]-->^(17-n)^2副图片,其编号形如(x,y)0<=x<= <!--[if !vml]-->2<!--[endif]-->^(17-n)<!--[endif]-->-1,0<=y<= <!--[if !vml]-->2<!--[endif]-->^(17-n)<!--[endif]-->-1)。

但由于制图区域的范围、形状和地理位置等的不同需要选择不同的投影方式,以减少投影成平面地图后的误差值。在世界地图中常用墨卡托投影绘制世界航线图、世界交通图与世界时区图;我国出版的世界地图多采用等差分纬线多圆锥投影,选用这个投影,对于表现中国形状以及与四邻的对比关系较好,但投影的边缘地区变形较大。根据不同的需要还有许多其它的投影方式,在此不再赘述,当然国家基本比例尺地形图的投影、分幅等,是由国家测绘主管部门研究制订,不容许任意改变的,另外编制小区域大比例尺地图,无论采用什么投影,变形都是很小的。

由于Google是面向全世界的,故其不同比例尺下并且相同比例尺下不同地区不同国家其投影方式都是不同的,我猜测为使整个世界范围内的地图达到相对的精确是以牺牲海洋两极等人烟稀少地图的变形为代价的,当然这也只是针对小比例尺下的地图,随着比例尺的不断放大这种投影上的差距会越来越小。

<!--[if !supportLists]-->3.         <!--[endif]-->

结论

每个切割的小图片是256*256(像素),常识来判断每个小图片代表的实际区域长宽之比应为21,但由于投影不同的存在,其实它是11的,至于中间过程怎么处理的我也没搞明白。

关于51ditu

<!--[if !supportLists]-->1.         <!--[endif]-->缩放等级

使用的比例级别总共有0-12级共13个级别,他们和实际的比例尺的对应关系分别是:

0 -------------------- 1:2,500

1 -------------------- 1:5,000

2 -------------------- 1:10,000

3 -------------------- 1:25,000

4 -------------------- 1:50,000

5 -------------------- 1:100,000

6 -------------------- 1:250,000

7 -------------------- 1:500,000

8 -------------------- 1:1,000,000

9 -------------------- 1:2,500,000

10 ------------------- 1:5,000,000

11 ------------------- 1:10,000,000

12 ------------------- 1:50,000,000

简单的说,0级地图最详细,12级地图最简单。

以上是其官方发布的数据。

                        

<!--[if !supportLists]-->2.         <!--[endif]-->

Google的比较

51地图和Google maps都开放了API,有人结合两者的API把它们集成到一块,发现两者的经纬度吻合的非常好,我想这也主要是在大比例尺地图下只要两者的切割方法相同就可以做到的,故为了以后能更好的兼容并向领先者学习我们也争取达到这种比较好的吻合效果。

但分析两者的切割图片发现Google的是256*256(像素),而51ditu128*128(像素)。如下图(1)、图(2)两幅图(两幅图均没有包含到最南端的曾母暗沙):

由于两者是采用的不同的投影方式,故地图在外形上有着比较大的差别,但应该注意的是每一小片上只是面积上的差别,通俗点来讲要有都有要没有都没有;由于两者每一幅图片是不等的,在实际中Google的每一图幅的面积应该是51ditu4倍,但我们将两者放在同样大小的比例中发现两者吻合的比较好,由此也可推测随着比例的放大吻合程度将会更好,也就是说两者的切割方法是相同的,只不过导出图片的大小不同而已。

<!--[if !supportLists]-->3.         <!--[endif]-->

坐标系统

同样可以假设51ditu在每一缩放等级下的地图上也都建立了一个坐标系,不同的是其坐标原点为(西经11.25度,北纬0度),正方向分别为向东向北,跨度范围基本上就是覆盖中国的国土面积,即经度跨度为【67.5135】,纬度跨度为【056.25】,而中国领土北起漠河以北的黑龙江江心(北纬53°30′),南到南沙群岛南端的曾母暗沙(北纬),跨纬度49度多;东起黑龙江与乌苏里江汇合处(东经135°05′),西到帕米尔高原(东经73°40′),跨经度60多度

<!--[if !vml]-->Google.PNG
<!--[endif]-->

图(1

51ditu.PNG<!--[endif]-->

图(2

拟采用的方案

<!--[if !supportLists]-->1.         <!--[endif]-->方案简述      

由于Google maps并没有提供大比例尺下的中国地图,故将其作为参照系不是一个很好的选择,为便于以后的比较,我们采用与51ditu相同的坐标系统,即编号方式。

如上图(2)所示,小图片12-1-7.png,是缩放等级12之下的一副图片,1是纬度方向上的序号,7是经度方向上的序号,从以上分析我们得知,缩放等级12之下,整个地球的切图共是 <!--[if !vml]--><!--[endif]-->* <!--[if !vml]--><!--[endif]-->张,在投影影响的基础上,每个图片的跨度为11.25*11.25度,图片12-1-7.png左下角点的经纬度为(67.511.25),很明显(67.5+11.25/11.25=711.25/11.25=1这样我们就得到了切割图片序号的计算公式,一般化如下:

在缩放等级为n之下,切割图片的边长(设为dd=360/ <!--[if !vml]-->2^(17-n)<!--[endif]-->,若小图片左下角坐标为(x,y,并设经度方向上的序号为bx,纬度方向上的序号为by,可得到其表达式为bx=(x+11.25)/d;by=y/d.

由于我们只是针对中国范围,故取经度跨度为【67.5135】,纬度跨度为【056.25】,在切割时可以适当延展,延展单位以11.25为准。

<!--[if !supportLists]-->2.         <!--[endif]-->命名规则、存储方案

在最大比例尺即缩放等级为0之下,取经度跨度为【67.5135】,纬度跨度为【056.25】,可以计算出共需切割的图片数量为 <!--[if !vml]-->2^17<!--[endif]-->*67.5/360*<!--[if !vml]-->2^17<!--[endif]-->*56.25/360=131072*3/16*131072*5/32=112,442,880.缩放等级n之下,所需图片数量的计算公式为2^(17-n)<!--[endif]--><!--[endif]-->*67.5/360* <!--[if !vml]-->2^(17-n)<!--[endif]--><!--[endif]-->*56.25/360=15* <!--[if !vml]-->2^(25-2n)<!--[endif]-->(0<=n<=12)

以下为各比例尺之下的对应关系

缩放级别          比例尺              图幅数           存储空间(4K/幅)

0 -------------------- 1:2,500 --------------------503,316,480 --------------------1920G

1 -------------------- 1:5,000 -------------------- 125,829,120 --------------------480G

2 -------------------- 1:10,000 --------------------31,457,180 --------------------120G

3 -------------------- 1:25,000 --------------------7,864,320 --------------------30G

4 -------------------- 1:50,000 --------------------1,966,080 --------------------7.5G

5 -------------------- 1:100,000 --------------------491,520 --------------------1.875G

6 -------------------- 1:250,000 --------------------122,880……………………………

7 -------------------- 1:500,000 --------------------30,720……………………………

8 -------------------- 1:1,000,000 --------------------7,680……………………………

9 -------------------- 1:2,500,000 --------------------1,920……………………………

10 ------------------- 1:5,000,000 --------------------480……………………………

11 ------------------- 1:10,000,000 -------------------120……………………………

12 ------------------- 1:50,000,000 -------------------30……………………………

由以上分析可见在大比例尺下若全部生成,其数量是很巨大的,考虑到某些大比例尺地图只是在某些地区或特殊要求时是必须的,我们没有必要全部生成,只需生成规定经纬度范围内的某一缩放级别下的地图。但即使这样小缩放级别下的图幅数量仍然不小,所以我们应该分区域在不同文件夹下存放。从级别n到级别n+1,图片数量后者是前者的4,即放大一个级别原级别一张图片裂变为四张,这样我们可以借鉴四杈树的组织形式,即若树的深度为N,深度为N-1的节点子节点均为30,其余节点子节点为四个(当深度为1,根结点子节点为5*6=30),树的深度与缩放级别的对应关系为N=13-n

树的节点的命名即为对应文件夹的名称,根结点即以缩放级别命名,叶节点对应图片以形如“bx-by.png”的形式命名,其它节点则是形如“0-0”、“0-1”、“1-0”、“1-1”的形式命名。

这样一来生成图片的时候就有一个路径判断和生成的问题。在确定了经度跨度为【67.5135】,纬度跨度为【056.25】,并且在最小比例尺(缩放等级为12)之下我们已知图片是5*6张,即经度方向为6,纬度方向为5,这两个值很重要直接影响到我们的命名,当然前提变了这个值也随着变了。我们制定规则如下:

如前树的深度为N,经度方向上的序号为bx,纬度方向上的序号为by。则当1时,经度方向上的节点值LngToString(((bx-7*N)/6)%2), 纬度方向上的节点值LatToString((by/5)%2),则节点名称命名为Lng+”-”+Lat

Tags:Google maps,51ditu  
责任编辑:gissky
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 中国地图