这个问题我也遇到了,
var position = Cesium.SceneTransforms.wgs84ToWindowCoordinates(_this.viewer.scene, positionC3)
添加地形前后,屏幕上entity的位置变化了,但entity转换的屏幕坐标是一样的,所以弹窗对不上。
原因是因为添加地形后,viewer.scene发生了变化,所以需要用scene把笛卡尔三重新转换一下:
var cartographic= _this.viewer.scene.globe.ellipsoid.cartesianToCartographic(positionC3);
var cartesian3 = Cesium.Cartesian3.fromDegrees(
Cesium.Math.toDegrees(cartographic.longitude),
Cesium.Math.toDegrees(cartographic.latitude),
Math.round((_this.viewer.scene.globe.getHeight(cartographic)) * 100) / 100
);
var position = Cesium.SceneTransforms.wgs84ToWindowCoordinates(_this.viewer.scene, cartesian3 )
用通过scene转换一遍的cartesian3再求屏幕坐标,就是准确的坐标