Skip to content

坐标转换

经纬度:度 ≓ 弧度

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);

MGis 地理三维库