/** * @name: index * @author: Administrator * @date: 2022-07-22 17:15 * @description:index * @update: 2022-07-22 17:15 */ import Measure from "../index"; class MeasureHeight extends Measure { /** * @constructor * @param sdk * @description 高度测量 * */ constructor(sdk) { super(sdk, {text: "左键开始,右键取消"}); } static create_polygon(that) { let id = that.randomString() let a = that.viewer.entities.add(new Cesium.Entity({ id, billboard: { image: that.getSourceRootPath() + '/img/point.png', verticalOrigin: Cesium.VerticalOrigin.BOTTOM, disableDepthTestDistance: Number.POSITIVE_INFINITY, color: Cesium.Color.WHITE.withAlpha(0.99) }, position: new Cesium.CallbackProperty(() => { return that.position }, false), label: { text: new Cesium.CallbackProperty(() => { return that.text }, false), scale: 1, // fillColor: Cesium.Color.RED, font: 'normal 20px MicroSoft YaHei', verticalOrigin: Cesium.VerticalOrigin.BOTTOM, style: Cesium.LabelStyle.FILL_AND_OUTLINE, pixelOffset: new Cesium.Cartesian2(0, -15), disableDepthTestDistance: Number.POSITIVE_INFINITY, }, polyline: { positions: new Cesium.CallbackProperty(e => { return that.positions; }, false), width: 2, material: Cesium.Color.YELLOW, zIndex: 99999999 }, ellipse: { height: new Cesium.CallbackProperty(() => { return that.height + that.firstpoint.alt; }, false), semiMinorAxis: new Cesium.CallbackProperty(e => { return that.circleRadius; }, false), semiMajorAxis: new Cesium.CallbackProperty(e => { return that.circleRadius; }, false), material: new Cesium.Color.fromCssColorString(that.defaultColor) }, })) return id } static create_point(that, cartesian, option = {}) { let id = that.randomString() let p = that.cartesian3Towgs84(cartesian, that.viewer) let params = { id: id, position: Cesium.Cartesian3.fromDegrees(p.lng, p.lat, p.alt), billboard: { image: that.getSourceRootPath() + '/img/point.png', verticalOrigin: Cesium.VerticalOrigin.BOTTOM, disableDepthTestDistance: Number.POSITIVE_INFINITY, color: Cesium.Color.WHITE.withAlpha(0.99) } } if (option.label) { params.label = { text: option.label.text, scale: 1, // fillColor: Cesium.Color.fromCssColorString("#06eee5"), font: 'normal 20px MicroSoft YaHei', verticalOrigin: Cesium.VerticalOrigin.BOTTOM, style: Cesium.LabelStyle.FILL_AND_OUTLINE, pixelOffset: new Cesium.Cartesian2(0, -15), } } that.viewer.entities.add( new Cesium.Entity(params) ) return id } /** * 开始测量 */ start() { if (!YJ.Measure.GetMeasureStatus()) { super.start() this.positions = [] this.position = new Cesium.Cartesian3() this.height = 0 this.text = "" this.circleRadius = 0 let count = 0; this.firstpoint = null let leftEvent = (movement, cartesian) => { if (this.firstpoint === null) { this.positions.push(cartesian) this.firstpoint = this.cartesian3Towgs84(cartesian, this.viewer) this.ids.push(MeasureHeight.create_polygon(this)) this.ids.push(MeasureHeight.create_point(this, cartesian)) } count++ this.tip.setPosition(cartesian, movement.position.x, movement.position.y) if (count === 2) { if (this.firstpoint) { let cur_point = this.cartesian3Towgs84(cartesian, this.viewer) this.positions[1] = Cesium.Cartesian3.fromDegrees(this.firstpoint.lng, this.firstpoint.lat, cur_point.alt) this.positions[2] = cartesian this.position = this.positions[1] this.circleRadius = this.computeDistance2([this.firstpoint, cur_point]) this.height = Number((cur_point.alt - this.firstpoint.alt).toFixed(2)) this.text = "相对高度:" + this.height + " 米" this.tip.set_text("左键完成,右键取消;半径:" + this.circleRadius + " 米") } this.ids.push(MeasureHeight.create_point(this, cartesian, {label: {text: "半径:" + this.circleRadius + " 米"}})) this.end() } } this.event.mouse_left(leftEvent) this.event.mouse_move((movement, cartesian) => { this.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y) if (this.firstpoint) { let cur_point = this.cartesian3Towgs84(cartesian, this.viewer) this.positions[1] = Cesium.Cartesian3.fromDegrees(this.firstpoint.lng, this.firstpoint.lat, cur_point.alt) this.positions[2] = cartesian this.position = this.positions[1] this.circleRadius = this.computeDistance2([this.firstpoint, cur_point]) this.height = Number((cur_point.alt - this.firstpoint.alt).toFixed(2)) this.text = "相对高度:" + this.height + " 米" this.tip.set_text("左键完成,右键取消;半径:" + this.circleRadius + " 米") } }) this.event.mouse_right((movement, cartesian) => { this.end() this.destroy() }) this.event.gesture_pinck_start((movement, cartesian) => { let startTime = new Date() let pos = { position: { x: (movement.position1.x + movement.position2.x) / 2, y: (movement.position1.y + movement.position2.y) / 2 } } this.event.gesture_pinck_end(() => { let endTime = new Date() if (endTime - startTime >= 500) { // 长按取消 this.end() this.destroy() } else { leftEvent(pos, cartesian) } }) }) } } /** * 结束测量 */ end() { super.end() } /** * 清除测量 */ destroy() { super.destroy() } } export default MeasureHeight