dcb
2025-06-19 68372fd1905515c5c8dbb9e3b158241994439e06
增加生成结果的水深过滤参数
已修改7个文件
59 ■■■■■ 文件已修改
src/main/java/com/se/nsl/config/PropertiesConfig.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/nsl/domain/vo/ResultVo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/nsl/helper/ComHelper.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/nsl/service/ResolveService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/nsl/service/ResultService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/nsl/service/TestService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-dev.yml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/nsl/config/PropertiesConfig.java
@@ -100,6 +100,8 @@
    private String keyDitch;
    private Double saveFilter;
    public String getVer() {
        return ver;
    }
@@ -463,4 +465,12 @@
    public void setKeyDitch(String keyDitch) {
        this.keyDitch = keyDitch;
    }
    public Double getSaveFilter() {
        return saveFilter;
    }
    public void setSaveFilter(Double saveFilter) {
        this.saveFilter = saveFilter;
    }
}
src/main/java/com/se/nsl/domain/vo/ResultVo.java
@@ -30,7 +30,7 @@
    public ResultVo() {
        this.save_variables = new ArrayList<>(Arrays.asList("depth", "xmomentum", "ymomentum"));
        this.save_start = 0;
        this.save_filter = 0.005D;
        this.save_filter = 0.015D;
    }
    public ResultVo(String saveName, int frames, int saveInterval,
src/main/java/com/se/nsl/helper/ComHelper.java
@@ -41,7 +41,8 @@
        }
    }
    public static void Resample(Dataset ds, String dest, int width, int height, LayerDto layer) {
    public static void cutAndResample(Dataset ds, String dest, int width, int height,
                                      LayerDto layer, boolean resample) {
        Vector<String> vector = new Vector<>();
        //vector.add("-s_srs");
        //vector.add("EPSG:" + 4548);
@@ -57,17 +58,19 @@
        //vector.add("" + layer.getExtension().getMaxy());
        //vector.add("-te_srs");
        //vector.add("EPSG:" + 4326);
        vector.add("-r");
        vector.add("bilinear"); // 双线性插值
        vector.add("-of");
        vector.add("GTiff");
        if (resample) {
            vector.add("-r");
            vector.add("bilinear"); // 双线性插值
            vector.add("-of");
            vector.add("GTiff");
        }
        WarpOptions warpOptions = new WarpOptions(vector);
        Dataset destDs = gdal.Warp(dest, new Dataset[]{ds}, warpOptions);
        destDs.delete();
    }
    public static void Resample(Dataset ds, Integer targetEpsg, String dest, Double destNoData, String wkt, Integer width, Integer height) {
    public static void cutAndResample(Dataset ds, Integer targetEpsg, String dest, Double destNoData, String wkt, Integer width, Integer height) {
        Vector<String> vector = new Vector<>();
        if (targetEpsg != null) {
            //vector.add("-s_srs");
@@ -98,7 +101,8 @@
        if (null != destDs) destDs.delete();
    }
    public static void Resample2(Dataset ds, String dest, int width, int height, LayerDto layer) {
    public static void coordinateTransformAndResample(Dataset ds, String dest, int width, int height,
                                                      LayerDto layer, boolean resample) {
        Vector<String> vector = new Vector<>();
        vector.add("-s_srs");
        vector.add("EPSG:" + 4548);
@@ -114,11 +118,13 @@
        //vector.add("" + layer.getExtension().getMaxy());
        //vector.add("-te_srs");
        //vector.add("EPSG:" + 4326);
        vector.add("-r");
        if (resample) {
            vector.add("-r");
//        vector.add("average");
        vector.add("cubic");
        vector.add("-of");
        vector.add("GTiff");
            vector.add("cubic");
            vector.add("-of");
            vector.add("GTiff");
        }
        WarpOptions warpOptions = new WarpOptions(vector);
        Dataset destDs = gdal.Warp(dest, new Dataset[]{ds}, warpOptions);
src/main/java/com/se/nsl/service/ResolveService.java
@@ -201,19 +201,19 @@
        String terrainFile = inPath + File.separator + config.getTerrainFile();
        Dataset dsDem = gdal.Open(terrainTif, gdalconstConstants.GA_ReadOnly);
        ComHelper.Resample(dsDem, null, terrainFile, null, wkt, null, null);
        ComHelper.cutAndResample(dsDem, null, terrainFile, null, wkt, null, null);
        dsDem.delete();
        String landuseFile = inPath + File.separator + config.getLanduseFile();
        Dataset dsLanduse = gdal.Open(landuseTif, gdalconstConstants.GA_ReadOnly);
        ComHelper.Resample(dsLanduse, null, landuseFile, null, wkt, null, null);
        ComHelper.cutAndResample(dsLanduse, null, landuseFile, null, wkt, null, null);
        dsLanduse.delete();
        if (stationTif != null) {
            String stationFile = inPath + File.separator + "Station.tif";
            Dataset dsStation = gdal.Open(stationTif, gdalconstConstants.GA_ReadOnly);
            ComHelper.Resample(dsStation, null, stationFile, null, wkt, null, null);
            ComHelper.cutAndResample(dsStation, null, stationFile, null, wkt, null, null);
            dsStation.delete();
        }
    }
@@ -348,6 +348,7 @@
        String startTime = TimeFormatUtil.formatDate(data.getStartTime());
        ConfigVo vo = new ConfigVo(terrainFile, landuseFile, terrainFile, rainfallFile,
                saveName, duration, saveFrames, saveMode, startTime);
        vo.getResult().setSave_filter(config.getSaveFilter());
        String configFile = config.getInPath() + File.separator + data.getInPath() + File.separator + data.getInPath() + ".json";
//        ComHelper.writeJson(configFile, JSON.toJSONString(vo));
        mapper.writeValue(new File(configFile), vo);
src/main/java/com/se/nsl/service/ResultService.java
@@ -111,7 +111,7 @@
        for (int[] sizes : layer.getTerrain().getSize()) {
            String tif = dto.getTemp() + File.separator + "terrain_" + sizes[0] + "_" + sizes[1] + ".tif";
            ComHelper.Resample(ds, tif, sizes[0], sizes[1], layer);
            ComHelper.cutAndResample(ds, tif, sizes[0], sizes[1], layer, false);
            if (!new File(tif).exists()) continue;
            String png = terrainPath + File.separator + sizes[0] + "_" + sizes[1] + ".png";
@@ -290,7 +290,7 @@
        for (int[] sizes : layer.getTerrain().getSize()) {
            String fileName = ComHelper.getNameWithExt(ds.GetDescription()) + "_" + sizes[0] + "_" + sizes[1];
            String tif = dto.getTemp() + File.separator + fileName + ".tif";
            ComHelper.Resample(ds, tif, sizes[0], sizes[1], layer);
            ComHelper.cutAndResample(ds, tif, sizes[0], sizes[1], layer, false);
            if (!new File(tif).exists()) continue;
            String png = waterPath + File.separator + sizes[0] + "_" + sizes[1] + ".png";
@@ -520,7 +520,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.cutAndResample(ds, tif, sizes[0], sizes[1], layer, false);
            if (!new File(tif).exists()) continue;
            String png = flowPath + File.separator + sizes[0] + "_" + sizes[1] + ".png";
src/main/java/com/se/nsl/service/TestService.java
@@ -144,7 +144,7 @@
        for (int[] sizes : layer.getTerrain().getSize()) {
            String tif = dto.getTemp() + File.separator + "terrain_" + sizes[0] + "_" + sizes[1] + ".tif";
            ComHelper.Resample(ds, tif, sizes[0], sizes[1], layer);
            ComHelper.cutAndResample(ds, tif, sizes[0], sizes[1], layer, true);
            if (!new File(tif).exists()) continue;
            String png = terrainPath + File.separator + sizes[0] + "_" + sizes[1] + ".png";
@@ -284,7 +284,7 @@
        for (int[] sizes : layer.getTerrain().getSize()) {
            String fileName = ComHelper.getNameWithExt(ds.GetDescription()) + "_" + sizes[0] + "_" + sizes[1];
            String tif = dto.getTemp() + File.separator + fileName + ".tif";
            ComHelper.Resample2(ds, tif, sizes[0], sizes[1], layer);
            ComHelper.coordinateTransformAndResample(ds, tif, sizes[0], sizes[1], layer, true);
            if (!new File(tif).exists()) continue;
            String png = waterPath + File.separator + sizes[0] + "_" + sizes[1] + ".png";
@@ -444,7 +444,6 @@
        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);
            if (!new File(tif).exists()) continue;
            String png = flowPath + File.separator + sizes[0] + "_" + sizes[1] + ".png";
src/main/resources/application-dev.yml
@@ -151,6 +151,7 @@
#  saveFrames: 3
  #生成帧数的间隔时间,单位是分钟,设置为5表示每隔5分钟生成一帧
  saveFrameInterval: 20
  saveFilter: 0.015
  # 土地利用: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