From cfdc569b6316ed2e44bc7fc85b785612262abe21 Mon Sep 17 00:00:00 2001
From: wuww <252740454@qq.com>
Date: 星期五, 16 五月 2025 14:41:42 +0800
Subject: [PATCH] 添加裁剪DEM、土地利用功能

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

diff --git a/src/main/java/com/se/nsl/service/ResolveService.java b/src/main/java/com/se/nsl/service/ResolveService.java
index e9a9740..8b10d9d 100644
--- a/src/main/java/com/se/nsl/service/ResolveService.java
+++ b/src/main/java/com/se/nsl/service/ResolveService.java
@@ -11,12 +11,18 @@
 import com.se.nsl.domain.po.SimuData;
 import com.se.nsl.domain.vo.ConfigVo;
 import com.se.nsl.helper.ComHelper;
+import com.se.nsl.helper.GdalHelper;
 import com.se.nsl.helper.StringHelper;
 import com.se.nsl.helper.WebHelper;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
+import org.gdal.gdal.Dataset;
+import org.gdal.gdal.gdal;
+import org.gdal.gdalconst.gdalconstConstants;
 import org.gdal.ogr.Geometry;
 import org.gdal.ogr.ogr;
+import org.gdal.osr.CoordinateTransformation;
+import org.gdal.osr.SpatialReference;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
@@ -108,7 +114,7 @@
             SimuData data = JSONUtil.toBean(simu.getData(), SimuData.class);
 
             update(simu, 1, "鍒濆鍖栧弬鏁�");
-            initArgs(data);
+            initArgs(simu, data);
             createRainfallFile(simu, data);
 
             update(simu, 2, "璋冪敤姹傝В鍣�");
@@ -138,18 +144,30 @@
     /**
      * 鍒濆鍖栧弬鏁�
      */
-    public void initArgs(SimuData data) throws IOException {
+    public void initArgs(Simu simu, SimuData data) throws IOException {
         String inPath = config.getInPath() + File.separator + data.getInPath();
         createDir(inPath);
         createDir(inPath + File.separator + "depth");
         createDir(inPath + File.separator + "velocity");
         createDir(config.getOutPath() + File.separator + data.getOutPath());
 
-        // 涓存椂澶嶅埗楂樼▼tif锛屼互鍚庨渶瑕佽嚜琛屽垏鍓�
-        File uwBat = new File(config.getUwSolverBat());
-        String sourceTif = uwBat.getParent() + File.separator + "case1" + File.separator + "LiuLiMiaoZhen_5m_f32.tif";
-        String targetTif = inPath + File.separator + config.getDemFile();
-        Files.copy(Paths.get(sourceTif), Paths.get(targetTif), StandardCopyOption.REPLACE_EXISTING);
+        Geometry geom = Geometry.CreateFromWkt(simu.getGeom());
+        if (geom.GetGeometryType() == ogr.wkbMultiPolygon) geom = geom.GetGeometryRef(0);
+        SpatialReference dstSR = GdalHelper.createSpatialReference(config.getEpsg());
+
+        CoordinateTransformation ct = CoordinateTransformation.CreateCoordinateTransformation(GdalHelper.SR4326, dstSR);
+        geom.Transform(ct);
+        String wkt = geom.ExportToWkt();
+
+        String terrainFile = inPath + File.separator + config.getTerrainFile();
+        Dataset dsDem = gdal.Open(config.getSourceDem(), gdalconstConstants.GA_ReadOnly);
+        ComHelper.Resample(dsDem, null, terrainFile, wkt, null, null);
+        dsDem.delete();
+
+        String landuseFile = inPath + File.separator + config.getLanduseFile();
+        Dataset dsLanduse = gdal.Open(config.getSourceLanduse(), gdalconstConstants.GA_ReadOnly);
+        ComHelper.Resample(dsLanduse, null, landuseFile, wkt, null, null);
+        dsLanduse.delete();
     }
 
     private void createDir(String path) {
@@ -228,10 +246,11 @@
         }
 
         String inPath = config.getInPath() + File.separator + data.getInPath();
-        String terrainFile = (inPath + File.separator + config.getDemFile());
+        String terrainFile = inPath + File.separator + config.getTerrainFile();
+        String landuseFile = inPath + File.separator + config.getLanduseFile();
         String rainfallFile = (inPath + File.separator + "rainfall.dat");
         String saveName = inPath + File.separator + "result.zarr";
-        ConfigVo vo = new ConfigVo(terrainFile, terrainFile, terrainFile, rainfallFile, saveName, duration, config.getSaveFrames());
+        ConfigVo vo = new ConfigVo(terrainFile, landuseFile, terrainFile, rainfallFile, saveName, duration, config.getSaveFrames());
 
         String configFile = config.getInPath() + File.separator + data.getInPath() + File.separator + data.getInPath() + ".json";
         ComHelper.writeJson(configFile, JSON.toJSONString(vo));
@@ -248,7 +267,7 @@
         String inPath = config.getInPath() + File.separator + data.getInPath();
         String zarrFile = inPath + File.separator + "result.zarr";
         String geotiffDir = inPath + File.separator + "depth";
-        String terrainFile = inPath + File.separator + config.getDemFile();
+        String terrainFile = inPath + File.separator + config.getTerrainFile();
         String jsonPath = inPath + File.separator + "zarr2tif.json";
 
         Zarr2Tif zarr2Tif = new Zarr2Tif(zarrFile, geotiffDir, terrainFile, data.getStartTime());
@@ -289,7 +308,7 @@
         File uwBat = new File(config.getUwSolverBat());
         String zarrFile = uwBat.getParent() + File.separator + "result.zarr";
         String inPath = config.getInPath() + File.separator + data.getInPath();
-        String terrainFile = inPath + File.separator + config.getDemFile();
+        String terrainFile = inPath + File.separator + config.getTerrainFile();
         String waterPath = inPath + File.separator + "depth";
 
         String cmd = String.format("%s \"%s\" \"%s\" \"%s\" \"%s\"", config.getZarr2tifBat(), "depth", zarrFile, terrainFile, waterPath);

--
Gitblit v1.9.3