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

说明:个人见解,可能与实际实现不同,更或者观点有错误之处,敬请注意!

Google maps切割方法

<!--[if !supportLists]-->1. <!--[endif]-->缩放等级与图幅数

字串6

Google maps的缩放等级是0-1718个等级,比例尺与缩放等级是成反比的(比例尺越大地图越详细),其第17等级只有一幅世界地图,某一等级下所含地图数的计算公式为<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 24.75pt; HEIGHT: 15pt" o:ole="" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1.YAN/LOCALS~1/Temp/msohtml1/01/clip_image001.wmz"></imagedata></shape>2<!--[endif]-->^(17-n)^2n为缩放等级)。

字串6

<!--[if !supportLists]-->2. <!--[endif]-->图幅生成与编号

字串7

可以假设Google maps在每一缩放等级下的地图上都建立了一个坐标系,坐标原点为(西经180度,北纬90度),正方向分别为向东向南,经度跨度为360度,纬度跨度为180度。一般情况下,为便于理解可以这么认为,若在缩放等级n的情况下,共需生成(2<!--[endif]-->^(17-n))^2<clk></clk>副<nobr οncοntextmenu="return false;" οnmοusemοve="kwM(0);" id="clickeyekey0" οnmοuseοver="kwE(event,0, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" οnclick="return kwC(event,0)" οnmοuseοut="kwL(event, this);" target="_1">图片</nobr>,其编号形如(x,y)0<=x<=<shape id="_x0000_i1027" style="WIDTH: 24.75pt; HEIGHT: 15pt" o:ole="" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1.YAN/LOCALS~1/Temp/msohtml1/01/clip_image001.wmz"></imagedata></shape><!--[if !vml]-->2<!--[endif]-->^(17-n)<!--[endif]-->-1,0<=y<=<shape id="_x0000_i1028" style="WIDTH: 24.75pt; HEIGHT: 15pt" o:ole="" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1.YAN/LOCALS~1/Temp/msohtml1/01/clip_image001.wmz"></imagedata></shape><!--[if !vml]-->2<!--[endif]-->^(17-n)<!--[endif]-->-1)。 字串1

但由于<clk></clk>制图区域的范围、形状和地理位置等的不同需要选择不同的投影方式,以减少投影成<nobr οncοntextmenu="return false;" οnmοusemοve="kwM(3);" id="clickeyekey3" οnmοuseοver="kwE(event,3, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" οnclick="return kwC(event,3)" οnmοuseοut="kwL(event, this);" target="_1">平面</nobr>地图后的误差值。在世界地图中常用墨卡托投影绘制世界航线图、世界交通图与世界时区图;我国出版的世界地图多采用等差分纬线多圆锥投影,选用这个投影,对于表现中国形状以及与四邻的对比关系较好,但投影的边缘地区变形较大。根据不同的需要还有许多其它的投影方式,在此不再赘述,当然国家基本比例尺地形图的投影、分幅等,是由国家测绘主管部门研究制订,不容许任意改变的,另外编制小区域大比例尺地图,无论采用什么投影,变形都是很小的。

字串8

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

字串3

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

字串6

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

字串8

关于51ditu

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

字串4

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

0 -------------------- 1:2,500 字串3

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

字串7

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

字串7

3 -------------------- 1:25,000 字串8

4 -------------------- 1:50,000 字串3

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

字串5

6 -------------------- 1:250,000 字串3

7 -------------------- 1:500,000 字串9

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

字串9

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

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

字串7

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

字串1

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

字串3

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

字串2

<clk></clk>以上是其官方发布的<nobr οncοntextmenu="return false;" οnmοusemοve="kwM(4);" id="clickeyekey4" οnmοuseοver="kwE(event,4, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" οnclick="return kwC(event,4)" οnmοuseοut="kwL(event, this);" target="_1">数据</nobr>。 字串1

字串9

