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