添加曲线单位修改

This commit is contained in:
2025-08-11 16:13:44 +08:00
parent d47ab3715d
commit 7958e40494
3 changed files with 274 additions and 109 deletions

View File

@ -1,7 +1,7 @@
import { attributeElm, labelStyleElm1, labelStyleElm2 } from '../../Element/elm_html' import { attributeElm, labelStyleElm1, labelStyleElm2 } from '../../Element/elm_html'
function html(that) { function html(that) {
return ` return `
<span class="custom-divider"></span> <span class="custom-divider"></span>
<div class="div-item"> <div class="div-item">
<div class="row" style="align-items: flex-start;"> <div class="row" style="align-items: flex-start;">
@ -9,22 +9,15 @@ function html(that) {
<span class="label">名称</span> <span class="label">名称</span>
<input class="input" maxlength="40" type="text" @model="name"> <input class="input" maxlength="40" type="text" @model="name">
</div> </div>
<div class="col" style="flex: 0 0 54%;"> <div class="col" style="flex: 0 0 56%;">
<div> <div>
<div class="row"> <div class="row">
<div class="col input-select-unit-box"> <div class="col input-select-unit-box">
<span class="label">原始长度:</span> <div class="input-select-unit"></div>
<input class="input input-text" readonly="readonly" type="text" style="flex: 0 0 130px;" @model="length"> <input class="input input-text" readonly="readonly" type="text" style="flex: 0 0 130px;" @model="length">
<div class="input-select-unit"></div> <div class="input-select-unit"></div>
</div> </div>
</div> </div>
<div class="row">
<div class="col input-select-fit-unit-box">
<span class="label">拟合长度:</span>
<input class="input input-text" readonly="readonly" type="text" style="flex: 0 0 130px;" @model="fitLength">
<div class="input-select-fit-unit"></div>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -58,6 +58,7 @@ class CurvelineObject extends Base {
this.options.extend = options.extend || false this.options.extend = options.extend || false
this.options['length-unit'] = options['length-unit'] || '米' this.options['length-unit'] = options['length-unit'] || '米'
this.options['fit-length-unit'] = options['fit-length-unit'] || '米' this.options['fit-length-unit'] = options['fit-length-unit'] || '米'
this.options['words-name'] = options['words-name'] || '空间长度'
this.options['extend-width'] = this.options['extend-width'] =
options['extend-width'] || options['extend-width'] === 0 options['extend-width'] || options['extend-width'] === 0
? options['extend-width'] ? options['extend-width']
@ -116,6 +117,7 @@ class CurvelineObject extends Base {
this.options.attributeType = options.attributeType || 'richText' this.options.attributeType = options.attributeType || 'richText'
this.operate = {} this.operate = {}
this.nodePoints = [] this.nodePoints = []
this.unitNum = 0
this.Dialog = _Dialog this.Dialog = _Dialog
if (!this.options.positions || this.options.positions.length < 2) { if (!this.options.positions || this.options.positions.length < 2) {
this._error = '线段最少需要两个坐标!' this._error = '线段最少需要两个坐标!'
@ -172,6 +174,8 @@ class CurvelineObject extends Base {
set length(v) { set length(v) {
this.options.length = v this.options.length = v
//判断数值是否大于1000m
this._elms.length && this._elms.length &&
this._elms.length.forEach(item => { this._elms.length.forEach(item => {
item.value = v item.value = v
@ -194,25 +198,60 @@ class CurvelineObject extends Base {
return this.options['length-unit'] return this.options['length-unit']
} }
set lengthUnit(v) { set lengthUnit(v) {
this.unitNum++
this.options['length-unit'] = v this.options['length-unit'] = v
this._elms.lengthUnit && this._elms.lengthUnit &&
this._elms.lengthUnit.forEach(item => { this._elms.lengthUnit.forEach(item => {
item.value = v item.value = v
}) })
if (this.options.lengthByMeter) { if (this.options.lengthByMeter) {
switch (v) { if (this.unitNum > 2) {
case '米': switch (v) {
this.length = this.options.lengthByMeter case '米':
break this.length = this.noseToTail ? this.options.fitLengthByMeter : this.options.lengthByMeter
case '千米':
this.length = (this.options.lengthByMeter / 1000).toFixed(5) break
break case '千米':
default: this.length = this.noseToTail ? (this.options.fitLengthByMeter / 1000).toFixed(5) : (this.options.lengthByMeter / 1000).toFixed(5)
this.length = this.options.lengthByMeter
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() { get fitLengthUnit() {
return this.options['fit-length-unit'] return this.options['fit-length-unit']
} }
@ -310,8 +349,28 @@ class CurvelineObject extends Base {
) )
this.renewPolygon(fromDegreesArray) 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() { get heightMode() {
return this.options.heightMode ? this.options.heightMode : 0 return this.options.heightMode ? this.options.heightMode : 0
} }
@ -349,11 +408,11 @@ class CurvelineObject extends Base {
break break
} }
this.options.lengthByMeter = this.computeDistance2( // this.options.lengthByMeter = this.computeDistance2(
this.smoothHandle(this.options.positions), // this.smoothHandle(this.options.positions),
2, // 2,
ground // ground
) // )
this.lengthUnit = this.lengthUnit this.lengthUnit = this.lengthUnit
this._elms.heightMode && (this._elms.heightMode.value = heightModeName) this._elms.heightMode && (this._elms.heightMode.value = heightModeName)
this._elms.heightModeObject && (this._elms.heightModeObject.legp_searchActive( this._elms.heightModeObject && (this._elms.heightModeObject.legp_searchActive(
@ -1157,12 +1216,25 @@ class CurvelineObject extends Base {
CurvelineObject.createLabel(that) CurvelineObject.createLabel(that)
// that.entity.polyline.positionsLngLat = positions // that.entity.polyline.positionsLngLat = positions
that.renewPolygon(fromDegreesArray) that.renewPolygon(fromDegreesArray)
that.options.lengthByMeter = that.computeDistance2(that.smoothHandle(positions), 2, ground) // that.options.lengthByMeter = that.computeDistance2(that.smoothHandle(positions), 2, ground)
that.lengthUnit = that.options['length-unit'] // that.lengthUnit = that.options['length-unit']
syncData(that.sdk, that.options.id) // syncData(that.sdk, that.options.id)
if (that.options.show) { // if (that.options.show) {
setSplitDirection(0, that.options.id) // 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']) { // if (this.options['nose-to-tail']) {
// let array = [] // 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 = [ let unitData = [
{ {
@ -1405,12 +1521,13 @@ class CurvelineObject extends Base {
this._DialogObject._element.content.getElementsByClassName( this._DialogObject._element.content.getElementsByClassName(
'input-select-unit-box' 'input-select-unit-box'
)[0], )[0],
'.input-select-unit' '.input-select-unit',
1
) )
if (unitDataLegpObject) { if (unitDataLegpObject) {
unitDataLegpObject.legp_search(unitData) unitDataLegpObject.legp_search(unitData)
let unitDataLegpElm = this._DialogObject._element.content let unitDataLegpElm = this._DialogObject._element.content
.getElementsByClassName('input-select-unit')[0] .getElementsByClassName('input-select-unit')[1]
.getElementsByTagName('input')[0] .getElementsByTagName('input')[0]
this._elms.lengthUnit = [unitDataLegpElm] this._elms.lengthUnit = [unitDataLegpElm]
unitDataLegpElm.value = this.options['length-unit'] unitDataLegpElm.value = this.options['length-unit']
@ -1431,45 +1548,45 @@ class CurvelineObject extends Base {
} }
// 拟合长度单位 // 拟合长度单位
let fitUnitData = [ // let fitUnitData = [
{ // {
name: '米', // name: '米',
value: '米' // value: '米'
}, // },
{ // {
name: '千米', // name: '千米',
value: '千米' // value: '千米'
} // }
] // ]
let fitUnitDataLegpObject = legp( // let fitUnitDataLegpObject = legp(
this._DialogObject._element.content.getElementsByClassName( // this._DialogObject._element.content.getElementsByClassName(
'input-select-fit-unit-box' // 'input-select-fit-unit-box'
)[0], // )[0],
'.input-select-fit-unit' // '.input-select-fit-unit'
) // )
if (fitUnitDataLegpObject) { // if (fitUnitDataLegpObject) {
fitUnitDataLegpObject.legp_search(fitUnitData) // fitUnitDataLegpObject.legp_search(fitUnitData)
let fitUnitDataLegpElm = this._DialogObject._element.content // let fitUnitDataLegpElm = this._DialogObject._element.content
.getElementsByClassName('input-select-fit-unit')[0] // .getElementsByClassName('input-select-fit-unit')[0]
.getElementsByTagName('input')[0] // .getElementsByTagName('input')[0]
this._elms.fitLengthUnit = [fitUnitDataLegpElm] // this._elms.fitLengthUnit = [fitUnitDataLegpElm]
fitUnitDataLegpElm.value = this.options['fit-length-unit'] // fitUnitDataLegpElm.value = this.options['fit-length-unit']
for (let i = 0; i < fitUnitData.length; i++) { // for (let i = 0; i < fitUnitData.length; i++) {
if (fitUnitData[i].value === fitUnitDataLegpElm.value) { // if (fitUnitData[i].value === fitUnitDataLegpElm.value) {
fitUnitDataLegpObject.legp_searchActive(fitUnitData[i].value) // fitUnitDataLegpObject.legp_searchActive(fitUnitData[i].value)
break // break
} // }
} // }
fitUnitDataLegpElm.addEventListener('input', () => { // fitUnitDataLegpElm.addEventListener('input', () => {
for (let i = 0; i < fitUnitData.length; i++) { // for (let i = 0; i < fitUnitData.length; i++) {
if (fitUnitData[i].value === fitUnitDataLegpElm.value) { // if (fitUnitData[i].value === fitUnitDataLegpElm.value) {
this.fitLengthUnit = fitUnitData[i].value // this.fitLengthUnit = fitUnitData[i].value
break // break
} // }
} // }
}) // })
} // }
let lineTypeData = [ let lineTypeData = [
{ {
@ -1848,22 +1965,74 @@ class CurvelineObject extends Base {
// 计算长度 // 计算长度
let array = [] // let array = []
for (let i = 0; i < fromDegreesArray.length; i += 3) { // for (let i = 0; i < fromDegreesArray.length; i += 3) {
array.push({ // array.push({
lng: fromDegreesArray[i], // lng: fromDegreesArray[i],
lat: fromDegreesArray[i + 1], // lat: fromDegreesArray[i + 1],
alt: fromDegreesArray[i + 2] // 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, 2,
ground this.options['words-name']
) ).then(res => {
this.fitLengthUnit = this.options['fit-length-unit'] _this.options.lengthByMeter = res
this.options.lengthByMeter = this.computeDistance2(this.smoothHandle(positions), 2, ground) _this.lengthUnit = this.options['length-unit']
this.lengthUnit = this.options['length-unit'] })
return fromDegreesArray return fromDegreesArray
} }
@ -2035,7 +2204,7 @@ class CurvelineObject extends Base {
)[0].value )[0].value
) { ) {
this.options.attribute.vr.content.push({ this.options.attribute.vr.content.push({
name: '全景图' , name: '全景图',
url: this._DialogObject._element.content.getElementsByClassName( url: this._DialogObject._element.content.getElementsByClassName(
'vr_add' 'vr_add'
)[0].value )[0].value
@ -2051,7 +2220,7 @@ class CurvelineObject extends Base {
addAttributeRr(vr) { addAttributeRr(vr) {
this.options.attribute.vr.content.push({ this.options.attribute.vr.content.push({
name: '全景图' , name: '全景图',
url: vr url: vr
}) })
this.attributeVr = this.options.attribute.vr.content this.attributeVr = this.options.attribute.vr.content

View File

@ -287,14 +287,16 @@ class PolylineObject extends Base {
2, 2,
v v
).then(res => { ).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 _this.options.lengthByMeter = res
if (res > 1000 || res == 1000) { _this.lengthUnit = _this.options['length-unit']
_this.length = (res / 1000).toFixed(5)
_this.lengthUnit = '千米'
} else {
_this.length = res
_this.lengthUnit = '米'
}
}) })
} else { } else {
let fromDegreesArray = this.renewPositions(this.options.positions) let fromDegreesArray = this.renewPositions(this.options.positions)
@ -479,24 +481,25 @@ class PolylineObject extends Base {
) )
this.renewPolygon(fromDegreesArray) this.renewPolygon(fromDegreesArray)
} }
if (v) { this.lengthUnit = this.options['length-unit']
if (this.options.fitLengthByMeter > 1000 || this.options.fitLengthByMeter == 1000) { // if (v) {
let dom = document.getElementsByClassName('input-select-unit')[1] // if (this.options.fitLengthByMeter > 1000 || this.options.fitLengthByMeter == 1000) {
dom && dom.querySelectorAll('dd')[1] && dom.querySelectorAll('dd')[1].click() // let dom = document.getElementsByClassName('input-select-unit')[1]
} else { // dom && dom.querySelectorAll('dd')[1] && dom.querySelectorAll('dd')[1].click()
let dom = document.getElementsByClassName('input-select-unit')[1] // } else {
dom && dom.querySelectorAll('dd')[0] && dom.querySelectorAll('dd')[0].click() // let dom = document.getElementsByClassName('input-select-unit')[1]
} // dom && dom.querySelectorAll('dd')[0] && dom.querySelectorAll('dd')[0].click()
// }
} else { // } else {
if (this.options.lengthByMeter > 1000 || this.options.lengthByMeter == 1000) { // if (this.options.lengthByMeter > 1000 || this.options.lengthByMeter == 1000) {
let dom = document.getElementsByClassName('input-select-unit')[1] // let dom = document.getElementsByClassName('input-select-unit')[1]
dom && dom.querySelectorAll('dd')[1] && dom.querySelectorAll('dd')[1].click() // dom && dom.querySelectorAll('dd')[1] && dom.querySelectorAll('dd')[1].click()
} else { // } else {
let dom = document.getElementsByClassName('input-select-unit')[1] // let dom = document.getElementsByClassName('input-select-unit')[1]
dom && dom.querySelectorAll('dd')[0] && dom.querySelectorAll('dd')[0].click() // dom && dom.querySelectorAll('dd')[0] && dom.querySelectorAll('dd')[0].click()
} // }
} // }
} }
get smooth() { get smooth() {