From c63f5c032bee42eb339cbbd95c8cee4f7132cf7e Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期四, 07 十一月 2024 09:58:17 +0800
Subject: [PATCH] 添加数据校验功能

---
 src/main/java/com/se/simu/service/GedbService.java |   25 +++++++++++++++++++++++--
 1 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/se/simu/service/GedbService.java b/src/main/java/com/se/simu/service/GedbService.java
index c13f549..35e5d3c 100644
--- a/src/main/java/com/se/simu/service/GedbService.java
+++ b/src/main/java/com/se/simu/service/GedbService.java
@@ -19,6 +19,7 @@
 import org.gdal.gdal.WarpOptions;
 import org.gdal.gdal.gdal;
 import org.gdal.gdalconst.gdalconst;
+import org.gdal.ogr.Geometry;
 import org.gdal.osr.SpatialReference;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -244,7 +245,7 @@
 
         List<GeLayer> layers = getLayers(token, db);
         queryData(token, db, layers);
-        checkData(layers);
+        checkData(data, db, layers);
         createShps(basePath, layers);
         createZoneShp(basePath, data, db.getSpatialReference());
         if (data.getPid() > 0) {
@@ -252,9 +253,14 @@
         }
     }
 
-    private void checkData(List<GeLayer> layers) {
+    private void checkData(DataPo data, GeDb db, List<GeLayer> layers) {
         GeLayer point = getLayerByName(layers, config.getLayerNames().get(0));
         GeLayer line = getLayerByName(layers, config.getLayerNames().get(1));
+        GeLayer build = getLayerByName(layers, config.getLayerNames().get(2));
+
+        Geometry extent = ShpHelper.createPolygon(db.getSpatialReference(), data.getMinx(), data.getMiny(), data.getMaxx(), data.getMaxy());
+        checkSpatialRange(extent, point);
+        checkSpatialRange(extent, build);
 
         List<String> bsm = getValues(point, "bsm");
         List<String> bsm2 = new ArrayList<>(bsm);
@@ -280,6 +286,21 @@
         layers.add(juncLayer);
     }
 
+    private void checkSpatialRange(Geometry extent, GeLayer geLayer) {
+        int i = 0;
+        while (i < geLayer.getData().size()) {
+            JSONObject geom = geLayer.getData().getJSONObject(i).getJSONObject("geometry");
+            Geometry g = ShpHelper.createGeometry(geLayer, geom);
+            g.AssignSpatialReference(extent.GetSpatialReference());
+
+            if (!extent.Intersects(g)) {
+                geLayer.getData().remove(i);
+                continue;
+            }
+            i++;
+        }
+    }
+
     private GeLayer getLayerByName(List<GeLayer> layers, String name) {
         return layers.stream().filter(a -> a.getName().equals(name)).findFirst().orElse(null);
     }

--
Gitblit v1.9.3