Cesium常用坐标转换(Cartesian3世界坐标、Cartesian2屏幕坐标、Cartographic(WGS84)弧度、经纬度)

发布时间 2023-12-31 22:48:41作者: Felix_Openmind
  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)