From 7958e4049431c15ec51f2efa655a5cfe7cc32eff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=8F=E5=A4=A7=E8=83=86?= <1101282782@qq.com> Date: Mon, 11 Aug 2025 16:13:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9B=B2=E7=BA=BF=E5=8D=95?= =?UTF-8?q?=E4=BD=8D=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Obj/Base/CurvelineObject/_element.js | 13 +- src/Obj/Base/CurvelineObject/index.js | 319 +++++++++++++++++------ src/Obj/Base/PolylineObject/index.js | 51 ++-- 3 files changed, 274 insertions(+), 109 deletions(-) diff --git a/src/Obj/Base/CurvelineObject/_element.js b/src/Obj/Base/CurvelineObject/_element.js index 02124ea..cc8b89a 100644 --- a/src/Obj/Base/CurvelineObject/_element.js +++ b/src/Obj/Base/CurvelineObject/_element.js @@ -1,7 +1,7 @@ import { attributeElm, labelStyleElm1, labelStyleElm2 } from '../../Element/elm_html' function html(that) { - return ` + return `
@@ -9,22 +9,15 @@ function html(that) { 名称
-
+
- 原始长度: +
-
-
- 拟合长度: - -
-
-
diff --git a/src/Obj/Base/CurvelineObject/index.js b/src/Obj/Base/CurvelineObject/index.js index 8b946e1..0f4ddde 100644 --- a/src/Obj/Base/CurvelineObject/index.js +++ b/src/Obj/Base/CurvelineObject/index.js @@ -58,6 +58,7 @@ class CurvelineObject extends Base { this.options.extend = options.extend || false this.options['length-unit'] = options['length-unit'] || '米' this.options['fit-length-unit'] = options['fit-length-unit'] || '米' + this.options['words-name'] = options['words-name'] || '空间长度' this.options['extend-width'] = options['extend-width'] || options['extend-width'] === 0 ? options['extend-width'] @@ -116,6 +117,7 @@ class CurvelineObject extends Base { this.options.attributeType = options.attributeType || 'richText' this.operate = {} this.nodePoints = [] + this.unitNum = 0 this.Dialog = _Dialog if (!this.options.positions || this.options.positions.length < 2) { this._error = '线段最少需要两个坐标!' @@ -172,6 +174,8 @@ class CurvelineObject extends Base { set length(v) { this.options.length = v + //判断数值是否大于1000m + this._elms.length && this._elms.length.forEach(item => { item.value = v @@ -194,25 +198,60 @@ class CurvelineObject extends Base { return this.options['length-unit'] } set lengthUnit(v) { + this.unitNum++ this.options['length-unit'] = v this._elms.lengthUnit && this._elms.lengthUnit.forEach(item => { item.value = v }) if (this.options.lengthByMeter) { - switch (v) { - case '米': - this.length = this.options.lengthByMeter - break - case '千米': - this.length = (this.options.lengthByMeter / 1000).toFixed(5) - break - default: - this.length = this.options.lengthByMeter + if (this.unitNum > 2) { + switch (v) { + case '米': + this.length = this.noseToTail ? this.options.fitLengthByMeter : this.options.lengthByMeter + + break + case '千米': + this.length = this.noseToTail ? (this.options.fitLengthByMeter / 1000).toFixed(5) : (this.options.lengthByMeter / 1000).toFixed(5) + + break + default: + this.length = this.noseToTail ? this.options.fitLengthByMeter : this.options.lengthByMeter + + break + } + } else { + let length = this.noseToTail ? this.options.fitLengthByMeter : this.options.lengthByMeter + this.lengthUnit = length > 1000 || length == 1000 ? '千米' : '米' } } } + get wordsName() { + return this.options['words-name'] + } + set wordsName(v) { + this.options['words-name'] = v + this._elms.wordsName && + this._elms.wordsName.forEach(item => { + item.value = v + }) + + let _this = this + if (!this.noseToTail) { + this.computeDistance( + this.options.positions, + 2, + v + ).then(res => { + _this.options.lengthByMeter = res + _this.lengthUnit = this.options['length-unit'] + }) + } else { + let fromDegreesArray = this.renewPositions(this.options.positions) + } + } + get fitLengthUnit() { return this.options['fit-length-unit'] } @@ -310,8 +349,28 @@ class CurvelineObject extends Base { ) this.renewPolygon(fromDegreesArray) } + this.lengthUnit = this.options['length-unit'] + // if (v) { + // if (this.options.fitLengthByMeter > 1000 || this.options.fitLengthByMeter == 1000) { + // let dom = document.getElementsByClassName('input-select-unit')[1] + // dom && dom.querySelectorAll('dd')[1] && dom.querySelectorAll('dd')[1].click() + // } else { + // let dom = document.getElementsByClassName('input-select-unit')[1] + // dom && dom.querySelectorAll('dd')[0] && dom.querySelectorAll('dd')[0].click() + // } + + // } else { + // if (this.options.lengthByMeter > 1000 || this.options.lengthByMeter == 1000) { + // let dom = document.getElementsByClassName('input-select-unit')[1] + // dom && dom.querySelectorAll('dd')[1] && dom.querySelectorAll('dd')[1].click() + // } else { + // let dom = document.getElementsByClassName('input-select-unit')[1] + // dom && dom.querySelectorAll('dd')[0] && dom.querySelectorAll('dd')[0].click() + // } + // } } + get heightMode() { return this.options.heightMode ? this.options.heightMode : 0 } @@ -349,11 +408,11 @@ class CurvelineObject extends Base { break } - this.options.lengthByMeter = this.computeDistance2( - this.smoothHandle(this.options.positions), - 2, - ground - ) + // this.options.lengthByMeter = this.computeDistance2( + // this.smoothHandle(this.options.positions), + // 2, + // ground + // ) this.lengthUnit = this.lengthUnit this._elms.heightMode && (this._elms.heightMode.value = heightModeName) this._elms.heightModeObject && (this._elms.heightModeObject.legp_searchActive( @@ -1157,12 +1216,25 @@ class CurvelineObject extends Base { CurvelineObject.createLabel(that) // that.entity.polyline.positionsLngLat = positions that.renewPolygon(fromDegreesArray) - that.options.lengthByMeter = that.computeDistance2(that.smoothHandle(positions), 2, ground) - that.lengthUnit = that.options['length-unit'] - syncData(that.sdk, that.options.id) - if (that.options.show) { - setSplitDirection(0, that.options.id) - } + // that.options.lengthByMeter = that.computeDistance2(that.smoothHandle(positions), 2, ground) + // that.lengthUnit = that.options['length-unit'] + // syncData(that.sdk, that.options.id) + // if (that.options.show) { + // setSplitDirection(0, that.options.id) + // } + + that.computeDistance( + that.smoothHandle(positions), + 2, + that.options['words-name'] + ).then(res => { + that.options.lengthByMeter = res + that.lengthUnit = that.options['length-unit'] + syncData(that.sdk, that.options.id) + if (that.options.show) { + setSplitDirection(0, that.options.id) + } + }) // if (this.options['nose-to-tail']) { // let array = [] @@ -1389,6 +1461,50 @@ class CurvelineObject extends Base { }) } + let nameData = [ + { + name: '空间长度', + value: '空间长度' + }, + { + name: '投影长度', + value: '投影长度' + }, + { + name: '地表长度', + value: '地表长度' + } + ] + + let nameDataLegpObject = legp( + this._DialogObject._element.content.getElementsByClassName( + 'input-select-unit-box' + )[0], + '.input-select-unit' + ) + if (nameDataLegpObject) { + nameDataLegpObject.legp_search(nameData) + let nameDataLegpElm = this._DialogObject._element.content + .getElementsByClassName('input-select-unit')[0] + .getElementsByTagName('input')[0] + this._elms.wordsName = [nameDataLegpElm] + nameDataLegpElm.value = this.options['words-name'] + for (let i = 0; i < nameData.length; i++) { + if (nameData[i].value === nameDataLegpElm.value) { + nameDataLegpObject.legp_searchActive(nameData[i].value) + break + } + } + nameDataLegpElm.addEventListener('input', () => { + for (let i = 0; i < nameData.length; i++) { + if (nameData[i].value === nameDataLegpElm.value) { + this.wordsName = nameData[i].value + break + } + } + }) + } + // 原始长度单位 let unitData = [ { @@ -1405,12 +1521,13 @@ class CurvelineObject extends Base { this._DialogObject._element.content.getElementsByClassName( 'input-select-unit-box' )[0], - '.input-select-unit' + '.input-select-unit', + 1 ) if (unitDataLegpObject) { unitDataLegpObject.legp_search(unitData) let unitDataLegpElm = this._DialogObject._element.content - .getElementsByClassName('input-select-unit')[0] + .getElementsByClassName('input-select-unit')[1] .getElementsByTagName('input')[0] this._elms.lengthUnit = [unitDataLegpElm] unitDataLegpElm.value = this.options['length-unit'] @@ -1431,45 +1548,45 @@ class CurvelineObject extends Base { } // 拟合长度单位 - let fitUnitData = [ - { - name: '米', - value: '米' - }, - { - name: '千米', - value: '千米' - } - ] + // let fitUnitData = [ + // { + // name: '米', + // value: '米' + // }, + // { + // name: '千米', + // value: '千米' + // } + // ] - let fitUnitDataLegpObject = legp( - this._DialogObject._element.content.getElementsByClassName( - 'input-select-fit-unit-box' - )[0], - '.input-select-fit-unit' - ) - if (fitUnitDataLegpObject) { - fitUnitDataLegpObject.legp_search(fitUnitData) - let fitUnitDataLegpElm = this._DialogObject._element.content - .getElementsByClassName('input-select-fit-unit')[0] - .getElementsByTagName('input')[0] - this._elms.fitLengthUnit = [fitUnitDataLegpElm] - fitUnitDataLegpElm.value = this.options['fit-length-unit'] - for (let i = 0; i < fitUnitData.length; i++) { - if (fitUnitData[i].value === fitUnitDataLegpElm.value) { - fitUnitDataLegpObject.legp_searchActive(fitUnitData[i].value) - break - } - } - fitUnitDataLegpElm.addEventListener('input', () => { - for (let i = 0; i < fitUnitData.length; i++) { - if (fitUnitData[i].value === fitUnitDataLegpElm.value) { - this.fitLengthUnit = fitUnitData[i].value - break - } - } - }) - } + // let fitUnitDataLegpObject = legp( + // this._DialogObject._element.content.getElementsByClassName( + // 'input-select-fit-unit-box' + // )[0], + // '.input-select-fit-unit' + // ) + // if (fitUnitDataLegpObject) { + // fitUnitDataLegpObject.legp_search(fitUnitData) + // let fitUnitDataLegpElm = this._DialogObject._element.content + // .getElementsByClassName('input-select-fit-unit')[0] + // .getElementsByTagName('input')[0] + // this._elms.fitLengthUnit = [fitUnitDataLegpElm] + // fitUnitDataLegpElm.value = this.options['fit-length-unit'] + // for (let i = 0; i < fitUnitData.length; i++) { + // if (fitUnitData[i].value === fitUnitDataLegpElm.value) { + // fitUnitDataLegpObject.legp_searchActive(fitUnitData[i].value) + // break + // } + // } + // fitUnitDataLegpElm.addEventListener('input', () => { + // for (let i = 0; i < fitUnitData.length; i++) { + // if (fitUnitData[i].value === fitUnitDataLegpElm.value) { + // this.fitLengthUnit = fitUnitData[i].value + // break + // } + // } + // }) + // } let lineTypeData = [ { @@ -1848,22 +1965,74 @@ class CurvelineObject extends Base { // 计算长度 - let array = [] - for (let i = 0; i < fromDegreesArray.length; i += 3) { - array.push({ - lng: fromDegreesArray[i], - lat: fromDegreesArray[i + 1], - alt: fromDegreesArray[i + 2] + // let array = [] + // for (let i = 0; i < fromDegreesArray.length; i += 3) { + // array.push({ + // lng: fromDegreesArray[i], + // lat: fromDegreesArray[i + 1], + // alt: fromDegreesArray[i + 2] + // }) + // } + // this.options.fitLengthByMeter = this.computeDistance2( + // array, + // 2, + // ground + // ) + // this.fitLengthUnit = this.options['fit-length-unit'] + // this.options.lengthByMeter = this.computeDistance2(this.smoothHandle(positions), 2, ground) + // this.lengthUnit = this.options['length-unit'] + + + if ( + (this.options['nose-to-tail'] && + this.options['nose-to-tail'] !== 'false') || + (this.options.smooth && this.options.smooth !== 'false') + ) { + let array = [] + for (let i = 0; i < fromDegreesArray.length; i += 3) { + array.push({ + lng: fromDegreesArray[i], + lat: fromDegreesArray[i + 1], + alt: fromDegreesArray[i + 2] + }) + } + // this.options.fitLengthByMeter = this.computeDistance( + // array, + // 2, + // ground + // ) + let _this = this + this.computeDistance( + array, + 2, + this.options['words-name'] + ).then(res => { + _this.options.fitLengthByMeter = res + _this.lengthUnit = _this.options['length-unit'] + }) + } else { + let _this = this + this.computeDistance( + _this.smoothHandle(positions), + 2, + this.options['words-name'] + ).then(res => { + _this.options.fitLengthByMeter = res + _this.lengthUnit = _this.options['length-unit'] + }) } - this.options.fitLengthByMeter = this.computeDistance2( - array, + + let _this = this + this.computeDistance( + this.smoothHandle(positions), 2, - ground - ) - this.fitLengthUnit = this.options['fit-length-unit'] - this.options.lengthByMeter = this.computeDistance2(this.smoothHandle(positions), 2, ground) - this.lengthUnit = this.options['length-unit'] + this.options['words-name'] + ).then(res => { + _this.options.lengthByMeter = res + _this.lengthUnit = this.options['length-unit'] + }) + return fromDegreesArray } @@ -2035,7 +2204,7 @@ class CurvelineObject extends Base { )[0].value ) { this.options.attribute.vr.content.push({ - name: '全景图' , + name: '全景图', url: this._DialogObject._element.content.getElementsByClassName( 'vr_add' )[0].value @@ -2051,7 +2220,7 @@ class CurvelineObject extends Base { addAttributeRr(vr) { this.options.attribute.vr.content.push({ - name: '全景图' , + name: '全景图', url: vr }) this.attributeVr = this.options.attribute.vr.content diff --git a/src/Obj/Base/PolylineObject/index.js b/src/Obj/Base/PolylineObject/index.js index 3d67234..2401abb 100644 --- a/src/Obj/Base/PolylineObject/index.js +++ b/src/Obj/Base/PolylineObject/index.js @@ -287,14 +287,16 @@ class PolylineObject extends Base { 2, v ).then(res => { + // _this.options.lengthByMeter = res + // if (res > 1000 || res == 1000) { + // _this.length = (res / 1000).toFixed(5) + // _this.lengthUnit = '千米' + // } else { + // _this.length = res + // _this.lengthUnit = '米' + // } _this.options.lengthByMeter = res - if (res > 1000 || res == 1000) { - _this.length = (res / 1000).toFixed(5) - _this.lengthUnit = '千米' - } else { - _this.length = res - _this.lengthUnit = '米' - } + _this.lengthUnit = _this.options['length-unit'] }) } else { let fromDegreesArray = this.renewPositions(this.options.positions) @@ -479,24 +481,25 @@ class PolylineObject extends Base { ) this.renewPolygon(fromDegreesArray) } - if (v) { - if (this.options.fitLengthByMeter > 1000 || this.options.fitLengthByMeter == 1000) { - let dom = document.getElementsByClassName('input-select-unit')[1] - dom && dom.querySelectorAll('dd')[1] && dom.querySelectorAll('dd')[1].click() - } else { - let dom = document.getElementsByClassName('input-select-unit')[1] - dom && dom.querySelectorAll('dd')[0] && dom.querySelectorAll('dd')[0].click() - } + this.lengthUnit = this.options['length-unit'] + // if (v) { + // if (this.options.fitLengthByMeter > 1000 || this.options.fitLengthByMeter == 1000) { + // let dom = document.getElementsByClassName('input-select-unit')[1] + // dom && dom.querySelectorAll('dd')[1] && dom.querySelectorAll('dd')[1].click() + // } else { + // let dom = document.getElementsByClassName('input-select-unit')[1] + // dom && dom.querySelectorAll('dd')[0] && dom.querySelectorAll('dd')[0].click() + // } - } else { - if (this.options.lengthByMeter > 1000 || this.options.lengthByMeter == 1000) { - let dom = document.getElementsByClassName('input-select-unit')[1] - dom && dom.querySelectorAll('dd')[1] && dom.querySelectorAll('dd')[1].click() - } else { - let dom = document.getElementsByClassName('input-select-unit')[1] - dom && dom.querySelectorAll('dd')[0] && dom.querySelectorAll('dd')[0].click() - } - } + // } else { + // if (this.options.lengthByMeter > 1000 || this.options.lengthByMeter == 1000) { + // let dom = document.getElementsByClassName('input-select-unit')[1] + // dom && dom.querySelectorAll('dd')[1] && dom.querySelectorAll('dd')[1].click() + // } else { + // let dom = document.getElementsByClassName('input-select-unit')[1] + // dom && dom.querySelectorAll('dd')[0] && dom.querySelectorAll('dd')[0].click() + // } + // } } get smooth() {