作者:taco
Cesium中在对地球进行缩放的时候,会根据鼠标摆放的位置来判断当前缩放的中心点位置。这一点就会导致如果我的鼠标摆放到了北极的位置进行缩小后,地球就会出现偏移的现象,地球向向上进行缩小,偏离中心的位置。这种情况下在进行放大的话,球面依然不能保证中心位置。
这个时候就会出现一个想法,我能不能把地球固定在我整个浏览器的中间呢?不管我根据哪个点去进行缩放,地球中心的位置都保持不变。 如果要去修改鼠标事件的话,首先想到的是screenSpaceEventHandler这个接口的监听事件,当我们监听鼠标滚轮的时候,去调整高度。但这个高度如何去调整呢?与此同时还不能修改原始的位置。
在尝试的过程中,找到了camera中放大缩小的方法 zoomIn(amount) 并不会改变球体的位置。只对球体进行放大缩小。
那这样就很简单了。直接上代码啦
function zoomInCenter(viewer) {
viewer.screenSpaceEventHandler.setInputAction((movement) => {
const height = viewer.scene.camera.positionCartographic.height;
const Amount = Cesium.Math.sign(movement) * height / Math.log(height);
if (!isNaN(Amount)) {
viewer.scene.camera.zoomIn(Amount);
}
}, Cesium.ScreenSpaceEventType.WHEEL);
}
这样就能保证我球球是在这个窗口的正中心去缩放啦。最后效果图~