将高度转换为z级(反之亦然)



当使用ol3铯并且贴图处于3d模式时,调用map.getView().getZoom()会返回undefined。这可能也会影响setZoom。

我知道我们生活在一个三维世界中,所以没有像平铺地图中那样的z级别。另一方面,谷歌地图在将grom 3d返回到2d时计算z等效值。

如何将高度转换为z当量?考虑到纬度和海拔高度,有什么公式可以得到z当量?

从3D中获得2D"Z"值没有简单的公式,因为3D相机可以倾斜,可以在前景和背景中看到不同级别的瓷砖,等等。

然而,对于单个瓦片,图像四叉树中有特定的已知"级别"值。您可以在Cesium Inspector中看到这些,方法是单击右侧单词Terrain旁边的小+,然后在Show tile coordinates上打上复选标记。所示的坐标包括LXY,其中L是瓦片的级别(0是放大得最多的,数字越大放大得越多),XY是图像层内的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);

最新更新