我有一个CesiumJS函数,我想在执行zoomTo()之后且仅在执行之后才执行该函数,这可以确保地形已完全加载(如文档中所述)!
这是因为这个函数实际上应该计算射线和地形之间的交集,所以地形必须完全加载才能成功执行。
在当前状态下,以下代码返回:null超快速(完全不等待地形):
例如:
var viewer = new Cesium.Viewer('cesiumContainer', {
imageryProvider : new Cesium.BingMapsImageryProvider({
url : 'https://dev.virtualearth.net',
key : $(BING_KEY),
mapStyle : Cesium.BingMapsStyle.AERIAL
}),
terrainProvider: new Cesium.CesiumTerrainProvider({
url : 'https://api.maptiler.com/tiles/terrain-quantized-mesh/?key$(MKEY)'
});
baseLayerPicker : false,
infoBox : false,
});
var p0 = [10.7465, 48.3147, 1500];
var p1 = [10.7475, 48.3127, 1000];
var start = new Cesium.Cartesian3.fromDegrees(...p0);
var end = new Cesium.Cartesian3.fromDegrees(...p1);
var entity = viewer.entities.add({
polyline : {
positions : Cesium.Cartesian3.fromDegreesArrayHeights([
...(p0.concat(p1))
]),
width : 4,
material : new Cesium.PolylineGlowMaterialProperty({
glowPower : 1,
color : Cesium.Color.GREEN
})
}
});
viewer.zoomTo(viewer.entities);
// then run this function:
function pickGlobeIntersection(viewer, p0, p1) {
var direction = new Cesium.Cartesian3();
Cesium.Cartesian3.subtract(p1, p0, direction);
console.log("direction: ", direction);
Cesium.Cartesian3.normalize(direction, direction);
var ray = new Cesium.Ray(p0, direction);
var hitPos = viewer.scene.globe.pick(ray, viewer.scene);
if ((hitPos !== undefined) && (hitPos !== null)) {
console.log("hitPos: ", hitPos);
return hitPos;
} else {
console.log("hitPos is null!");
return null;
}
}
pickGlobeIntersection(viewer, start, end);
(如果在沙堡中使用代码,则将查看器替换为默认查看器)
如何确保仅在地形完全加载后才执行该功能?