From 2b4ddd668550749813c4e02b5d5100842763e23b Mon Sep 17 00:00:00 2001 From: guonan <guonan201020@163.com> Date: 星期四, 17 四月 2025 17:41:35 +0800 Subject: [PATCH] 划区域坡度分析 --- src/utils/tools.js | 100 +++++++++++++++++++++++++++++++------------------ 1 files changed, 63 insertions(+), 37 deletions(-) diff --git a/src/utils/tools.js b/src/utils/tools.js index 6f0a779..6b7c835 100644 --- a/src/utils/tools.js +++ b/src/utils/tools.js @@ -23,6 +23,8 @@ elevationTool: null, rainEffect: null, snowEffect: null, // 鏂板闆晥鏋滃疄渚� + regionTerrain: null, + polygonPosition: [], init(earthCtrl) { this.earthCtrl = earthCtrl; @@ -36,13 +38,13 @@ return new Cesium.Color(r, g, b, 1.0); }, // 娓呴櫎澶╂皵鐗规晥 - delRain(){ + delRain() { if (this.rainEffect) { this.rainEffect.destroy() this.rainEffect = null } }, - delSnow(){ + delSnow() { if (this.snowEffect) { this.snowEffect.destroy(); this.snowEffect = null; @@ -87,8 +89,57 @@ this.snowEffect.show(show); } }, + // 鍖哄煙鍒掑垎宸ュ叿 + hfqy() { + // 鍒濆鍖栧尯鍩熷湴褰� + this.regionTerrain = earthCtrl.factory.createRegionTerrain({}); + this.polygonPosition = []; + + // 鍒涘缓缁樺埗宸ュ叿 + const drawTool = earthCtrl.shapeTool.createDrawShapeTool((e) => { + try { + if (!e || !e.result) { + throw new Error('Invalid drawing result'); + } + + // 杞崲鍧愭爣骞跺瓨鍌� + const polygonI = []; + for (const point of e.result) { + const cartographic = earthCtrl.coreMap.scene.globe.ellipsoid.cartesianToCartographic(point); + const lon = Cesium.Math.toDegrees(cartographic.longitude); + const lat = Cesium.Math.toDegrees(cartographic.latitude); + + polygonI.push(lon, lat, 0); + this.polygonPosition.push(lon, lat); + } + + // 璁剧疆鍖哄煙鍦板舰 + this.regionTerrain.setPositions(this.polygonPosition); + this.regionTerrain.setRegionEnabled(true); + + // 娓呴櫎缁樺埗宸ュ叿 + drawTool.removeFromMap(); + } catch (error) { + console.error('Error during region drawing:', error); + drawTool.removeFromMap(); + } + }); + + return drawTool; + }, + // 鍧″悜绠ご + pxjt(colors, angles) { + this.hfqy() + this.slopeArrow = earthCtrl.factory.createSlopeArrow({}); + this.slopeArrow.setColorsAndAngles(colors, angles); + this.regionTerrain.setPositions(this.polygonPosition); + this.regionTerrain.setRegionEnabled(true); + this.slopeArrow.setSlopeType(1); + }, + // 鍧″害鍒嗘瀽 pdfx(option) { + this.hfqy() this.elevationTool = new SmartEarth.ElevationTool(earthCtrl) if (option.terrainRender == '1') { this.elevationTool.type = 'slope' @@ -100,46 +151,21 @@ this.elevationTool.setWidth(option.lineWidth) this.elevationTool.setContourColor(option.color); this.elevationTool.render(); - console.log(this.elevationTool, 'eleelelelelelelel') }, - // 鍧″悜绠ご - pxjt(colors, angles) { - this.slopeArrow = earthCtrl.factory.createSlopeArrow({}); - this.slopeArrow.setColorsAndAngles(colors, angles); - // 鍒涘缓缁樺埗宸ュ叿 - const drawTool = earthCtrl.shapeTool.createDrawShapeTool((e) => { - const polygonI = []; - const polygonPosition = []; - for (const i of e.result) { - const ellipsoid = earthCtrl.coreMap.scene.globe.ellipsoid; - const cartographic = ellipsoid.cartesianToCartographic(i); - - const lon = Cesium.Math.toDegrees(cartographic.longitude); - const lat = Cesium.Math.toDegrees(cartographic.latitude); // 绾害 - polygonI.push(lon, lat, 0); - polygonPosition.push(lon, lat); - } - const PolygonArr = []; - PolygonArr.push({ - id: earthCtrl.factory.createUUID(), - polygon: polygonI, - }); - - // 娓呴櫎缁樺埗宸ュ叿 - drawTool.removeFromMap(); - // 璁剧疆鍧″害绠ご鐨勪綅缃拰绫诲瀷 - this.slopeArrow.setPositions(polygonPosition); - this.slopeArrow.setSlopeType(1); - this.slopeArrow.setRegionEnabled(true); - console.log(this.slopeArrow, 'slope') - }); - }, - // 鍏抽棴鍧″悜绠ご - gbpxjt() { + // 娓呯悊鎵�鏈夊垎鏋愬伐鍏� + cleanupAnalysisTools() { + // 鍧″悜绠ご if (this.slopeArrow) { this.slopeArrow.setSlopeType(0); + this.slopeArrow = null; } + // 閫夋嫨鍖哄煙 + if (this.regionTerrain) { + this.regionTerrain.setRegionEnabled(false); + this.regionTerrain = null; + } + this.polygonPosition = []; }, // 鏍囩粯 CreateLabel(pic, show) { -- Gitblit v1.9.3