wuww
2025-05-14 d6a4e2730aeff24b8e28eee486926b945bf671d6
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;
@@ -135,7 +138,7 @@
    /**
     * 初始化参数
     */
    private void initArgs(SimuData data) throws IOException {
    public void initArgs(SimuData data) throws IOException {
        String inPath = config.getInPath() + File.separator + data.getInPath();
        createDir(inPath);
        createDir(inPath + File.separator + "depth");
@@ -144,7 +147,7 @@
        // 临时复制高程tif,以后需要自行切割
        File uwBat = new File(config.getUwSolverBat());
        String sourceTif = uwBat.getParent() + File.separator + "data" + File.separator + "Hillzone.tif";
        String sourceTif = uwBat.getParent() + File.separator + "case1" + File.separator + "LiuLiMiaoZhen_5m_f32.tif";
        String targetTif = inPath + File.separator + config.getDemFile();
        Files.copy(Paths.get(sourceTif), Paths.get(targetTif), StandardCopyOption.REPLACE_EXISTING);
    }
@@ -157,7 +160,7 @@
        f.mkdirs();
    }
    private void createRainfallFile(Simu simu, SimuData data) throws Exception {
    public void createRainfallFile(Simu simu, SimuData data) throws Exception {
        List<Rainfall> rainfalls = data.getRainfalls();
        if (null == rainfalls || rainfalls.size() < 2) createRainfall(simu);
@@ -185,6 +188,7 @@
        }
        //list.add(prefix + YYYYMDHM.format(rainfalls.get(c).getTime()) + getMinVal(rainfalls.get(c).getIntensity() / unit, DIGIT));
        list.add(String.format("%s%s%f", prefix, YYYYMDHM.format(rainfalls.get(c).getTime()), getMinVal(rainfalls.get(c).getIntensity() / unit, DIGIT)));
        list.add(0, "1 " + (list.size() - 1));
        Files.write(Paths.get(rainfallFile), list, StandardCharsets.UTF_8);
    }
@@ -215,7 +219,7 @@
    /**
     * 调用UWSolver
     */
    private String callUwSolver(SimuData data) throws Exception {
    public String callUwSolver(SimuData data) throws Exception {
        File uwBat = new File(config.getUwSolverBat());
        int duration = 3600 * data.getDuration(); // 秒数
@@ -224,39 +228,61 @@
        }
        String inPath = config.getInPath() + File.separator + data.getInPath();
        String terrainFile = (inPath + File.separator + config.getDemFile()).replace("\\", "/");
        String rainfallFile = (inPath + File.separator + "rainfall.dat").replace("\\", "/");
        ConfigVo vo = new ConfigVo(duration, config.getSaveFrames(), terrainFile, terrainFile, terrainFile, rainfallFile);
        String terrainFile = (inPath + File.separator + config.getDemFile());
        String rainfallFile = (inPath + File.separator + "rainfall.dat");
        String saveName = inPath + File.separator + "result.zarr";
        ConfigVo vo = new ConfigVo(terrainFile, terrainFile, terrainFile, rainfallFile, saveName, duration, config.getSaveFrames());
        String configFile = config.getInPath() + File.separator + data.getInPath() + File.separator + data.getInPath() + ".json";
        ComHelper.writeJson(configFile, JSON.toJSONString(vo));
        String cmd = String.format("%s %s", config.getUwSolverBat(), configFile);
        String cmd = String.format("%s \"%s\"", config.getUwSolverBat(), configFile);
        return callBat(cmd);
        return callBat2(cmd);
    }
    /**
     * 调用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 {
@@ -298,8 +324,8 @@
    }
    private void createNsl(SimuData data) throws Exception {
        String inPath = config.getInPath() + File.separator + data.getInPath() + File.separator + "depth";
        procTifs(inPath, inPath, data.getStartTime());
        /*String inPath = config.getInPath() + File.separator + data.getInPath() + File.separator + "depth";
        procTifs(inPath, inPath, data.getStartTime());*/
        testService.test(data);
    }
@@ -397,6 +423,7 @@
            cal.add(Calendar.MINUTE, 1);
        }
        list.add(0, "1 " + (list.size() - 1));
        Files.write(Paths.get(dat), list, StandardCharsets.UTF_8);
    }