This commit is contained in:
2025-11-12 17:34:53 +08:00
parent b4fd967930
commit ae84184bf8
3 changed files with 120 additions and 13 deletions

View File

@ -384,13 +384,15 @@ class Submerge extends Tools {
move() { move() {
if (this.TweenAnimate) { // if (this.TweenAnimate) {
TWEEN.remove(this.TweenAnimate) // TWEEN.remove(this.TweenAnimate)
} // }
if (!this.TweenAnimate) {
let totalTime = ((this.options.maxWaterLevel - this.options.minWaterLevel) / this.options.risingSpeed) * 1000 let totalTime = ((this.options.maxWaterLevel - this.options.minWaterLevel) / this.options.risingSpeed) * 1000
this.TweenAnimate = new TWEEN.Tween({ waterLevel: this.options.minWaterLevel }).to({ waterLevel: this.options.maxWaterLevel }, totalTime).delay(this.delay).easing(TWEEN.Easing.Linear.None).onUpdate(async (r, a) => { this.TweenAnimate = new TWEEN.Tween({ waterLevel: this.options.minWaterLevel }).to({ waterLevel: this.options.maxWaterLevel }, totalTime).delay(this.delay).easing(TWEEN.Easing.Linear.None).onUpdate(async (r, a) => {
this.currentWaterLaver = r.waterLevel this.currentWaterLaver = r.waterLevel
}).start() }).start()
}
// let contentElm = this._DialogObject._element.body // let contentElm = this._DialogObject._element.body
// let pauseBtn = contentElm.getElementsByClassName('pause')[0]; // let pauseBtn = contentElm.getElementsByClassName('pause')[0];
// let startBtn = contentElm.getElementsByClassName('start')[0]; // let startBtn = contentElm.getElementsByClassName('start')[0];
@ -409,9 +411,9 @@ class Submerge extends Tools {
this.TweenAnimate = new TWEEN.Tween({ waterLevel: this.options.minWaterLevel }).to({ waterLevel: this.options.maxWaterLevel }, totalTime).delay(this.delay).easing(TWEEN.Easing.Linear.None).onUpdate(async (r, a) => { this.TweenAnimate = new TWEEN.Tween({ waterLevel: this.options.minWaterLevel }).to({ waterLevel: this.options.maxWaterLevel }, totalTime).delay(this.delay).easing(TWEEN.Easing.Linear.None).onUpdate(async (r, a) => {
this.currentWaterLaver = r.waterLevel this.currentWaterLaver = r.waterLevel
}).start() }).start()
if (isPaused) { // if (isPaused) {
this.pause() this.pause()
} // }
} }
start() { start() {

View File

@ -43,7 +43,7 @@ class ViewShedStage extends Tools {
this.options = {} this.options = {}
this.options.viewPosition = options.viewPosition; this.options.viewPosition = options.viewPosition;
this.options.viewPositionEnd = options.viewPositionEnd; this.options.viewPositionEnd = options.viewPositionEnd;
this.options.horizontalViewAngle = (options.horizontalViewAngle || options.horizontalViewAngle === 0) ? options.horizontalViewAngle : 90.0; this.options.horizontalViewAngle = (options.horizontalViewAngle || options.horizontalViewAngle === 0) ? options.horizontalViewAngle : 30.0;
this.options.verticalViewAngle = (options.verticalViewAngle || options.verticalViewAngle === 0) ? options.verticalViewAngle : 60.0; this.options.verticalViewAngle = (options.verticalViewAngle || options.verticalViewAngle === 0) ? options.verticalViewAngle : 60.0;
this.options.visibleAreaColor = options.visibleAreaColor || '#008000'; this.options.visibleAreaColor = options.visibleAreaColor || '#008000';
this.options.invisibleAreaColor = options.invisibleAreaColor || '#FF0000'; this.options.invisibleAreaColor = options.invisibleAreaColor || '#FF0000';
@ -182,7 +182,7 @@ class ViewShedStage extends Tools {
return pitch return pitch
} }
static create(that) { static create(that, callBack) {
that.destroy() that.destroy()
let count = 0; let count = 0;
if (!YJ.Measure.GetMeasureStatus()) { if (!YJ.Measure.GetMeasureStatus()) {
@ -201,6 +201,7 @@ class ViewShedStage extends Tools {
that.ids.push(ViewShedStage.create_point(that, cartesian)) that.ids.push(ViewShedStage.create_point(that, cartesian))
that.end() that.end()
that.update() that.update()
callBack(true)
} }
}) })
that.event.mouse_move((movement, cartesian) => { that.event.mouse_move((movement, cartesian) => {
@ -212,6 +213,7 @@ class ViewShedStage extends Tools {
}) })
that.ids = [] that.ids = []
that.end() that.end()
callBack(false)
}) })
that.event.gesture_pinck_start((movement, cartesian) => { that.event.gesture_pinck_start((movement, cartesian) => {
let startTime = new Date() let startTime = new Date()
@ -223,6 +225,7 @@ class ViewShedStage extends Tools {
}) })
that.ids = [] that.ids = []
that.end() that.end()
callBack(false)
} }
}) })
}) })
@ -232,6 +235,7 @@ class ViewShedStage extends Tools {
text: '上一次测量未结束', text: '上一次测量未结束',
type: 'warning', type: 'warning',
}); });
callBack(false)
} }
@ -247,8 +251,8 @@ class ViewShedStage extends Tools {
this.tip = null this.tip = null
this.event = null this.event = null
} }
draw() { draw(callBack) {
ViewShedStage.create(this) ViewShedStage.create(this, callBack)
} }
static create_point(that, cartesian) { static create_point(that, cartesian) {

View File

@ -1545,6 +1545,107 @@ class Tools {
let distance = Cesium.Cartesian3.distance(point, centerDegress) let distance = Cesium.Cartesian3.distance(point, centerDegress)
return distance return distance
} }
/**
* Web墨卡托坐标转WGS84经纬度
* @param {number} x - 墨卡托X坐标
* @param {number} y - 墨卡托Y坐标
* @returns {Array} [经度, 纬度]
*/
mercatorToWGS84(x, y) {
// 地球周长的一半
const earthHalfCircumference = 20037508.34
// 计算经度
const lon = (x / earthHalfCircumference) * 180
// 计算纬度(包含反双曲正切变换)
let lat = (y / earthHalfCircumference) * 180
lat = (180 / Math.PI) * (2 * Math.atan(Math.exp((lat * Math.PI) / 180)) - Math.PI / 2)
return [lon, lat]
}
/**
* CGCS2000 3度带坐标转WGS84经纬度
* @param {number} x - CGCS2000 X坐标不含带号
* @param {number} y - CGCS2000 Y坐标
* @param {number} centralMeridian - 中央经线如120
* @returns {Array} [经度, 纬度]
*/
convertCGCStoWGS84(x, y, centralMeridian) {
// 定义坐标系参数
const wgs84 = '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'
const cgcs2000 =
'+proj=tmerc +lat_0=0 +lon_0=' +
centralMeridian +
' +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs'
// 执行坐标转换
const point = proj4(cgcs2000, wgs84, [x, y]);
return point;
}
/**
* 提取带号并转换CGCS2000坐标到WGS84
* @param {number} xWithZone - 带代号的X坐标如40543210
* @param {number} y - Y坐标
* @returns {Array} [经度, 纬度]
*/
convertCGCSToWGS84WithZone(xWithZone, y) {
// 将X坐标转为字符串以提取带号
const xStr = xWithZone.toString();
// 提取带号前2位和实际X坐标
const zoneNumber = parseInt(xStr.substring(0, 2));
const actualX = parseInt(xStr.substring(2));
// 计算中央经线× 带号
const centralMeridian = zoneNumber * 3;
// 定义坐标系参数
const wgs84 = '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs';
const cgcs2000 = `+proj=tmerc +lat_0=0 +lon_0=${centralMeridian} +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs`;
// 执行坐标转换
const point = proj4(cgcs2000, wgs84, [actualX, y]);
return point;
}
/**
* CGCS2000六度带坐标转WGS84经纬度
* @param {number} x - CGCS2000 X坐标无带号
* @param {number} y - CGCS2000 Y坐标
* @param {number} centralMeridian - 中央经线如117
* @returns {Array} [经度, 纬度]
*/
convertCGCS2000_6ToWGS84(x, y, centralMeridian) {
// 定义坐标系参数
const wgs84 = '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs';
const cgcs2000_6 = '+proj=tmerc +lat_0=0 +lon_0=' + centralMeridian + ' +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs';
// 执行坐标转换
const point = proj4(cgcs2000_6, wgs84, [x, y]);
return point;
}
convertCGCS2000_6ToWGS84WithZone(xWithZone, y) {
// 将X坐标转为字符串以提取带号
const xStr = xWithZone.toString();
// 提取带号前2位
const zoneNumber = parseInt(xStr.substring(0, 2));
// 计算中央经线:六度带中央经线 = 带号 × 6 - 3
const centralMeridian = zoneNumber * 6 - 3;
// 实际X坐标去除带号
const actualX = parseInt(xStr.substring(2));
// 定义坐标系参数
const wgs84 = '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs';
const cgcs2000_6 = '+proj=tmerc +lat_0=0 +lon_0=' + centralMeridian + ' +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs';
// 执行坐标转换
const point = proj4(cgcs2000_6, wgs84, [actualX, y]);
return point;
}
} }
export default Tools export default Tools