From 59b432c883011119649c283cc9d4c1d357599802 Mon Sep 17 00:00:00 2001
From: dcb <xgybdcb@163.com>
Date: 星期一, 30 六月 2025 15:13:56 +0800
Subject: [PATCH] 对于没有不能获取到数据的雨量计,使用其他雨量计数据填充

---
 src/main/java/com/se/nsl/service/SimuService.java |  102 +++++----------------------------------------------
 1 files changed, 10 insertions(+), 92 deletions(-)

diff --git a/src/main/java/com/se/nsl/service/SimuService.java b/src/main/java/com/se/nsl/service/SimuService.java
index ccc2b3d..b98d3ee 100644
--- a/src/main/java/com/se/nsl/service/SimuService.java
+++ b/src/main/java/com/se/nsl/service/SimuService.java
@@ -13,12 +13,9 @@
 import com.se.nsl.helper.StringHelper;
 import com.se.nsl.mapper.SimuMapper;
 import com.se.nsl.utils.CoordinateTransformer;
+import com.se.nsl.utils.SolverTifUtil;
 import com.se.nsl.utils.TimeFormatUtil;
 import lombok.extern.slf4j.Slf4j;
-import org.gdal.gdal.Band;
-import org.gdal.gdal.Dataset;
-import org.gdal.gdal.gdal;
-import org.gdal.gdalconst.gdalconstConstants;
 import org.springframework.stereotype.Service;
 import ucar.ma2.InvalidRangeException;
 
