Cesium的坐标系转换

113 阅读1分钟

一.屏幕坐标

鼠标点击Canvas画布。 Canvas中,默认的坐标系统是以画布的左上角为坐标原点(0, 0),水平向右为X轴,垂直向下为Y轴,以像素为单位。

1915981033-5c4e764c6357e.png

笛卡尔平面坐标

new Cesium.Cartesian2(x, y)

二.笛卡尔空间直角坐标

a8ec8a13632762d0d57d6e89abec08fa513dc641.jfif

new Cesium.Cartesian3(x, y, z)

三.地理坐标

v2-3ec688ec92767666f006753c5a5a3949_r.jpg

new Cesium.Cartographic(longitude, latitude, height)

代码示例

const hander = new Cesium.ScreenSpaceEventHandlar(viewer.scene.canvas)
let windowPosition
hander.setInputAction((event) => {
  // 绑定鼠标左键单击事件 获取鼠标点击的windowPosition
  windowPosition = event.position
}, Cesium.ScreenSpaceEventType.LEFT_CLICK)

  
// 三维模式下(笛卡尔空间直角坐标)
const ray = viewer.camera.getPickRay(windowPosition)
const cartesian = viewer.scene.globe.pick(ray, viewer.scene)

// 二维模式下(笛卡尔空间直角坐标)
const cartesian = scene.camera.pickEllipsoid(position, scene.globe.ellipsoid)

// 笛卡尔空间直角坐标转换为屏幕坐标
const pick = Cesium.SceneTransforms.wgs84ToWindowCoordinates(viewer.scene, cartesian)

// 笛卡尔空间直角坐标转换为地理坐标(弧度制)
const cartographic = Cesium.Cartographic.fromCartesian(cartesian)

// 地理坐标(弧度制)转换为笛卡尔空间直角坐标
const postion = Cesium.Cartographic.fromRadians(longitude, latitude, height)

// 笛卡尔空间直角坐标转换为地理坐标(经纬度)
const cartographic = Cesium.Cartographic.fromCartesian(cartesian)
const lat = Cesium.Math.toDegrees(cartographic.latitude)
const lng = Cesium.Math.toDegrees(cartographic.longitude)
const height = cartographic.height

//地理坐标(经纬度)转换为笛卡尔空间直角坐标
const position = Cesium.Cartesian3.fromDegrees(longitude, latitude, height)

// 度数与弧度互转 
Cesium.Math.toDegrees(radians) 
Cesium.Math.toRadians(degrees)