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