坐标

加事件

事件柄

this.drawhander = new Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas);

事件处理函数

 this.drawhander.setInputAction((movement) => {
   const position = this.viewerService.getPosition(movement.position, this.viewer);
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);

获取球心坐标系 的 坐标值 viewer.scene.pickPosition()

  /**
   * 获取经纬度值
   */
  getPosition(movement: {}, viewer?: any) {
    // const ray = this.viewer.camera.getPickRay(movement);
    // return this.viewer.scene.globe.pick(ray, this.viewer.scene);
    if (!this.viewer) this.viewer = viewer;
    if (!movement || !this.viewer) return;
    return this.viewer.scene.pickPosition(movement);
  }

鼠标位置

alt

返回的球心坐标系 坐标值,其实就是笛卡尔坐标系下的值 (x,y,z),坐标原点在球心

alt

空间坐标(笛卡尔坐标系(x,y,z)) 转化为 要用的 经纬度坐标系(longitude,latitude,height)

  /**
   * 世界坐标转经纬度
   * @return 经纬度值
   */
  cartesianToLonLat(cartesian: {}) {
    const cartographic = Cesium.Cartographic.fromCartesian(cartesian);
    return this.cartographicToLonLat(cartographic);
  }


  /**
   * 球心坐标(笛卡尔坐标(x,y,z))转经纬度值
   * @return 经纬度值
   */
  cartographicToLonLat(cartographic: {
    height: number;
    latitude: number;
    longitude: number;
  }) {
    // 弧度 转 度
    const lon = Cesium.Math.toDegrees(cartographic.longitude);
    const lat = Cesium.Math.toDegrees(cartographic.latitude);
    const height = cartographic.height;
    return {
      lon,
      lat,
      height
    };
  }

经纬度 反转化为 空间坐标系(笛卡尔坐标系)

  /**
   * 空间坐标 转 经纬度
   * @param cartesian 平面笛卡尔积坐标 position x,y,z
   * @returns [lon, lat] 经纬度数组
   */
  cartesian2LonLat(cartesian) {
    let cartographic: any;
    let lon: any;
    let lat: any;
    cartographic = Cesium.Cartographic.fromCartesian(cartesian);
    lon = Cesium.Math.toDegrees(cartographic.longitude);
    lat = Cesium.Math.toDegrees(cartographic.latitude);
    return [lon, lat];
  }

原文地址:https://www.cnblogs.com/telwanggs/p/11289681.html