/*
* 量测分析类
* @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