From 45e5ecaf4a407f95e318da1cf7380c669899b386 Mon Sep 17 00:00:00 2001 From: wuww <252740454@qq.com> Date: 星期三, 14 五月 2025 10:29:54 +0800 Subject: [PATCH] 解决调用zarr2tif出错 --- data/ai.backup | 0 src/main/java/com/se/nsl/controller/TestController.java | 17 +++- src/main/java/com/se/nsl/service/ResolveService.java | 54 +++++++++--- src/main/resources/application-prod.yml | 30 +++++-- src/main/java/com/se/nsl/domain/dto/Zarr2Tif.java | 111 +++++++++++++++++++++++++++ 5 files changed, 183 insertions(+), 29 deletions(-) diff --git a/data/ai.backup b/data/ai.backup index da8ad37..bd64942 100644 --- a/data/ai.backup +++ b/data/ai.backup Binary files differ diff --git a/src/main/java/com/se/nsl/controller/TestController.java b/src/main/java/com/se/nsl/controller/TestController.java index 192fefc..ebb9106 100644 --- a/src/main/java/com/se/nsl/controller/TestController.java +++ b/src/main/java/com/se/nsl/controller/TestController.java @@ -3,6 +3,7 @@ import com.se.nsl.config.PropertiesConfig; import com.se.nsl.domain.po.DataPo; import com.se.nsl.domain.po.Region; +import com.se.nsl.domain.po.SimuData; import com.se.nsl.domain.vo.R; import com.se.nsl.helper.GdalHelper; import com.se.nsl.helper.ShpHelper; @@ -313,11 +314,17 @@ @ApiOperation(value = "10.褰撳墠鏃堕棿 *") @GetMapping("/getTime") - public Object getTime() { - String rs = resolveService.createRainfallCsv("D:\\360\\zt.csv", "姝f�佸垎甯�", 100, 10, 1); - rs = resolveService.createRainfallCsv("D:\\360\\pj.csv", "骞冲潎鍒嗗竷", 100, 10, 1); - rs = resolveService.createRainfallCsv("D:\\360\\bdpj.csv", "娉㈠姩骞冲潎鍒嗗竷", 100, 10, 1); - rs = resolveService.createRainfallCsv("D:\\360\\cxss.csv", "鎸佺画涓婂崌", 100, 10, 1); + public Object getTime() throws Exception { + //String rs = resolveService.createRainfallCsv("D:\\360\\zt.csv", "姝f�佸垎甯�", 100, 10, 1); + //rs = resolveService.createRainfallCsv("D:\\360\\pj.csv", "骞冲潎鍒嗗竷", 100, 10, 1); + //rs = resolveService.createRainfallCsv("D:\\360\\bdpj.csv", "娉㈠姩骞冲潎鍒嗗竷", 100, 10, 1); + //rs = resolveService.createRainfallCsv("D:\\360\\cxss.csv", "鎸佺画涓婂崌", 100, 10, 1); + + SimuData data = new SimuData(); + data.setStartTime(new Date()); + data.setInPath("20250504203823"); + + String rs = resolveService.callZarr2tif(data); return (Object) System.currentTimeMillis(); } diff --git a/src/main/java/com/se/nsl/domain/dto/Zarr2Tif.java b/src/main/java/com/se/nsl/domain/dto/Zarr2Tif.java new file mode 100644 index 0000000..ac573b0 --- /dev/null +++ b/src/main/java/com/se/nsl/domain/dto/Zarr2Tif.java @@ -0,0 +1,111 @@ +package com.se.nsl.domain.dto; + +import com.se.nsl.helper.StringHelper; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.List; + +@SuppressWarnings("ALL") +public class Zarr2Tif { + private List<String> variables; + + private String zarr_file; + + private String geotiff_dir; + + private String terrain_file; + + private String start_timestamp; + + private List<Integer> frame_range; + + private boolean fliplr; + + private boolean flipud; + + public Zarr2Tif() { + variables = new ArrayList<>(Arrays.asList("depth", "xmomentum", "ymomentum")); + frame_range = null; + fliplr = false; + flipud = false; + } + + public Zarr2Tif(String zarrFile, String geotiffDir, String terrainFile, String startTimestamp) { + this(); + + this.zarr_file = zarrFile.replace("\\", "/"); + this.geotiff_dir = geotiffDir.replace("\\", "/"); + this.terrain_file = terrainFile.replace("\\", "/"); + this.start_timestamp = startTimestamp; + } + + public Zarr2Tif(String zarrFile, String geotiffDir, String terrainFile, Date startTime) { + this(zarrFile, geotiffDir, terrainFile, StringHelper.YMDHMS_FORMAT.format(startTime)); + } + + public List<String> getVariables() { + return variables; + } + + public void setVariables(List<String> variables) { + this.variables = variables; + } + + public String getZarr_file() { + return zarr_file; + } + + public void setZarr_file(String zarr_file) { + this.zarr_file = zarr_file; + } + + public String getGeotiff_dir() { + return geotiff_dir; + } + + public void setGeotiff_dir(String geotiff_dir) { + this.geotiff_dir = geotiff_dir; + } + + public String getTerrain_file() { + return terrain_file; + } + + public void setTerrain_file(String terrain_file) { + this.terrain_file = terrain_file; + } + + public String getStart_timestamp() { + return start_timestamp; + } + + public void setStart_timestamp(String start_timestamp) { + this.start_timestamp = start_timestamp; + } + + public List<Integer> getFrame_range() { + return frame_range; + } + + public void setFrame_range(List<Integer> frame_range) { + this.frame_range = frame_range; + } + + public boolean isFliplr() { + return fliplr; + } + + public void setFliplr(boolean fliplr) { + this.fliplr = fliplr; + } + + public boolean isFlipud() { + return flipud; + } + + public void setFlipud(boolean flipud) { + this.flipud = flipud; + } +} diff --git a/src/main/java/com/se/nsl/service/ResolveService.java b/src/main/java/com/se/nsl/service/ResolveService.java index c4f0d3a..73b1841 100644 --- a/src/main/java/com/se/nsl/service/ResolveService.java +++ b/src/main/java/com/se/nsl/service/ResolveService.java @@ -5,6 +5,7 @@ import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; import com.se.nsl.config.PropertiesConfig; +import com.se.nsl.domain.dto.Zarr2Tif; import com.se.nsl.domain.po.Rainfall; import com.se.nsl.domain.po.Simu; import com.se.nsl.domain.po.SimuData; @@ -20,8 +21,10 @@ import org.springframework.util.StringUtils; import javax.annotation.Resource; +import java.io.BufferedReader; import java.io.File; import java.io.IOException; +import java.io.InputStreamReader; import java.math.BigDecimal; import java.math.RoundingMode; import java.nio.charset.StandardCharsets; @@ -239,24 +242,45 @@ /** * 璋冪敤zarr2tif */ - private String callZarr2tif(SimuData data) throws Exception { - String zarr2tifBat = config.getZarr2tifBat(); - File dir = new File(zarr2tifBat).getParentFile(); - String configJson = new File(dir, "config.json").getAbsolutePath(); + public String callZarr2tif(SimuData data) throws Exception { + 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 jsonPath = inPath + File.separator + "zarr2tif.json"; - String cmd = String.format("%s \"%s\"", zarr2tifBat, configJson); - String res = callBat(cmd); + Zarr2Tif zarr2Tif = new Zarr2Tif(zarrFile, geotiffDir, terrainFile, data.getStartTime()); + ComHelper.writeJson(jsonPath, JSON.toJSONString(zarr2Tif)); - File resultTifDir = new File(dir, "result_tif"); - File targetDir = new File(config.getInPath(), data.getInPath() + File.separator + "depth"); - System.out.println("targetDir:" + targetDir); - File[] files = resultTifDir.listFiles(); - for (File file : files) { - File target = new File(targetDir, file.getName()); - Files.copy(file.toPath(), target.toPath()); + String cmd = String.format("%s \"%s\"", config.getZarr2tifBat(), jsonPath); + + return callBat2(cmd); + } + + private String callBat2(String cmd) { + try { + ProcessBuilder pb = new ProcessBuilder("cmd", "/c", cmd); + pb.redirectErrorStream(true); // 鍚堝苟閿欒娴佸埌鏍囧噯杈撳嚭 + + Process process = pb.start(); + process.getOutputStream().close(); + + //StringBuilder sb = new StringBuilder(); + try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream(), "GBK"))) { + String line; + while ((line = reader.readLine()) != null) { + System.out.println(line); + //sb.append(line); + } + } + + int exitCode = process.waitFor(); + + return "ok"; // sb.toString(); + } catch (Exception ex) { + log.error(ex.getMessage(), ex); + return null; } - - return res; } /*private String callZarr2tif(SimuData data) throws Exception { diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index a4eb0a0..e949b32 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -1,5 +1,5 @@ server: - port: 8079 + port: 8078 servlet: context-path: /api @@ -105,16 +105,17 @@ # 妯℃嫙椤圭洰 simu-app: # 椤圭洰妯℃嫙鏂囦欢涓婁紶瀛樻斁鐨勪綅缃� - filePath: D:\simu\files + filePath: D:\other\simu\files config: ver: 0.2 cacheTime: 60 # Gdal椹卞姩鐩綍 - gdalPath: H:/simu/release-1928-x64-dev/release-1928-x64/bin + #gdalPath: D:\soft\release-1928-x64-dev\release-1928-x64\bin + gdalPath: C:\Program Files\GDAL #inPath: D:\simu\in - inPath: H:\simu\uwsolver - outPath: H:\simu\out + inPath: D:\other\simu\uwsolver + outPath: D:\other\simu\out host: http://106.120.22.26:8024/ user: admin pwd: admin @@ -138,9 +139,20 @@ rainPeriod: 10 # 娴侀噺鍗曚綅锛孡PS锛堝崌/绉掞級銆丆MS锛堢珛鏂圭背/绉�)銆丆FS(绔嬫柟鑻卞昂/绉�) flowUnits: CMS - solverBat: H:\simu\uwsolver\run_solver.bat - sww2tifBat: H:\simu\uwsolver\sww2tif.bat - #sizes: 64,128,256,512,1024,2048 + solverBat: D:\other\simu\uwsolver\run_solver.bat + sww2tifBat: D:\other\simu\uwsolver\sww2tif.bat + uwSolverBat: D:\other\simu\CudaUWSolver.Demo.NoVis.20250430\start.bat + #zarr2tifBat: D:\other\simu\zarr2tif1.0\start.bat + #zarr2tifBat: D:\other\simu\zarr2tif-2.0-mkl\start.bat + zarr2tifBat: D:\other\simu\zarr2tif-2.1\start.bat + createRainfall: '"C:\Program Files\Python310\python.exe" D:\terrait\NslServer\data\CreatRainfall.py' + rainfallTitle: Station Longitude Latitude Year Month Day Hour Minute Intensity + rainfallSite: beijing + epsg: 4548 + saveFrames: 10 + # 鍦熷湴鍒╃敤锛�1-Cropland,2-Forest,3-Shrub,4-Grassland,5-Water,6-Snow/Ice,7-Barren,8-Impervious,9-Wetland + landuse: 2 + #sizes: 64,128,256,512,1024,2048,4096 sizes: 1024 # 杈撳嚭鏂囦欢 terrainFile: DEM.tif @@ -150,4 +162,4 @@ waterPath: depth flowPath: velocity copyTif: false - tifPath: D:\鍩庡競鍐呮稘\sem\tongzhou_1m_tif\tongzhou_raster_4548_1m_clip_river_fill.tif + tifPath: D:\other\simu\uwsolver\5ca43c87cd8e48c5a9c5399a5da46dbc\tongzhou_raster_4548_1m_clip_river_fill.tif -- Gitblit v1.9.3