<!--[if !supportLists]-->2. <!--[endif]-->与Google的比较

字串7

51地图和Google maps<clk></clk>都<nobr οncοntextmenu="return false;" οnmοusemοve="kwM(10);" id="clickeyekey10" οnmοuseοver="kwE(event,10, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" οnclick="return kwC(event,10)" οnmοuseοut="kwL(event, this);" target="_1">开放</nobr>了API,有人结合两者的API<clk></clk>把它们集成到一块,发现两者的经纬度吻合的非常好,我想这也主要是在大比例尺地图下只要两者的切割方法相同就可以做到的,故为了以后能更好的兼容并向领先者<nobr οncοntextmenu="return false;" οnmοusemοve="kwM(1);" id="clickeyekey1" οnmοuseοver="kwE(event,1, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" οnclick="return kwC(event,1)" οnmοuseοut="kwL(event, this);" target="_1">学习</nobr>我们也争取达到这种比较好的吻合效果。 字串6

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

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

字串3

<!--[if !supportLists]-->3. <!--[endif]--><clk></clk>坐标<nobr οncοntextmenu="return false;" οnmοusemοve="kwM(7);" id="clickeyekey7" οnmοuseοver="kwE(event,7, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" οnclick="return kwC(event,7)" οnmοuseοut="kwL(event, this);" target="_1">系统</nobr> 字串8

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

字串4

<shape id="_x0000_i1029" style="WIDTH: 414.75pt; HEIGHT: 306pt" type="#_x0000_t75"><imagedata o:title="Google" src="file:///C:/DOCUME~1/ADMINI~1.YAN/LOCALS~1/Temp/msohtml1/01/clip_image003.png"></imagedata></shape><!--[if !vml]-->Google.PNG
<!--[endif]-->

字串8

