From 115146311d2521fcb3b57c562df0f2a8e9972311 Mon Sep 17 00:00:00 2001
From: dcb <xgybdcb@163.com>
Date: 星期三, 28 五月 2025 11:43:12 +0800
Subject: [PATCH] 根据不同的区域类型选择不同的地形

---
 src/main/java/com/se/nsl/service/ResolveService.java |   30 ++++++++++++++++++++++++++++--
 1 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/se/nsl/service/ResolveService.java b/src/main/java/com/se/nsl/service/ResolveService.java
index 0ee73a6..475cd87 100644
--- a/src/main/java/com/se/nsl/service/ResolveService.java
+++ b/src/main/java/com/se/nsl/service/ResolveService.java
@@ -14,6 +14,7 @@
 import com.se.nsl.helper.GdalHelper;
 import com.se.nsl.helper.StringHelper;
 import com.se.nsl.helper.WebHelper;
+import com.se.nsl.utils.AreaType;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.gdal.gdal.Band;
@@ -154,6 +155,29 @@
         createDir(inPath + File.separator + "velocity");
         createDir(config.getOutPath() + File.separator + data.getOutPath());
 
+        Short areaType = simu.getAreaType();
+        AreaType at = AreaType.of(areaType);
+        String terrainTif = config.getSourceDem();
+        String landuseTif = config.getSourceLanduse();
+        if (at == AreaType.KEY_DITCH) {
+            File keyDitchDir = new File(config.getKeyDitch());
+            String areaName = simu.getAreaName();
+            Optional<File> first = Arrays.stream(keyDitchDir.listFiles()).filter(f -> f.getName().equals(areaName)).findFirst();
+            if (first.isPresent()) {
+                File targetTifDir = first.get();
+                File[] files = targetTifDir.listFiles();
+                for (File file : files) {
+                    String name = file.getName();
+                    if (name.toLowerCase().contains("dem")) {
+                        terrainTif = file.getAbsolutePath();
+                    }
+                    if (name.toLowerCase().contains("landuse")) {
+                        landuseTif = file.getAbsolutePath();
+                    }
+                }
+            }
+        }
+
         Geometry geom = Geometry.CreateFromWkt(simu.getGeom());
         if (geom.GetGeometryType() == ogr.wkbMultiPolygon) geom = geom.GetGeometryRef(0);
         SpatialReference dstSR = GdalHelper.createSpatialReference(config.getEpsg());
@@ -163,12 +187,14 @@
         String wkt = geom.ExportToWkt();
 
         String terrainFile = inPath + File.separator + config.getTerrainFile();
-        Dataset dsDem = gdal.Open(config.getSourceDem(), gdalconstConstants.GA_ReadOnly);
+
+        Dataset dsDem = gdal.Open(terrainTif, gdalconstConstants.GA_ReadOnly);
         ComHelper.Resample(dsDem, null, terrainFile, null, wkt, null, null);
         dsDem.delete();
 
         String landuseFile = inPath + File.separator + config.getLanduseFile();
-        Dataset dsLanduse = gdal.Open(config.getSourceLanduse(), gdalconstConstants.GA_ReadOnly);
+
+        Dataset dsLanduse = gdal.Open(landuseTif, gdalconstConstants.GA_ReadOnly);
         ComHelper.Resample(dsLanduse, null, landuseFile, null, wkt, null, null);
         dsLanduse.delete();
     }

--
Gitblit v1.9.3