今天算是找到了两个方法吧。
一.通过tileVisible添加事件
首先添加tileset数据
let tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
url:"", //自己的数据路径
maximumScreenSpaceError: 2, //最大的屏幕空间误差
maximumNumberOfLoadedTiles: 1000, //最大加载瓦片个数
// debugShowBoundingVolume: true, // 显示包围盒
}));
然后添加监听事件
tileset.tileVisible.addEventListener(function(tile){
viewer.entities.add({
position: new Cesium.Cartesian3(tile.boundingSphere.center.x, tile.boundingSphere.center.y, tile.boundingSphere.center.z + 25),
point: { pixelSize: 10, color: Cesium.Color.RED },
label: {
show: true,
font: '15px sans-serif',
text: "瓦片中心x为:" + tile.boundingSphere.center.x + ",瓦片中心y为:" + tile.boundingSphere.center.y + ",瓦片中心z为:" + tile.boundingSphere.center.z,
distanceDisplayCondition: new Cesium.DistanceDisplayCondition(10, 20),
// disableDepthTestDistance: 100.0,
// scaleByDistance: new Cesium.NearFarScalar(10, 1, 1000, 0.0),
// translucencyByDistance: new Cesium.NearFarScalar(10, 1, 1000, 0.0)
}
});
})
原本想要实现在加载的每个模型旁边添加一个lable来说明模型的大致的位置,可是这种方法会导致很严重的掉帧和网页的卡顿,然后cesium官方也不建议这样做,但是确实可以获得每一个tile的信息。
二.从3dtileset的属性中获取
我查看了Cesium3DTileset 的属性信息,然后再里面看到了这个东西。
可以通过这个属性来获取每一个tile的信息。
function myTestDemo02() {
let selectedTiles = tileset._selectedTiles;
console.log("selectedTiles为:")
console.log(selectedTiles)
console.log(selectedTiles[0])
}