@@ -36,7 +33,7 @@
 @SuppressWarnings("ALL")
 public class SimuService {
     public static final String TIF_EXTSION = ".tif";
-    public static final String YYYY_MM_DD_HHMMSS = "yyyyMMddHHmmss";
+    public static final String YYYY_MM_DD_HH_MM_SS = "yyyyMMddHHmmss";
     @Resource
     SimuMapper simuMapper;
 
@@ -56,9 +53,7 @@
         Page<Simu> page = new Page<>(pageNum, pageSize);
         page.addOrder(OrderItem.desc("id"));
 
-        IPage<Simu> paged = simuMapper.selectPage(page, wrapper);
-
-        return paged;
+        return simuMapper.selectPage(page, wrapper);
     }
 
     private QueryWrapper<Simu> getPageWrapper(SimuVo vo, int pageNum, int pageSize) {
@@ -144,7 +139,7 @@
 
     public List<SimuResult> queryByPosition(double lon, double lat, String serviceName) {
         //transform coordiante from 4326 to 4548
-        double[] xy = CoordinateTransformer.transform(4326, 4548, lon, lat);
+        double[] xy = CoordinateTransformer.transform(4326, config.getEpsg(), lon, lat);
 //        System.out.println(String.format("杞崲鍓嶇殑鍧愭爣锛歺:%s,y:%s", lon, lat));
 //        System.out.println(String.format("杞崲鍚庣殑鍧愭爣锛歺:%s,y:%s", xy[0], xy[1]));
         //read from zarr
@@ -172,8 +167,7 @@
 //            index++;
 //        }
         File dem = new File(inPath, serviceName + File.separator + "DEM.tif");
-        ColumnRow cr = getColumnRow(dem.getAbsoluteFile(), x, y);
-        if (cr == null) return null;
+        //TODO
 
         File zarr = new File(inPath, serviceName + File.separator + "result.zarr");
         try {
@@ -186,14 +180,10 @@
         } catch (IOException | InvalidRangeException e) {
             throw new RuntimeException(e);
         }
-
-
         return null;
     }
 
     private SimuResult queryByTif(double[] xy, long time, String serviceName) {
-        double x = xy[0];
-        double y = xy[1];
         File inPath = new File(config.getInPath());
         String prefix = formatTime(time);
         String child = serviceName + File.separator + "depth" + File.separator + prefix + TIF_EXTSION;
@@ -201,22 +191,10 @@
         if (!tifFile.exists()) {
             return null;
         }
-
-        ColumnRow cr = getColumnRow(tifFile, x, y);
-        if (cr == null) return null;
-//        System.out.println("col:" + cr.col + " ,row:" + cr.row);
-        float depth = readPixelValue(cr.dataset, cr.col, cr.row, 1);
-        float velocity = calcVelocity(cr.dataset, cr.col, cr.row);
-        SimuResult result = new SimuResult();
-        result.setDepth(depth);
-        result.setVelocity(velocity);
-        result.setTime(time);
-        return  result;
+        return  SolverTifUtil.getSimuResult(tifFile, xy);
     }
 
     private List<SimuResult> queryByTif(double[] xy, String serviceName) {
-        double x = xy[0];
-        double y = xy[1];
         List<SimuResult> res = new ArrayList<>();
         File inPath = new File(config.getInPath());
         Path depthPath = Paths.get(inPath.getAbsolutePath(), serviceName, "depth");
@@ -225,75 +203,15 @@
         for (File tifFile : files) {
             String name = tifFile.getName();
             if (!name.endsWith(TIF_EXTSION)) continue;
-            ColumnRow cr = getColumnRow(tifFile, x, y);
-            if (cr == null) continue;
-            float depth = readPixelValue(cr.dataset, cr.col, cr.row, 1);
-            float velocity = calcVelocity(cr.dataset, cr.col, cr.row);
-            SimuResult result = new SimuResult();
-            result.setDepth(depth);
-            result.setVelocity(velocity);
-            String time = tifFile.getName().replace(".tif", "");
-            result.setTime(TimeFormatUtil.toMillis(time, YYYY_MM_DD_HHMMSS));
+            SimuResult result = SolverTifUtil.getSimuResult(tifFile, xy);
+            if (result == null) continue;
             res.add(result);
         }
-        return  res;
-    }
-
-    private static ColumnRow getColumnRow(File tifFile, double x, double y) {
-        Dataset dataset = gdal.Open(tifFile.getAbsolutePath(), gdalconstConstants.GA_ReadOnly);
-        // 鑾峰彇鍦扮悊鍙樻崲鍙傛暟锛�6鍏冪礌鏁扮粍锛�
-        // [0]: 宸︿笂瑙扻鍧愭爣, [1]: 鍍忓厓瀹藉害, [2]: X鏂瑰悜鏃嬭浆,
-        // [3]: 宸︿笂瑙扽鍧愭爣, [4]: Y鏂瑰悜鏃嬭浆, [5]: 鍍忓厓楂樺害锛堣礋鍊艰〃绀篩杞村悜涓嬶級
-        double[] geoTransform = dataset.GetGeoTransform();
-        //璁$畻鏍呮牸琛屽垪鍙�
-        int col = (int) ((x - geoTransform[0]) / geoTransform[1]);
-        int row = (int) ((geoTransform[3] - y) / Math.abs(geoTransform[5]));
-        int width = dataset.getRasterXSize();
-        int height = dataset.getRasterYSize();
-        if (col < 0 || col > width || row < 0 || row > height) {
-            log.warn("琛屽垪鍙蜂笉鍦╰if鑼冨洿鍐�");
-            return null;
-        }
-        return new ColumnRow(dataset, col, row);
-    }
-
-    private static class ColumnRow {
-        public final Dataset dataset;
-        public final int col;
-        public final int row;
-
-        public ColumnRow(Dataset dataset, int col, int row) {
-            this.dataset = dataset;
-            this.col = col;
-            this.row = row;
-        }
-    }
-
-    private float calcVelocity(Dataset dataset, int col, int row) {
-        float x = readPixelValue(dataset, col, row, 2);
-        float y = readPixelValue(dataset, col, row, 3);
-        float velocity = 0f;
-        if (Float.isNaN(x) && Float.isNaN(y)) {
-            velocity = 0f;
-        } else if (Float.isNaN(x)) {
-            velocity = y;
-        } else if (Float.isNaN(y)) {
-            velocity = x;
-        } else {
-            velocity = (float) Math.sqrt(x * x + y * y);
-        }
-        return velocity;
-    }
-
-    private float readPixelValue(Dataset dataset, int col, int row, int bandNum) {
-        Band band = dataset.GetRasterBand(bandNum);
-        float[] values = new float[1];
-        band.ReadRaster(col, row, 1, 1, values);
-        return values[0];
+        return res;
     }
 
     private String formatTime(long time) {
-        return TimeFormatUtil.formatTime(time, YYYY_MM_DD_HHMMSS);
+        return TimeFormatUtil.formatTime(time, YYYY_MM_DD_HH_MM_SS);
     }
 
 }

--
Gitblit v1.9.3