一、屏幕坐标转换
1、屏幕坐标--二维笛卡尔坐标--世界坐标--经纬度
transPosition(ps){
// 屏幕坐标转换为二维笛卡尔坐标
coordinate = new Cesium.Cartesian2(ps.x, ps.y);
// 二维笛卡尔坐标转空间坐标
wordCoordinate = viewer.scene.camera.pickEllipsoid(
coordinate ,
viewer.scene.globe.ellipsoid
);
// 笛卡尔坐标转弧度
cartographic = Cesium.Cartographic.fromCartesian(
wordCoordinate,
viewer.scene.globe.ellipsoid,
new Cesium.Cartographic()
);
// Cesium.Math.toDegrees 将弧度转换成经纬度
lon = Cesium.Math.toDegrees(cartographic.longitude);
lat = Cesium.Math.toDegrees(cartographic.latitude);
}
二、鼠标事件坐标转换
1、鼠标移动事件转经纬度
mouseMove(){
viewer.screenSpaceEventHandler.setInputAction((arg) => {
// arg有startPosition与endPosition两个属性,即移动前后的位置信息:Cartesian2对象
// 屏幕坐标转笛卡尔坐标
const position = viewer.scene.camera.pickEllipsoid(
arg.endPosition,
viewer.scene.globe.ellipsoid
);
// 笛卡尔坐标转世界坐标(弧度)
let cartographic = Cesium.Cartographic.fromCartesian(
position,
viewer.scene.globe.ellipsoid,
new Cesium.Cartographic()
);
// 弧度转为角度(经纬度)
let lon = Cesium.Math.toDegrees(cartographic.longitude);
let lat = Cesium.Math.toDegrees(cartographic.latitude);
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
}
2、鼠标左键双击事件坐标转换
leftDoubleClick(){
// 添加用户输入监听范围(element)
let handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
// 处理用户输入事件
handler.setInputAction((event) => {
const position = viewer.scene.camera.pickEllipsoid(
event.position,
viewer.scene.globe.ellipsoid
);
// 笛卡尔坐标转弧度
let cartographic = Cesium.Cartographic.fromCartesian(
position,
viewer.scene.globe.ellipsoid,
new Cesium.Cartographic()
);
// Cesium.Math.toDegrees 弧度转度,将弧度转换成经纬度
let lon = Cesium.Math.toDegrees(cartographic.longitude);
let lat = Cesium.Math.toDegrees(cartographic.latitude);
}, Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
}