在这里首先说明一个问题,就是cesium加载切片图层的时候,它会混合层级加载,不像二维地图,当前层级都一致,通过拉伸镜头对地球的距离,发现拉伸远近与与二维地图有以下 的关系:
z altitude (metres)
----- -----------------
3 10311040
4 5932713
5 2966357
6 1483178
7 741589
8.6 243624
11.35 36310
13.85 6410
15.26 2411
17.01 717
18.27 214
19.6 119
20.77 50
21 44
有了对应关系如何得到通过数据进行拟合曲线,可以用一些软件例如orgin8.0或者spass,这里有一个国外在线模拟函数模拟
整理可得到以下函数:
function altitudeToZoom(altitude) {
var A = 40487.57;
var B = 0.00007096758;
var C = 91610.74;
var D = -40467.74;
return D+(A-D)/(1+Math.pow(altitude/C, B));
}
这样算出来层级不是整数,如果你想要整数可以替换为
Math.round(D +(AD)/(1 + Math.pow(altitude / C,B))
反向计算
通过level层级,计算高度。
zoomToAltitude(zoom) {
var A = 40487.57;
var B = 0.00007096758;
var C = 91610.74;
var D = -40467.74;
var altitude = C * Math.pow(((A-D)/ (zoom-D) -1), 1/B);
return altitude;
}
网友评论