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