/** * @name: index * @author: Administrator * @date: 2022-07-22 16:13 * @description:index * @update: 2022-07-22 16:13 */ import Measure from "../index"; import { Proj } from "../../Tools/proj"; import { getCoordinateSystem } from "../../Global/global"; class MeasureLocation extends Measure { /** * @constructor * @param sdk * @description 坐标测量 * */ constructor(sdk) { super(sdk, {text: ""}); this.defaultColor = "#f11515" this.locationID = this.randomString() this.position = new Cesium.Cartesian3() this.text = "" } static createLocation(that) { that.viewer.entities.add(new Cesium.Entity({ id: that.locationID, show: false, position: new Cesium.CallbackProperty(() => { return that.position }, false), label: { text: new Cesium.CallbackProperty(() => { return that.text }, false), //标注文字描述 font: '22px Microsoft YaHei', fillColor: new Cesium.Color.fromCssColorString(that.defaultColor), style: Cesium.LabelStyle.FILL_AND_OUTLINE, //标注的遮挡距离设置为100则视角与标注的距离大于100米时会有遮挡 // distanceDisplayCondition: this.distanceDisplayCondition, // scale: this.options.label.scale, horizontalOrigin: Cesium.HorizontalOrigin.LEFT, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, disableDepthTestDistance: Number.POSITIVE_INFINITY, pixelOffset: new Cesium.Cartesian2( -100, -50 ), // disableDepthTestDistance: this.disableDepthTestDistance, }, billboard: { image: that.getSourceRootPath() + "/img/location.png", color: Cesium.Color.fromCssColorString(`rgba(255,255,255,0.99)`), disableDepthTestDistance: Number.POSITIVE_INFINITY, // scaleByDistance: new Cesium.NearFarScalar( // 2000, // 1, // 1000000, // 0 // ), scale: 1, horizontalOrigin: Cesium.HorizontalOrigin.CENTER, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, width: 48, height: 48 } })) } static create_point(that) { let id = that.randomString() that.viewer.entities.add( new Cesium.Entity({ id: id, position: new Cesium.CallbackProperty(() => { return that.position }, false), billboard: { image: that.getSourceRootPath() + '/img/point.png', color: Cesium.Color.fromCssColorString(`rgba(255,255,255,0.99)`), verticalOrigin: Cesium.VerticalOrigin.BOTTOM, disableDepthTestDistance: Number.POSITIVE_INFINITY, color: Cesium.Color.WHITE.withAlpha(0.99) } }) ) return id } /** * 开始测量 */ start() { if (!YJ.Measure.GetMeasureStatus()) { super.start() this.cache_id = MeasureLocation.create_point(this) MeasureLocation.createLocation(this) let leftEvent = (movement, cartesian) => { this.position = cartesian let entity = this.viewer.entities.getById(this.locationID) if(entity) { entity.show = true } let p = this.cartesian3Towgs84(cartesian, this.viewer) let coordinateSystem = getCoordinateSystem() if(coordinateSystem==='EPSG:4326') { this.text = `经度:${Number(p.lng.toFixed(8))}\n纬度:${Number(p.lat.toFixed(8))}\n海拔:${Number(p.alt.toFixed(2))}` } else { let result = this.convert([{x: p.lng, y: p.lat, z: p.alt}], 'EPSG:4326', coordinateSystem) this.text = `x:${Number(result.points[0].x.toFixed(8))}\ny:${Number(result.points[0].y.toFixed(8))}\nz:${Number(result.points[0].z.toFixed(2))}` } this.end() } this.event.mouse_left(leftEvent) this.event.mouse_right((movement, cartesian) => { this.destroy() this.end() }) this.event.mouse_move((movement, cartesian) => { this.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y) let entity = this.viewer.entities.getById(this.locationID) if(entity) { entity.show = true } this.position = cartesian let p = this.cartesian3Towgs84(cartesian, this.viewer) let coordinateSystem = getCoordinateSystem() if(coordinateSystem==='EPSG:4326') { this.text = `经度:${Number(p.lng.toFixed(8))}\n纬度:${Number(p.lat.toFixed(8))}\n海拔:${Number(p.alt.toFixed(2))}` } else { let result = this.convert([{x: p.lng, y: p.lat, z: p.alt}], 'EPSG:4326', coordinateSystem) this.text = `x:${Number(result.points[0].x.toFixed(8))}\ny:${Number(result.points[0].y.toFixed(8))}\nz:${Number(result.points[0].z.toFixed(2))}` } }) 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.destroy() this.end() } else { leftEvent(pos, cartesian) } }) }) } } /** * 清除测量 */ destroy() { this.remove_entity(this.locationID) this.remove_entity(this.cache_id) super.destroy() } /** * 结束测量 */ end() { super.end() } } export default MeasureLocation