1. 屏幕坐标到经纬度的转换
screenToGeoCoordinates(screenX, screenY, viewer)
{
let ellipsoid = viewer.scene.globe.ellipsoid
let cartesian = viewer.camera.pickEllipsoid(new Cesium.Cartesian2(screenX, screenY), ellipsoid)
if (!cartesian)
{
console.log('无法在屏幕坐标处找到交点')
return null
}
let cartographic = Cesium.Cartographic.fromCartesian(cartesian)
let latitude = Cesium.Math.toDegrees(cartographic.latitude)
let longitude = Cesium.Math.toDegrees(cartographic.longitude)
return { latitude: latitude, longitude: longitude }
}
2. 经纬度到屏幕坐标的转换
geoToScreenCoordinates(latitude, longitude, viewer)
{
let cartographic = Cesium.Cartographic.fromDegrees(longitude, latitude)
let cartesian = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, cartographic.height || 0)
let screenPosition = viewer.scene.cartesianToCanvasCoordinates(cartesian)
return { x: screenPosition.x, y: screenPosition.y }
}
使用示例
屏幕坐标转经纬度:
var screenX = 100;
var screenY = 200;
var geoCoordinates = screenToGeoCoordinates(screenX, screenY, viewer);
if (geoCoordinates) {
console.log("Latitude: " + geoCoordinates.latitude);
console.log("Longitude: " + geoCoordinates.longitude);
}
经纬度转屏幕坐标:
var latitude = 40.0;
var longitude = -75.0;
var screenCoordinates = geoToScreenCoordinates(latitude, longitude, viewer);
console.log("Screen X: " + screenCoordinates.x);
console.log("Screen Y: " + screenCoordinates.y);

说明
camera.pickEllipsoid 是用于从屏幕坐标获取与地球椭球体相交的点(即获取实际的地理位置),所以它可以有效替代 Cesium.Intersecting。- 如果点击的屏幕坐标没有与地球表面相交(比如在海洋或高空),它会返回
null,所以我们需要检查返回值。