From ee7af3674e44001aafbe24bcf10f87ef2344a84f Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期六, 11 十月 2025 11:31:11 +0800
Subject: [PATCH] 电子围栏回显

---
 ManagementZYTravel/guns-admin/src/main/webapp/static/modular/system/specialAreaBilling/electricFence.js |   76 ++++++++++++++++++++++++++++++++------
 1 files changed, 64 insertions(+), 12 deletions(-)

diff --git a/ManagementZYTravel/guns-admin/src/main/webapp/static/modular/system/specialAreaBilling/electricFence.js b/ManagementZYTravel/guns-admin/src/main/webapp/static/modular/system/specialAreaBilling/electricFence.js
index d98b147..43e9484 100644
--- a/ManagementZYTravel/guns-admin/src/main/webapp/static/modular/system/specialAreaBilling/electricFence.js
+++ b/ManagementZYTravel/guns-admin/src/main/webapp/static/modular/system/specialAreaBilling/electricFence.js
@@ -1,7 +1,9 @@
-var map = new AMap.Map('container',{
+// 将 polygons 数组声明提前并确保全局唯一
+var polygons = [];
+var map = new AMap.Map('container', {
     resizeEnable: true,
-    zoom:15,
-    center: [102.2667, 27.8833] // 西昌坐标
+    zoom: 4, // 使用更小的缩放级别以适应大范围坐标
+    center: [77.3833, 34.8833] // 使用更居中的坐标
 });
 setCenterCoordinate();
 function setCenterCoordinate() {
@@ -14,12 +16,35 @@
         map.setCenter(center)
     }
 }
+// 修改 setElectricFence 函数来支持单个坐标数据
 function setElectricFence() {
+    console.log("检查 coordinateData:", typeof coordinateData, coordinateData);
+    if (typeof coordinateData !== 'undefined' && coordinateData) {
+        console.log("开始绘制多边形,坐标数据:", coordinateData);
+        var path = convertData(coordinateData);
+        console.log("转换后的路径:", path);
+        var polygon = new AMap.Polygon({
+            path: path,
+            strokeWeight: 2,
+            fillOpacity: 0.4,
+            fillColor: '#00b0ff',
+            strokeColor: '#80d8ff'
+        });
+        map.add(polygon);
+        polygons.push(polygon);
+
+        // 使用 setFitView 确保多边形可见
+        map.setFitView([polygon]);
+
+        console.log("多边形已添加到地图");
+        return;
+    }
+
+    // 原有的处理多个位置的逻辑保持不变
     var locationsStr = $("#locationList1").val();
     if ("" != locationsStr && null != locationsStr) {
         var locations = JSON.parse(locationsStr);
         for (let i = 0; i < locations.length; i++) {
-            console.log(locations[i])
             var gid = locations[i].coordinate
             if (gid == null || gid == "") {
                 continue;
@@ -33,6 +58,7 @@
                 strokeColor: '#80d8ff'
             });
             map.add(polygon);
+            polygons.push(polygon);
         }
     }
 }
@@ -110,10 +136,15 @@
 
 
 var district = null;
-var polygons=[];
+
 function drawBounds() {
+    // 在编辑模式下不执行行政区划绘制
+    if (typeof coordinateData !== 'undefined' && coordinateData) {
+        return;
+    }
+
     if(value == ''){
-        value = '北京市';
+        value = '西昌市';
     }
 
     //加载行政区划插件
@@ -129,8 +160,23 @@
     //行政区查询
     district.setLevel(document.getElementById('level').value)
     district.search(value, function(status, result) {
-        map.remove(polygons)//清除上次结果
-        polygons = [];
+        // 只清除行政区划多边形,保留电子围栏
+        var tempPolygons = [];
+        for (var i = 0; i < polygons.length; i++) {
+            // 保留用户绘制的电子围栏(通过判断是否在objs中)
+            var isUserPolygon = false;
+            for (var j = 0; j < objs.polygon.length; j++) {
+                if (polygons[i] === objs.polygon[j]) {
+                    isUserPolygon = true;
+                    break;
+                }
+            }
+            if (!isUserPolygon) {
+                tempPolygons.push(polygons[i]);
+            }
+        }
+        map.remove(tempPolygons);
+
         var bounds = result.districtList[0].boundaries;
         if (bounds) {
             for (var i = 0, l = bounds.length; i < l; i++) {
@@ -142,18 +188,21 @@
                     fillColor: '#80d8ff',
                     strokeColor: '#0091ea'
                 });
+                map.add(polygon);
                 polygons.push(polygon);
             }
         }
-        map.add(polygons)
-        map.setFitView(polygons);//视口自适应
+        // 只对行政区划多边形进行视野调整
+        if (bounds && bounds.length > 0) {
+            map.setFitView(polygons.slice(polygons.length - bounds.length));
+        }
     });
 }
 
 document.getElementById('find').onclick = function () {
     value = document.getElementById('district').value;
     if(value == ''){
-        value = "北京市";
+        value = "西昌市";
     }
     drawBounds()
 };
@@ -161,7 +210,7 @@
     if (e.keyCode === 13) {
         value = document.getElementById('district').value;
         if(value == ''){
-            value = "北京市";
+            value = "西昌市";
         }
         drawBounds();
         return false;
@@ -236,6 +285,7 @@
 
 document.getElementById('clear').onclick = function(){
     map.remove(overlays)
+    map.remove(polygons);
     overlays = [];
     coordinate = '';
     objs.circle = [];
@@ -372,6 +422,8 @@
         editor.close();
     }
 }
+
 $(function () {
+    console.log("coordinateData:", coordinateData); // 添加调试日志
     setElectricFence()
 })
\ No newline at end of file

--
Gitblit v1.7.1