Bootstrap

Cesium坐标转换

一、屏幕坐标转换

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

;