代码迁移

This commit is contained in:
zh
2025-07-03 13:54:01 +08:00
parent b04de8a084
commit 2a4da33e62
985 changed files with 358292 additions and 13 deletions

View File

@ -0,0 +1,290 @@
/**
* @name: index
* @author: Administrator
* @date: 2022-07-21 15:22
* @descriptionindex
* @update: 2022-07-21 15:22
*/
import Measure from "../index";
class MeasureTriangle extends Measure {
/**
* @constructor
* @param sdk
* @description 三角测量
* */
constructor(sdk) {
super(sdk);
}
cal_center(positions) {
let p1 = this.cartesian3Towgs84(positions[0], this.viewer)
let p2 = this.cartesian3Towgs84(positions[1], this.viewer)
let center = this.computeCenter([p1, p2]);
return Cesium.Cartesian3.fromDegrees(center.lng, center.lat, (p1.alt + p2.alt) / 2)
}
cal_distance(positions) {
let p1 = this.cartesian3Towgs84(positions[0], this.viewer)
let p2 = this.cartesian3Towgs84(positions[1], this.viewer)
let dis = this.computeDistance([p1, p2])
p1.alt = p1.alt.toFixed(2)
p2.alt = p2.alt.toFixed(2)
if (p1.alt === p2.alt) {//水平边
return dis
} else if (Number(dis) === 0.00) {//竖直边
return Math.abs(p1.alt - p2.alt).toFixed(2)
} else {//斜边
return Math.sqrt(dis * dis + Math.pow(Math.abs(p1.alt - p2.alt).toFixed(2), 2)).toFixed(2)
}
}
createPolyline(id) {
let obj = this.id_map.get(id)
this.viewer.entities.add(new Cesium.Entity({
id,
position: new Cesium.CallbackProperty(() => {
if (obj.positions.length === 2)
return this.cal_center(obj.positions)
else
return Cesium.Cartesian3()
}, false),
label: {
text: new Cesium.CallbackProperty(() => {
if (obj.positions.length === 2)
return this.cal_distance(obj.positions) + "米"
else
return "0米"
}, 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, -10),
disableDepthTestDistance: Number.POSITIVE_INFINITY,
},
polyline: {
positions: new Cesium.CallbackProperty(() => {
return obj.positions
}, false),
width: 2,
material: Cesium.Color.YELLOW,
zIndex: 99999999
}
}))
this.ids.push(id)
}
create_angle_label(positions1, positions2, id, type) {
let entity = new Cesium.Entity({
id,
position: new Cesium.CallbackProperty(() => {
if (positions1.length === 2)
return this.cal_point(positions1, positions2)
else
return Cesium.Cartesian3()
}),
label: {
text: new Cesium.CallbackProperty(() => {
if (positions1.length === 2)
return this.cal_angle(positions1, positions2, type) + "°"
else
return "0°"
}, 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(15, -10),
}
})
this.viewer.entities.add(entity)
}
cal_point(positions1, positions2) {
for (let i = 0; i < positions1.length; i++) {
for (let j = 0; j < positions2.length; j++) {
if (positions1[i].x === positions2[j].x &&
positions1[i].y === positions2[j].y &&
positions1[i].z === positions2[j].z
) {
return positions1[i]
}
}
}
}
cal_angle(id1, id2, type) {
if (type === 1) {//水平&竖直
return 90
} else if (type === 2 || type === 3) {//水平&斜边 竖直&斜边
let positions1 = this.id_map.get(id1).positions
let positions2 = this.id_map.get(id2).positions
let p1 = this.cartesian3Towgs84(positions1[0], this.viewer)
let p2 = this.cartesian3Towgs84(positions1[1], this.viewer)
let shuiping = this.computeDistance([p2, p1])
let p3 = this.cartesian3Towgs84(positions2[0], this.viewer)
let p4 = this.cartesian3Towgs84(positions2[1], this.viewer)
let d = this.computeDistance([p3, p4])
let h = Math.abs(p3.alt - p4.alt)
let x = Math.sqrt(Math.pow(h, 2) + Math.pow(d, 2))
if (shuiping == 0.00) {
shuiping = Math.abs(p2.alt - p1.alt)
}
return (Math.acos(shuiping / x) * 180 / Math.PI).toFixed(2)
}
}
/**
* 开始测量
*/
start() {
if (!YJ.Measure.GetMeasureStatus()) {
super.start()
this.positions = []
this.cachePositions = []
let shuiping_line_id = this.randomString();//水平线
let shuizhi_line_id = this.randomString();//竖直边
let xiebian_line_id = this.randomString();//斜边
let angle1 = this.randomString();//角度1
let angle2 = this.randomString();//角度2
let angle3 = this.randomString();//角度3
let xiebian_line_positions = [];//斜边
this.id_map = new Map()
let first_point = {}
this.id_map.set(xiebian_line_id, {positions: []})
this.id_map.set(shuiping_line_id, {positions: []})
this.id_map.set(shuizhi_line_id, {positions: []})
let leftEvent = (movement, car) => {
xiebian_line_positions.push(car)
if (this.ids.length === 0) {//创建三角形
first_point = this.cartesian3Towgs84(car, this.viewer)
this.createPolyline(shuiping_line_id,)
this.createPolyline(shuizhi_line_id,)
this.createPolyline(xiebian_line_id,)
// this.cal_angle(shuiping_line_id, shuizhi_line_id, 1)
// this.cal_angle(shuiping_line_id, xiebian_line_id, 2)
// this.cal_angle(shuizhi_line_id, xiebian_line_id, 3)
// this.ids.push(shuiping_line_id)
// this.ids.push(shuizhi_line_id)
// this.ids.push(xiebian_line_id)
}
this.ids.push(this.create_point(car))
this.tip.setPosition(car, movement.position.x, movement.position.y)
// // 隐藏斜边文字
// let xiebian = this.id_map.get(xiebian_line_id)
// let xbEntity = this.viewer.entities.getById(xiebian_line_id)
// if(xbEntity) {
// xbEntity.label.show = false
// }
if (xiebian_line_positions.length) {
// xiebian.positions = xiebian_line_positions.concat(car)
let p = this.cartesian3Towgs84(car, this.viewer)
let shuzhi = this.id_map.get(shuizhi_line_id)
let shuiping = this.id_map.get(shuiping_line_id)
if (p.alt < first_point.alt) {
shuzhi.positions[0] = car
shuzhi.positions[1] = Cesium.Cartesian3.fromDegrees(p.lng, p.lat, first_point.alt)
shuiping.positions[0] = Cesium.Cartesian3.fromDegrees(p.lng, p.lat, first_point.alt)
shuiping.positions[1] = Cesium.Cartesian3.fromDegrees(first_point.lng, first_point.lat, first_point.alt)
} else {
shuzhi.positions[0] = Cesium.Cartesian3.fromDegrees(first_point.lng, first_point.lat, p.alt)
shuzhi.positions[1] = car
shuiping.positions[0] = Cesium.Cartesian3.fromDegrees(first_point.lng, first_point.lat, p.alt)
shuiping.positions[1] = Cesium.Cartesian3.fromDegrees(first_point.lng, first_point.lat, first_point.alt)
}
// shuizhi.positions = shuizhi_positions
}
if (xiebian_line_positions.length === 2) {
this.end()
}
}
this.event.mouse_left(leftEvent)
this.event.mouse_move((movement, car) => {
this.tip.setPosition(car, movement.endPosition.x, movement.endPosition.y)
let xiebian = this.id_map.get(xiebian_line_id)
if (xiebian_line_positions.length) {
xiebian.positions = xiebian_line_positions.concat(car)
let p = this.cartesian3Towgs84(car, this.viewer)
let shuzhi = this.id_map.get(shuizhi_line_id)
let shuiping = this.id_map.get(shuiping_line_id)
if (p.alt < first_point.alt) {
shuzhi.positions[0] = car
shuzhi.positions[1] = Cesium.Cartesian3.fromDegrees(p.lng, p.lat, first_point.alt)
shuiping.positions[0] = Cesium.Cartesian3.fromDegrees(p.lng, p.lat, first_point.alt)
shuiping.positions[1] = Cesium.Cartesian3.fromDegrees(first_point.lng, first_point.lat, first_point.alt)
} else {
shuzhi.positions[0] = Cesium.Cartesian3.fromDegrees(first_point.lng, first_point.lat, p.alt)
shuzhi.positions[1] = car
shuiping.positions[0] = Cesium.Cartesian3.fromDegrees(first_point.lng, first_point.lat, p.alt)
shuiping.positions[1] = Cesium.Cartesian3.fromDegrees(first_point.lng, first_point.lat, first_point.alt)
}
// shuizhi.positions = shuizhi_positions
}
})
this.event.mouse_right((movement, car) => {
this.end()
})
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()
}
else {
leftEvent(pos, cartesian)
}
})
})
}
}
/**
* 结束测量
*/
end() {
super.end();
}
/**
* 清除测量
*/
destroy() {
super.destroy()
}
}
export default MeasureTriangle