在使用Cesium建模卫星时,当卫星高度高于某km时,切换二维地图,卫星模型消失,卫星label还存在,如果关联了传感器的话,看起来好像是反着深入底图里面,显示效果很差。
模型展示(高度:1000km)
模型展示(高度:1400km)
此时,模型已经在二维地图上不显示了,去找了下源码:
/cesium/Source/Scene/SceneTransitioner.js
SceneTransitioner.prototype.morphTo2D = function (duration, ellipsoid) {
...
if (this._previousMode === SceneMode.COLUMBUS_VIEW) {
morphFromColumbusViewTo2D(this, duration);
} else {
morphFrom3DTo2D(this, duration, ellipsoid);
}
...
};
function morphFrom3DTo2D(transitioner, duration, ellipsoid) {
...
const complete = complete2DCallback(endCamera);
...
}
function complete2DCallback(camera2D) {
return function (transitioner) {
...
camera.position.z = scene.mapProjection.ellipsoid.maximumRadius * 2.0;
// console.log(scene.mapProjection.ellipsoid.maximumRadius * 2.0);
...
};
}
确实是相机高度问题, scene.mapProjection.ellipsoid.maximumRadius是个常数,API解释为获取椭球的最大半径为6,378,137,此处为地球半径。所以三维转二维相机高度一直为12756274米,如果超过这个数值的话就不会显示模型。
解决办法为初始化后手动设置相机z值,具体大小视情况而定
viewer.scene.morphComplete.addEventListener(function() {
if(viewer.scene.mode === 2) {
viewer.scene.camera.position.z = 63781370;
}
})