core/analysis/Measurement.js

/*
 * 量测分析类
 * @Author: jianlei wang
 * @Date: 2024-02-04 15:36:19
 * @Last Modified by: jianlei wang
 * @Last Modified time: 2024-09-13 11:09:33
 */

import { Cesium } from '../../../namespace'
import { resetGlobeHandler } from '../../utils/Handler'
import {
  areaMeasure,
  azimuthMeasure,
  distanceMeasure,
  heightMeasure,
  slopeAngleMeasure,
  triangleMeasure,
  volumeMeasure,
} from '../../utils/Measure'
/**
 * 空间分析主类
 * @class
 */
class Measurement {
  /**
   * 构造函数
   * @param {Object} viewer - 地图场景对象
   */
  constructor(viewer) {
    this._viewer = viewer
    /**
     * 空间量测集合,Entity类型,借助parent管理
     * @type {Object}
     */
    this._collection = this._viewer.entities.add(
      new Cesium.Entity({ id: 'deja_vu3d-measure-object-collection' })
    )
  }

  /**
   * 距离量测
   * @param {String} type  -量测类型,line:空间,project:投影,onground:地表,elliptic:椭球
   * @param {measureCallback} callback - 可选:回调函数
   */
  distance(type, callback) {
    const handler = resetGlobeHandler(this._viewer)
    distanceMeasure(this._viewer, type, this._collection, handler, callback)
  }

  /**
   * 面积量测
   * @param {String} type - 量测类型,line:空间,project:投影,onground:地表,elliptic:椭球
   * @param {measureCallback} callback - 可选:回调函数
   */
  area(type, callback) {
    const handler = resetGlobeHandler(this._viewer)
    areaMeasure(this._viewer, type, this._collection, handler, callback)
  }

  /**
   * 高差量测
   * @param {measureCallback} callback - 可选:回调函数
   */
  height(callback) {
    const handler = resetGlobeHandler(this._viewer)
    heightMeasure(this._viewer, this._collection, handler, callback)
  }

  /**
   * 三角量测
   * @param {triangleCallback} callback - 可选:回调函数
   */
  triangle(callback) {
    const handler = resetGlobeHandler(this._viewer)
    triangleMeasure(this._viewer, this._collection, handler, callback)
  }

  /**
   * 方位角量测
   * @param {triangleCallback} callback - 可选:回调函数
   */
  azimuth(callback) {
    const handler = resetGlobeHandler(this._viewer)
    azimuthMeasure(this._viewer, this._collection, handler, callback)
  }

  /**
   * 坡角量测
   * @param {triangleCallback} callback - 可选:回调函数
   */
  slopeAngle(callback) {
    const handler = resetGlobeHandler(this._viewer)
    slopeAngleMeasure(this._viewer, this._collection, handler, callback)
  }

  /**
   * 体积量测
   * @param {volumeCallback} callback - 可选:回调函数
   */
  volume(callback) {
    const handler = resetGlobeHandler(this._viewer)
    volumeMeasure(this._viewer, this._collection, handler, callback)
  }

  /**
   * 清除所有量测结果
   */
  removeAll() {
    this._collection._children.forEach((ele) => {
      this._viewer.entities.remove(ele)
    })
    this._collection._children = []
  }
}
export default Measurement