当使用ol3铯并且贴图处于3d模式时,调用map.getView().getZoom()会返回undefined。这可能也会影响setZoom。
我知道我们生活在一个三维世界中,所以没有像平铺地图中那样的z级别。另一方面,谷歌地图在将grom 3d返回到2d时计算z等效值。
如何将高度转换为z当量?考虑到纬度和海拔高度,有什么公式可以得到z当量?
从3D中获得2D"Z"值没有简单的公式,因为3D相机可以倾斜,可以在前景和背景中看到不同级别的瓷砖,等等。
然而,对于单个瓦片,图像四叉树中有特定的已知"级别"值。您可以在Cesium Inspector中看到这些,方法是单击右侧单词Terrain
旁边的小+
,然后在Show tile coordinates
上打上复选标记。所示的坐标包括L
、X
和Y
,其中L
是瓦片的级别(0是放大得最多的,数字越大放大得越多),X
和Y
是图像层内的2D位置。
我在GIS SE上发布了一个答案,展示了如何像Cesium Inspector那样伸手抓住这些瓷砖,以及一些注意事项。您可以潜在地查找最高级别的可见磁贴,并将其用作您的"Z"值。
我知道这是不准确的,但如果共享对任何人都有用的话。
我在谷歌地图中移动了几个高度,在2D和3D地图之间切换,写下地址栏中显示的z或高度:
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
根据上述对应关系,我近似了以下函数:
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));
}
根据您的公式,反向转换应该是:
海拔高度=C*Math.pow((A-D)/(zoomLevel-D)-1,1/B);