计算公式
1、地球半径 = 6378137.0米
2、地球周长
2 * π * 地球半径
40075016.7 米3、DPI(每英寸像素数)
96dpi = 96像素 = 2.54厘米 = 0.0254米
1像素 = 0.0254 / 96 米
4、地图宽度
地图高度
256 * pow(2, 层级)5、分辨率(米/像素) = 2 * π * 地球半径 / (256 * pow(2, 层级) )
6、比例尺
图上距离 / 实地距离
1 : ( 2 * π * 地球半径 / (256 * pow(2, 层级) / dpi * 0.0254 ) )7、分辨率(度/像素) = 360 / (256 * pow(2, 层级) )
8、地图左上角纬度:180度墨卡托反算=(2 * Math.atan(Math.exp(180 * Math.PI / 180)) - Math.PI / 2) * 180 / Math.PI=85.05112877980659度
说明:pow(2, 层级) 表示2的层级次方
层级(LOD) | 地图宽度和高度(像素) | 分辨率(米/像素) | 比例尺(96 dpi) | 分辨率(度/像素) |
0 | 256 | 156543.03392804097 | 1 : 591658710.9091313 | 1.40625 |
1 | 512 | 78271.51696402048 | 1 : 295829355.45456564 | 0.703125 |
2 | 1,024 | 39135.75848201024 | 1 : 147914677.72728282 | 0.3515625 |
3 | 2,048 | 19567.87924100512 | 1 : 73957338.86364141 | 0.17578125 |
4 | 4,096 | 9783.93962050256 | 1 : 36978669.431820706 | 0.087890625 |
5 | 8,192 | 4891.96981025128 | 1 : 18489334.715910353 | 0.0439453125 |
6 | 16,384 | 2445.98490512564 | 1 : 9244667.357955176 | 0.02197265625 |
7 | 32,768 | 1222.99245256282 | 1 : 4622333.678977588 | 0.010986328125 |
8 | 65,536 | 611.49622628141 | 1 : 2311166.839488794 | 0.0054931640625 |
9 | 131,072 | 305.748113140705 | 1 : 1155583.419744397 | 0.00274658203125 |
10 | 262,144 | 152.8740565703525 | 1 : 577791.7098721985 | 0.001373291015625 |
11 | 524,288 | 76.43702828517625 | 1 : 288895.85493609926 | 0.0006866455078125 |
12 | 1,048,576 | 38.21851414258813 | 1 : 144447.92746804963 | 0.00034332275390625 |
13 | 2,097,152 | 19.109257071294063 | 1 : 72223.96373402482 | 0.000171661376953125 |
14 | 4,194,304 | 9.554628535647032 | 1 : 36111.98186701241 | 0.0000858306884765625 |
15 | 8,388,608 | 4.777314267823516 | 1 : 18055.990933506204 | 0.00004291534423828125 |
16 | 16,777,216 | 2.388657133911758 | 1 : 9027.995466753102 | 0.000021457672119140625 |
17 | 33,554,432 | 1.194328566955879 | 1 : 4513.997733376551 | 0.000010728836059570312 |
18 | 67,108,864 | 0.5971642834779395 | 1 : 2256.9988666882755 | 0.000005364418029785156 |
19 | 134,217,728 | 0.29858214173896974 | 1 : 1128.4994333441377 | 0.000002682209014892578 |
20 | 268,435,456 | 0.14929107086948487 | 1 : 564.2497166720689 | 0.000001341104507446289 |
21 | 536,870,912 | 0.07464553543474244 | 1 : 282.12485833603444 | 6.705522537231445e-7 |
22 | 1,073,741,824 | 0.03732276771737122 | 1 : 141.06242916801722 | 3.3527612686157227e-7 |
23 | 2,147,483,648 | 0.01866138385868561 | 1 : 70.53121458400861 | 1.6763806343078613e-7 |
JavaScript代码
分辨率:for(var i = 0; i <= 23; i++) console.log(i, 2 * Math.PI * 6378137 / (256 * 2 ~*~* i));
比例尺:for(var i = 0; i <= 23; i++) console.log(i, 2 * Math.PI * 6378137 / (256 * 2 ~*~* i / 96 * 0.0254));
=
坐标转换 =
屏幕坐标转设备坐标
X设备 = (X屏幕 / 屏幕宽度) * 2 – 1
Y设备 = -(Y屏幕 / 屏幕高度) * 2 + 1
设备坐标转屏幕坐标
X屏幕 = (X设备 + 1) / 2 * 屏幕宽度
Y屏幕 = (1 - Y设备) / 2 * 屏幕高度