From 41c132e5064204549f28aa2caa9b0126328a9a0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=8F=E5=A4=A7=E8=83=86?= <1101282782@qq.com> Date: Tue, 26 Aug 2025 21:54:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Obj/Base/BatchModel/index.js | 142 +++++++++++++++++-------------- 1 file changed, 76 insertions(+), 66 deletions(-) diff --git a/src/Obj/Base/BatchModel/index.js b/src/Obj/Base/BatchModel/index.js index 5e71777..5cec8a2 100644 --- a/src/Obj/Base/BatchModel/index.js +++ b/src/Obj/Base/BatchModel/index.js @@ -74,33 +74,35 @@ class BatchModel extends Base { Draw && Draw.start((a, positions) => { this.options.positions = positions; //判断范围是否过大 - if (options.type == '面') { - let posi = positions.map(v => { - return Cesium.Cartesian3.fromDegrees(v.lng, v.lat) - }) - let dis1 = Cesium.Cartesian3.distance(posi[0], posi[1]) - let dis2 = Cesium.Cartesian3.distance(posi[1], posi[2]) - let num1 = dis1 / this.options.spacing - let num2 = dis2 / this.options.spacing - if (num1 * num2 > 100) { - tools.message({ type: 'warning', text: '数量大于100,请重新绘制' }) - return; - } - } else if (options.type == '线') { - let posi = positions.map(v => { - return Cesium.Cartesian3.fromDegrees(v.lng, v.lat) - }) - let dis = 0 - for (let i = 0; i < posi.length - 2; i++) { - dis += Cesium.Cartesian3.distance(posi[i], posi[i + 1]) - } - if (dis / this.options.spacing > 100) { - tools.message({ type: 'warning', text: '数量大于100,请重新绘制' }) - return; + if (positions) { + if (options.type == '面') { + let posi = positions.map(v => { + return Cesium.Cartesian3.fromDegrees(v.lng, v.lat) + }) + let dis1 = Cesium.Cartesian3.distance(posi[0], posi[1]) + let dis2 = Cesium.Cartesian3.distance(posi[1], posi[2]) + let num1 = dis1 / this.options.spacing + let num2 = dis2 / this.options.spacing + if (num1 * num2 > 100) { + tools.message({ type: 'warning', text: '数量大于100,请重新绘制' }) + return; + } + } else if (options.type == '线') { + let posi = positions.map(v => { + return Cesium.Cartesian3.fromDegrees(v.lng, v.lat) + }) + let dis = 0 + for (let i = 0; i < posi.length - 2; i++) { + dis += Cesium.Cartesian3.distance(posi[i], posi[i + 1]) + } + if (dis / this.options.spacing > 100) { + tools.message({ type: 'warning', text: '数量大于100,请重新绘制' }) + return; + } } + // this.callback(this.options); + (this.options.positions.length || this.options.positions.lng) && BatchModel.computeDis(this) } - // this.callback(this.options); - (this.options.positions.length || this.options.positions.lng) && BatchModel.computeDis(this) }) } else { @@ -115,51 +117,59 @@ class BatchModel extends Base { let posiArr = [] let array = [] if (that.options.type == '面') { - that.options.positions.forEach(item => { - fromDegreesArray.push(item.lng, item.lat) - }) - // arr = that.generateInterpolatedPoints(Cesium.Cartesian3.fromDegreesArray(fromDegreesArray), that.options.spacing) - arr = await that.computedArea(Cesium.Cartesian3.fromDegreesArray(fromDegreesArray), that.options.spacing) - array[0] = arr - array[1] = that.calculateRoadAngle(Cesium.Cartesian3.fromDegreesArray(fromDegreesArray)[0], Cesium.Cartesian3.fromDegreesArray(fromDegreesArray)[3]) - arr.forEach((item, index) => { - const cartographic = Cesium.Cartographic.fromCartesian( - item // Cartesian3对象 {x, y, z} - ); - const longitude = Cesium.Math.toDegrees(cartographic.longitude); - const latitude = Cesium.Math.toDegrees(cartographic.latitude); - const height = cartographic.height; - posiArr.push({ - lng: longitude, - lat: latitude, - alt: height + if (that.options.positions.length != 0) { + that.options.positions.forEach(item => { + fromDegreesArray.push(item.lng, item.lat) }) - }) + // arr = that.generateInterpolatedPoints(Cesium.Cartesian3.fromDegreesArray(fromDegreesArray), that.options.spacing) + arr = await that.computedArea(Cesium.Cartesian3.fromDegreesArray(fromDegreesArray), that.options.spacing) + array[0] = arr + array[1] = that.calculateRoadAngle(Cesium.Cartesian3.fromDegreesArray(fromDegreesArray)[0], Cesium.Cartesian3.fromDegreesArray(fromDegreesArray)[3]) + arr.forEach((item, index) => { + const cartographic = Cesium.Cartographic.fromCartesian( + item // Cartesian3对象 {x, y, z} + ); + const longitude = Cesium.Math.toDegrees(cartographic.longitude); + const latitude = Cesium.Math.toDegrees(cartographic.latitude); + const height = cartographic.height; + posiArr.push({ + lng: longitude, + lat: latitude, + alt: height + }) + }) + } } else if (that.options.type == '线') { - that.options.positions.forEach(item => { - fromDegreesArray.push(item.lng, item.lat) - }) - array = await that.linePoint(Cesium.Cartesian3.fromDegreesArray(fromDegreesArray), that.options.spacing) - arr = array[0] - that.pointArr = arr - arr.forEach((item, index) => { - const cartographic = Cesium.Cartographic.fromCartesian( - item // Cartesian3对象 {x, y, z} - ); - const longitude = Cesium.Math.toDegrees(cartographic.longitude); - const latitude = Cesium.Math.toDegrees(cartographic.latitude); - const height = cartographic.height; - posiArr.push({ - lng: longitude, - lat: latitude, - alt: height + if (that.options.positions.length != 0) { + that.options.positions.forEach(item => { + fromDegreesArray.push(item.lng, item.lat) }) - }) + array = await that.linePoint(Cesium.Cartesian3.fromDegreesArray(fromDegreesArray), that.options.spacing) + arr = array[0] + that.pointArr = arr + arr.forEach((item, index) => { + const cartographic = Cesium.Cartographic.fromCartesian( + item // Cartesian3对象 {x, y, z} + ); + const longitude = Cesium.Math.toDegrees(cartographic.longitude); + const latitude = Cesium.Math.toDegrees(cartographic.latitude); + const height = cartographic.height; + posiArr.push({ + lng: longitude, + lat: latitude, + alt: height + }) + }) + } + } else if (that.options.type == '点') { - let height = await that.getClampToHeight({ lng: that.options.positions.lng, lat: that.options.positions.lat }) - posiArr = [{ lng: that.options.positions.lng, lat: that.options.positions.lat, alt: height }] - // posiArr = [that.options.positions] - that.pointArr = posiArr + if (that.options.positions.lng) { + let height = await that.getClampToHeight({ lng: that.options.positions.lng, lat: that.options.positions.lat }) + posiArr = [{ lng: that.options.positions.lng, lat: that.options.positions.lat, alt: height }] + // posiArr = [that.options.positions] + that.pointArr = posiArr + } + } let params = { type: that.options.type,