From 1ca8fdb15bfe2daa5c6bd22fd913a1718bca116d Mon Sep 17 00:00:00 2001 From: wangjuncheng <1> Date: 星期二, 15 七月 2025 16:19:07 +0800 Subject: [PATCH] 123 --- src/components/tools/Ditching.vue | 51 +++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 41 insertions(+), 10 deletions(-) diff --git a/src/components/tools/Ditching.vue b/src/components/tools/Ditching.vue index 2dea1e5..3bba7a1 100644 --- a/src/components/tools/Ditching.vue +++ b/src/components/tools/Ditching.vue @@ -3,6 +3,9 @@ <div class="panel-content"> <!-- 寮�鎸栨繁搴﹁缃� --> <el-form :model="form" label-width="80px"> + <el-form-item label="璇锋敞鎰忥細"> + <p>1銆佸彸鍑荤粨鏉熸渶鍚庝竴涓偣 2銆佽鎸夌収鍚屽悜椤哄簭寮�鎸�</p> + </el-form-item> <el-form-item label="寮�鎸栨繁搴�"> <el-input v-model="form.digDepth" placeholder="璇疯緭鍏ュ紑鎸栨繁搴�(m)" /> </el-form-item> @@ -50,12 +53,23 @@ // 寮�濮嬬洃鍚偣鍑讳簨浠� clickHandler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas); + + // 宸﹀嚮娣诲姞鐐� clickHandler.setInputAction((movement) => { const cartesian = viewer.camera.pickEllipsoid(movement.position, viewer.scene.globe.ellipsoid); if (cartesian) { currentPoints.push(cartesian.clone()); } }, Cesium.ScreenSpaceEventType.LEFT_CLICK); + + // 鍙冲嚮缁撴潫缁樺埗骞朵繚瀛樻渶鍚庝竴涓偣 + clickHandler.setInputAction((movement) => { + const cartesian = viewer.camera.pickEllipsoid(movement.position, viewer.scene.globe.ellipsoid); + if (cartesian) { + currentPoints.push(cartesian.clone()); // 娣诲姞鏈�鍚庝竴涓彸鍑荤偣 + } + handleConfirm(); // 鑷姩璋冪敤纭 + }, Cesium.ScreenSpaceEventType.RIGHT_CLICK); }; const createExcavation = () => { @@ -82,24 +96,41 @@ ); // 鐐瑰嚮纭鎸夐挳锛堟墦鍗板綋鍓嶅潗鏍囩偣闆嗗悎鍜屾繁搴︼級 const handleConfirm = () => { - if (currentPoints.length === 0) { - ElMessage.warning('璇烽�夊彇寮�娌熸湁鏁堢殑鍧愭爣鐐癸紒'); + if (currentPoints.length < 3) { + ElMessage.warning('璇疯嚦灏戦�夋嫨涓変釜鍧愭爣鐐逛互鏋勬垚澶氳竟褰紒'); return; } + const depth = parseFloat(form.digDepth); - // 杞崲涓烘櫘閫氬璞℃暟缁� - const plainPoints = currentPoints.map(point => ({ - x: point.x, - y: point.y, - z: point.z - })); + + // 绗竴姝ワ細灏嗙瑳鍗″皵鍧愭爣杞负 [缁忓害, 绾害] 鏁扮粍 + let coords = currentPoints.map(point => { + const cartographic = Cesium.Cartographic.fromCartesian(point); + const lon = Cesium.Math.toDegrees(cartographic.longitude).toFixed(6); // 缁忓害 + const lat = Cesium.Math.toDegrees(cartographic.latitude).toFixed(6); // 绾害 + return [parseFloat(lon), parseFloat(lat)]; + }); + + // 绗簩姝ワ細闂悎澶氳竟褰紙濡傛灉棣栧熬鐐逛笉涓�鑷达級 + if (coords.length > 0 && (coords[0][0] !== coords[coords.length - 1][0] || coords[0][1] !== coords[coords.length - 1][1])) { + coords.push([...coords[0]]); // 娣诲姞绗竴涓偣鍒版湯灏� + } + + // 绗笁姝ワ細鏋勯�� WKT POLYGON 鏍煎紡 + const pointsStr = coords.map(p => p.join(' ')).join(', '); + const wkt = `POLYGON ((${pointsStr}))`; + + // console.log(wkt); + + // 绗洓姝ワ細鏋勫缓杩斿洖缁撴灉 const result = { - points: plainPoints, + geom: wkt, depth: depth }; + console.log(result,'纭鏃讹紝浜х敓鐨勫湴褰慨鏀规暟鎹�'); + emit('update-excavation-data', result); ElMessage.success('瀹炵幇寮�鎸栧姛鑳斤紒'); - }; const handleClear = () => { isDrawing.value = false; -- Gitblit v1.9.3