From a2ee6e0dcdcfd9d1b8011a3cecb4e0fc4f6eeea3 Mon Sep 17 00:00:00 2001
From: dcb <xgybdcb@163.com>
Date: 星期五, 06 六月 2025 18:10:32 +0800
Subject: [PATCH] 实时模拟功能实现

---
 src/main/java/com/se/nsl/service/TestService.java |   68 +++++++++++++++++++++++++++++-----
 1 files changed, 58 insertions(+), 10 deletions(-)

diff --git a/src/main/java/com/se/nsl/service/TestService.java b/src/main/java/com/se/nsl/service/TestService.java
index a6f1079..1cc2825 100644
--- a/src/main/java/com/se/nsl/service/TestService.java
+++ b/src/main/java/com/se/nsl/service/TestService.java
@@ -8,6 +8,7 @@
 import com.se.nsl.domain.vo.BuildingDepthVo;
 import com.se.nsl.helper.ComHelper;
 import com.se.nsl.helper.GdalHelper;
+import com.se.nsl.utils.TimeFormatUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.gdal.gdal.Band;
 import org.gdal.gdal.Dataset;
@@ -22,6 +23,10 @@
 import java.io.File;
 import java.io.IOException;
 import java.text.SimpleDateFormat;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.List;
 
@@ -38,7 +43,7 @@
 
     public final static SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm");
 
-    public void test(SimuData data) throws Exception {
+    public void test(SimuData data) throws IOException {
         String basePath = config.getInPath() + File.separator + data.getInPath() + File.separator;
         ResultDto dto = new ResultDto(
                 data.getInPath(),
@@ -53,7 +58,7 @@
         process(dto, layer);
     }
 
-    private void process(ResultDto dto, LayerDto layer) throws Exception {
+    private void process(ResultDto dto, LayerDto layer) throws IOException {
         try {
             copeTerrain(dto, layer);
             copeWater(dto, layer);
@@ -67,7 +72,36 @@
         }
     }
 
+    public void processRealTime(ResultDto dto, LayerDto layer) throws IOException {
+        try {
+            copeTerrainRealTime(dto, layer);
+            copeWater(dto, layer);
+            copeFlow(dto, layer);
+            copeLayerJson(dto, layer);
+        } finally {
+            File dir = new File(dto.getTemp());
+            if (dir.exists()) {
+                FileUtil.del(dir);
+            }
+        }
+    }
+
     public void copeTerrain(ResultDto dto, LayerDto layer) {
+        Dataset ds = null;
+        try {
+            ds = gdal.Open(dto.getTerrainFile(), gdalconstConstants.GA_ReadOnly); // gdalconst
+            if (null == ds || 0 == ds.getRasterCount()) return;
+
+            setSizes(ds, layer);
+            setTerrainInfo(ds, layer);
+            setWaterInfo(dto, layer);
+            createTerrainPng(dto, ds, layer);
+        } finally {
+            if (null != ds) ds.delete();
+        }
+    }
+
+    private void copeTerrainRealTime(ResultDto dto, LayerDto layer) {
         Dataset ds = null;
         try {
             ds = gdal.Open(dto.getTerrainFile(), gdalconstConstants.GA_ReadOnly); // gdalconst
@@ -99,10 +133,14 @@
     public void setTerrainInfo(Dataset ds, LayerDto layer) {
         Geometry minPoint = GdalHelper.getMinPoint(ds);
         Geometry maxPoint = GdalHelper.getMaxPoint(ds);
-        double minx = ComHelper.getMinVal(minPoint.GetX(0), 10000000);
-        double miny = ComHelper.getMinVal(minPoint.GetY(0), 10000000);
-        double maxx = ComHelper.getMaxVal(maxPoint.GetX(0) + MAX_X_OFFSET, 10000000);
-        double maxy = ComHelper.getMaxVal(maxPoint.GetY(0), 10000000);
+//        double minx = ComHelper.getMinVal(minPoint.GetX(0), 10000000);
+//        double miny = ComHelper.getMinVal(minPoint.GetY(0), 10000000);
+//        double maxx = ComHelper.getMaxVal(maxPoint.GetX(0) + MAX_X_OFFSET, 10000000);
+//        double maxy = ComHelper.getMaxVal(maxPoint.GetY(0), 10000000);
+        double minx = Double.MAX_VALUE;
+        double miny = Double.MAX_VALUE;
+        double maxx = Double.MIN_VALUE;
+        double maxy = Double.MIN_VALUE;
         //layer.setExtension(new ExtensionDto(minx, miny, maxx, maxy, Double.MAX_VALUE, Double.MIN_VALUE));
 
         Band band = ds.GetRasterBand(1);
@@ -193,6 +231,16 @@
     }
 
     public void setWaterData(LayerDto layer, List<String> files) {
+        for (String file : files) {
+            String fileName = ComHelper.getNameWithExt(file);
+            long timestamp = TimeFormatUtil.toMillis(fileName, "yyyyMMddHHmmss");
+            layer.getWaters().getData().add(timestamp);
+        }
+        layer.getDuration().setStart(layer.getWaters().getData().get(0));
+        layer.getDuration().setEnd(layer.getWaters().getData().get(layer.getWaters().getData().size() - 1));
+    }
+
+    /*public void setWaterData(LayerDto layer, List<String> files) {
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(new Date());
         calendar.set(Calendar.MILLISECOND, 0);
@@ -217,7 +265,7 @@
         }
         layer.getDuration().setStart(layer.getWaters().getData().get(0));
         layer.getDuration().setEnd(layer.getWaters().getData().get(layer.getWaters().getData().size() - 1));
-    }
+    }*/
 
     public void setWaterHeight(LayerDto layer, List<String> files) {
         int c = files.size(), step = files.size() / 10;
@@ -407,7 +455,7 @@
         for (int[] sizes : layer.getTerrain().getSize()) {
             String name = ComHelper.getNameWithExt(ds.GetDescription()) + "_" + sizes[0] + "_" + sizes[1];
             String tif = dto.getTemp() + File.separator + name + ".tif";
-            ComHelper.Resample(ds, tif, sizes[0], sizes[1], layer);
+//            ComHelper.Resample(ds, tif, sizes[0], sizes[1], layer);
             if (!new File(tif).exists()) continue;
 
             String png = flowPath + File.separator + sizes[0] + "_" + sizes[1] + ".png";
@@ -499,8 +547,8 @@
         layer.setFlowUrl("/hls/f" + path + ".m3u8");
 
         String json = JSON.toJSONString(layer);
-        // String json = JSONUtil.toJsonPrettyStr(layer);
-        String filePath = dto.getOutPath() + File.separator + "layer.json";
+//        String filePath = dto.getOutPath() + File.separator + "layer.json";
+        String filePath = dto.getOutPath() + File.separator + layer.getName();
 
         ComHelper.writeJson(filePath, json);
     }

--
Gitblit v1.9.3