坐标转换
经纬度:度 ≓ 弧度
ts
// 度 -> 弧度
const degrees = Cesium.Math.toRadians(degrees);
// 弧度 -> 度
const radians = Cesium.Math.toDegrees(radians);经纬度 ≓ 笛卡尔
ts
// 经纬度(度)-> 笛卡尔
const cartesian3 = Cesium.Cartesian3.fromDegrees(longitude, latitude, height);
// 经纬度(弧度)-> 笛卡尔
const cartesian3 = Cesium.Cartesian3.fromRadians(longitude, latitude, height);
// 笛卡尔 -> 经纬度(度)
const cartographic = Cesium.Cartographic.fromCartesian(cartesian3);
let lng = Cesium.Math.toDegrees(cartographic.longitude);
let lat = Cesium.Math.toDegrees(cartographic.latitude);
let height = cartographic.height;
// 笛卡尔 -> 经纬度(弧度)
const cartographic = Cesium.Cartographic.fromCartesian(cartesian3);屏幕坐标 ≓ 笛卡尔
ts
// 笛卡尔 -> 屏幕坐标
const cartesian2 = viewer.scene.cartesianToCanvasCoordinates(cartesian3);屏幕坐标并不能直接转为笛卡尔,一般需要通过拾取 API 进行拾取,有多种拾取方式
- scene.pickPosition 包含了地形、倾斜摄影表面、模型的坐标,使用时需要开启地形深度检测
ts
let cartesian3 = viewer.scene.pickPosition(cartesian2);- globe.pick 包含地形,不包括模型、倾斜摄影表面
ts
let ray = viewer.camera.getPickRay(cartesian2);
let cartesian3 = viewer.scene.globe.pick(ray, viewer.scene);- camera.pickEllipsoid 仅从地球椭球上拾取
ts
let cartesian3 = viewer.scene.camera.pickEllipsoid(cartesian2);