Cesium实战系列文章总目录
:
传送门
1.实现效果
2.实现方法
看了网上的一些博客,很多人都是通过计算相机高度
来间接近似计算瓦片级别,显然这是不够准确的。
而且Cesium在三维地球中,为了渲染效率等多方面考虑,在屏幕上显示的地图瓦片级别
并不是都相同
的。
如会使用屏幕空间误差
来调度不同级别的瓦片:
2.1踩坑过程
首先是想模仿坐标瓦片信息图层TileCoordinatesImageryProvider
,来确定当前页面显示的地图瓦片级别。
看了官方文档后,发现其提供了获取最小最大瓦片层级
的函数,minimumLevel
和maximumLevel
:传送门
本以为可以实现功能了,但是在
判断ready返回true
后,控制台输出maximumLevel和minimumLevel的返回值一直是undefined
,看了一下源码
之后发现,这个函数就只会返回undefined。。。。,这貌似是源码有问题吧。。。。。。。
于是此路不通,
换个方法
。
2.2实现思路
通过查看globe
的源码,发现surface中包含了四叉树瓦片数据。
继续往下看源码,发现
tilesToRender
成员变量,是当前渲染需要的瓦片。于是利用这个属性来获取当前渲染瓦片的信息,实现功能。
2.3具体代码
查看当前地图瓦片级别的具体实现代码如下,并使用Set
进行数组去重
,并在控制台输出。
// 获取当前地图瓦片级别
function tileLevel(){
let tiles = new Set();
let tilesToRender = viewer.scene.globe._surface._tilesToRender;
if (Cesium.defined(tilesToRender)) {
for (let i = 0; i < tilesToRender.length; i++) {
tiles.add(tilesToRender[i].level);
}
console.log("当前地图瓦片级别为:");
console.log(tiles);
}
}