图(1

字串4

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

字串1

图(2

字串7

<clk></clk>拟采用的<nobr οncοntextmenu="return false;" οnmοusemοve="kwM(12);" id="clickeyekey12" οnmοuseοver="kwE(event,12, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" οnclick="return kwC(event,12)" οnmοuseοut="kwL(event, this);" target="_1">方案</nobr>

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

字串8

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

字串7

如上图(2)所示,小图片<chsdate w:st="on" isrocdate="False" islunardate="False" day="7" month="1" year="2012"><span lang="EN-US">12-1-7</span></chsdate>.png,是缩放等级12之下的一副图片,1是纬度方向上的序号,7是经度方向上的序号,从以上分析我们得知,缩放等级12之下,整个地球的切图共是<shape id="_x0000_i1031" style="WIDTH: 14.25pt; HEIGHT: 15pt" o:ole="" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1.YAN/LOCALS~1/Temp/msohtml1/01/clip_image007.wmz"></imagedata></shape><!--[if !vml]--><!--[endif]-->*<shape id="_x0000_i1032" style="WIDTH: 14.25pt; HEIGHT: 15pt" o:ole="" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1.YAN/LOCALS~1/Temp/msohtml1/01/clip_image009.wmz"></imagedata></shape><!--[if !vml]--><!--[endif]--><clk></clk>张,在投影影响的<nobr οncοntextmenu="return false;" οnmοusemοve="kwM(2);" id="clickeyekey2" οnmοuseοver="kwE(event,2, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" οnclick="return kwC(event,2)" οnmοuseοut="kwL(event, this);" target="_1">基础</nobr>上,每个图片的跨度为11.25*11.25度,图片12-1-7.png左下角点的经纬度为(67.511.25),很明显(67.5+11.25/11.25=711.25/11.25=1。这样我们就得到了切割图片序号的计算公式,一般化如下: 字串4

在缩放等级为n之下,切割图片的边长(设为dd=360/<shape id="_x0000_i1033" style="WIDTH: 24.75pt; HEIGHT: 15pt" o:ole="" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1.YAN/LOCALS~1/Temp/msohtml1/01/clip_image001.wmz"></imagedata></shape><!--[if !vml]-->2^(17-n)<!--[endif]-->,若小图片左下角坐标为(x,y,并设经度方向上的序号为bx,纬度方向上的序号为by,可得到其表达式为bx=(x+11.25)/d;by=y/d.字串3

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

字串8

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

在最大比例尺即缩放等级为0之下,取经度跨度为【67.5135】,纬度跨度为【056.25】,可以计算出共需切割的图片数量为<shape id="_x0000_i1034" style="WIDTH: 17.25pt; HEIGHT: 15pt" o:ole="" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1.YAN/LOCALS~1/Temp/msohtml1/01/clip_image010.wmz"></imagedata></shape><!--[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*<shape id="_x0000_i1037" style="WIDTH: 24.75pt; HEIGHT: 15pt" o:ole="" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1.YAN/LOCALS~1/Temp/msohtml1/01/clip_image001.wmz"></imagedata></shape><!--[if !vml]-->2^(17-n)<!--[endif]--><!--[endif]-->*56.25/360=15*<shape id="_x0000_i1038" style="WIDTH: 30pt; HEIGHT: 15pt" o:ole="" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1.YAN/LOCALS~1/Temp/msohtml1/01/clip_image013.wmz"></imagedata></shape><!--[if !vml]-->2^(25-2n)<!--[endif]-->(0<=n<=12) 字串5

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

字串8

缩放级别 比例尺 图幅数 <clk></clk>存储<nobr οncοntextmenu="return false;" οnmοusemοve="kwM(5);" id="clickeyekey5" οnmοuseοver="kwE(event,5, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" οnclick="return kwC(event,5)" οnmοuseοut="kwL(event, this);" target="_1">空间</nobr>(4K/幅)

字串3

0 -------------------- 1:2,500 --------------------503,316,480 -------------------<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="True" hasspace="False" sourcevalue="1920" unitname="g">-1920G</chmetcnv> 字串1

1 -------------------- 1:5,000 -------------------- 125,829,120 -------------------<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="True" hasspace="False" sourcevalue="480" unitname="g">-480G</chmetcnv>

字串8

2 -------------------- 1:10,000 --------------------31,457,180 -------------------<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="True" hasspace="False" sourcevalue="120" unitname="g">-120G</chmetcnv>

字串1

3 -------------------- 1:25,000 --------------------7,864,320 -------------------<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="True" hasspace="False" sourcevalue="30" unitname="g">-30G</chmetcnv>

字串5

4 -------------------- 1:50,000 --------------------1,966,080 -------------------<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="True" hasspace="False" sourcevalue="7.5" unitname="g">-7.5G</chmetcnv> 字串1

5 -------------------- 1:100,000 --------------------491,520 -------------------<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="True" hasspace="False" sourcevalue="1.875" unitname="g">-1.875G</chmetcnv>

字串9

6 -------------------- 1:250,000 --------------------122,880…………………………… 字串7

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

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

字串8

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

字串5

10 ------------------- 1:5,000,000 --------------------480…………………………… 字串4

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

字串4

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

字串4

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

字串4

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

<clk></clk>这样一来生成图片的时候就有一个路径判断和生成的<nobr οncοntextmenu="return false;" οnmοusemοve="kwM(8);" id="clickeyekey8" οnmοuseοver="kwE(event,8, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" οnclick="return kwC(event,8)" οnmοuseοut="kwL(event, this);" target="_1">问题</nobr>。在确定了经度跨度为【67.5135】,纬度跨度为【056.25】,并且在最小比例尺(缩放等级为12)之下我们已知图片是5*6张,即经度方向为6,纬度方向为5,这两个值很重要直接影响到我们的命名,当然前提变了这个值也随着变了。我们制定规则如下: 字串9

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

原文地址:http://www.cnblogs.com/wangjifeng/articles/455700.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值