(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)
参考:http://www.google.cn/maps/vt?lyrs=s&x=0&y=0&z=0
参考:http://www.tianditu.gov.cn
参考:https://baike.baidu.com/item/%E5%A4%A9%E5%9C%B0%E5%9B%BE
通常在网络上用到的影像图,像google,bing,baidu,gaode,tianditu等,这些厂商提供的影像图服务,提供的都是wmts地图服务的地图,预先分层切片的地图服务。
层级的结构形如:
0级1张图片,1级2 * 2张图片,2级4 * 4张图片,3级8 * 8张图片…
理论上最多可以提供0-26级图片服务(第26级的图片数量为426张图片,基本达到了double能表达的精度范围253),google通常提供了全球21级的地图服务,天地图提供了国内的18级地图服务。
不知道大家是否会有这个疑问,全球的影像数据会有多大?应该会很大吧,是在那种数量级上?
如果我下载11级地图:会占用多少空间?会有多少个影像图片?精度能达到多少米?
下面针对这些问题进行分析。
影像图数量&存储大小推算
通常互联网上影像图都是使用webmecator投影方法进行的投影,地球会被投影为:长—2 PI R,宽—2 PI R,长宽一致的正方形。首层(level=0)正好是一张影像图来表达。
注:webmecator支持的纬度范围
Math.PI/2 - (2.0 * Math.atan(Math.exp(-Math.PI))))*180/Math.PI = 85.05112877980659
列表计算数量值:
- 逐层的x/y的索引值范围:0 <= x/y < Math.pow(2, n)
- 当前层的图片数量:Math.pow(4,n)
- 包含下层的总数量:Math.pow(4,n) + Math.pow(4,n-1) + … + Math.pow(4,0)
// 计算包含下层的总数量js方法:
function total(n){
if(n>0) return Math.pow(4,n) + calc(n-1);
return 1;
}
层级 | x/y索引范围 | 当前层图片数量 | 包含下层的总数量 |
---|---|---|---|
第0层 | 0 | 1 | 1 |
第1层 | 0-1 | 4 | 5 |
第2层 | 0-3 | 16 | 21 |
第3层 | 0-7 | 64 | 85 |
第4层 | 0-15 | 256 | 341 |
第5层 | 0-31 | 1024 | 1365 |
第6层 | 0-63 | 4,096 | 5,461 |
第7层 | 0-127 | 16,384 | 21,845 |
第8层 | 0-255 | 65,536 | 87,381 |
第9层 | 0-511 | 262,144 | 349,525 |
第10层 | 0-1,023 | 1,048,576 | 1,398,101 |
第11层 | 0-2,047 | 4,194,304 | 5,592,405 |
第12层 | 0-4,095 | 16,777,216 | 22,369,621 |
第13层 | 0-8,191 | 67,108,864 | 89,478,485 |
第14层 | 0-16,383 | 268,435,456 | 357,913,941 |
第15层 | 0-32,767 | 1,073,741,824 | 1,431,655,765 |
第16层 | 0-65,535 | 4,294,967,296 | 5,726,623,061 |
第17层 | 0-131,071 | 17,179,869,184 | 22,906,492,245 |
第18层 | 0-262,143 | 68,719,476,736 | 91,625,968,981 |
第19层 | 0-524,287 | 274,877,906,944 | 366,503,875,925 |
第20层 | 0-1,048,575 | 1,099,511,627,776 | 1,466,015,503,701 |
第21层 | 0-2,097,151 | 4,398,046,511,104 | 5,864,062,014,805 |
通常一张影像图片大小约为10KB,基于图片的数量*10KB,我们就可以直接得到占用的存储容量大小。
-
Google提供0-21级地图,21级x/y索引值的范围位于 [0, 2^21),第21级的影像图片数量约为4.398万亿张,影像图片的总数量约为5.864万亿张图片,预估占用的存储容量为58.64PB。
-
天地图提供0-18级地图,如果包含全球的话,图片的总数量约为916亿张图片,预估占用的存储量为916TB。
不过天地图仅提供国内领土面积的18级地图,其它地方提供的较低精度的地图。所以它共耗费了约30亿张图片,占用存储约30TB—来自百度百科。
精度推算
我们已知了影像图采用的投影方式-webmecator,这种投影方式下,赤道处的面积变形比较小,越靠近高纬度变形会变大很快。
本次采用赤道处,作为计算精度的基准,进行层级精度的推算。
推算的方法:
- 我们先计算处赤道的周长,然后在计算出在某一层级下用了横向用了多少张图片,就可以得出图片横向表达的实际距离。
- 有了图片表达的实际距离,再除以图片横向的像素数,就可以得出每个像素表达的距离,也就是我们通常表达的影像图精度。
地球长半轴的长度为(WGS84标准):6,378,137米
地球的赤道周长约为:2 * Math.PI * 6378137 ~= 40,075,017 (m)
就拿天地图的18级来说,x/y索引范围0-262,143,在横向上有262,144张图片:
40,075,017(m) / 262,144 ~= 152.874 (m)
影像图通常都256*256的,横向上有256个像素,每个像素表达长度为:
152.874(m) / 256 ~= 0.597 (m) = 59.7cm
所以,天地图对国内提供的地图精度约为0.6m,这个可以在资料上查到。
计算第n级的精度:2 * Math.PI * 6378137 / Math.pow(2,n) / 256
同样的,对于Google地图来说,21级地图的精度计算为:
2 * Math.PI * 6378137 / Math.pow(2,21) / 256 ~= 0.0746 ~= 7.5cm
可以看出21级地图时,精度到达了7.5cm,精度还是很高的了。
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)