const handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
handler.setInputAction((movement) => {
// 从Cartesain2屏幕坐标获取Cartesain3世界坐标
// 根据单击的位置所拾取的要素类型不同
// 单击的位置要在球体否则转换为undefined
// 第一种方式: 获取场景坐标
let cartesian3Position01 = scene.pickPosition(movement.position)
console.log('cartesian3Position01::: ', cartesian3Position01)
// 第二种方式: 获取地表坐标
let ray = viewer.camera.getPickRay(movement.position);
// ray: 测试相交的射线,scene:当前场景
let cartesian3Position02 = viewer.scene.globe.pick(ray, viewer.scene);
console.log('cartesian3Position02::: ', cartesian3Position02)
// 第三种方式: 获取椭球面坐标
// 椭球面坐标参考椭球体的WGS-84体系,不包含地形、模型、倾斜摄影模型表面
let cartesian3Position03 = viewer.scene.camera.pickEllipsoid(movement.position);
console.log('cartesian3Position03::: ', cartesian3Position03)
// 从Cartesian3世界坐标获取WGS-84坐标(弧度表示)
let cartographic = Cesium.Cartographic.fromCartesian(cartesian3Position01);
console.log('WGS-84 position: ', cartographic);
// {
// "longitude": -1.9644396422943724,
// "latitude": 0.7562774920515126,
// "height": -265.2578173681123
// }
// 从WGS-84坐标获取经纬度坐标(弧度 转为 经纬度
let lat = Cesium.Math.toDegrees(cartographic.latitude);
let lng = Cesium.Math.toDegrees(cartographic.longitude);
let height = Cesium.Math.toDegrees(cartographic.height);
console.log('{lat, lng, height}::: ', {lat, lng, height})
// 经纬度坐标转为WGS-84弧度坐标
let cartographicPosition = Cesium.Cartographic.fromDegrees(lng, lat, height)
console.log('cartographicPosition:: ', cartographicPosition)
// =========== 经纬度坐标转为世界坐标Cartesian3
let cartesian3PositionFromDegrees = Cesium.Cartesian3.fromDegrees(lng, lat, height);
// =========== WGS84弧度坐标转为世界坐标Cartesian3
let cartesian3PositionFromWGS84 = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, cartographic.height);
console.log('cartesian3PositionFromDegrees::: ', cartesian3PositionFromDegrees)
console.log('cartesian3PositionFromWGS84::: ', cartesian3PositionFromWGS84)
}, Cesium.ScreenSpaceEventType.LEFT_CLICK)
Cesium常用坐标转换(Cartesian3世界坐标、Cartesian2屏幕坐标、Cartographic(WGS84)弧度、经纬度)
发布时间 2023-12-31 22:48:41作者: Felix_Openmind