1
13693261870
2024-10-17 4fab1da943cc36e05c9732e3b510d00137273347
1
已添加1个文件
已修改5个文件
114 ■■■■ 文件已修改
src/main/java/com/se/simu/config/PropertiesConfig.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/simu/domain/dto/BuildingDto.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/simu/domain/dto/ResultDto.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/simu/service/Result2Service.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/simu/service/ResultService.java 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/simu/config/PropertiesConfig.java
@@ -70,6 +70,8 @@
    private String buildingFile;
    private String buildingKey;
    private String waterPath;
    private String flowPath;
@@ -305,4 +307,12 @@
    public void setSww2tifBat(String sww2tifBat) {
        this.sww2tifBat = sww2tifBat;
    }
    public String getBuildingKey() {
        return buildingKey;
    }
    public void setBuildingKey(String buildingKey) {
        this.buildingKey = buildingKey;
    }
}
src/main/java/com/se/simu/domain/dto/BuildingDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
package com.se.simu.domain.dto;
import org.gdal.ogr.Geometry;
/**
 * å»ºç­‘物数据实体类
 *
 * @author WWW
 * @date 2024-10-17
 */
public class BuildingDto {
    private String id;
    private Geometry geom;
    public BuildingDto() {
    }
    public BuildingDto(String id, Geometry geom) {
        this.id = id;
        this.geom = geom;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public Geometry getGeom() {
        return geom;
    }
    public void setGeom(Geometry geom) {
        this.geom = geom;
    }
}
src/main/java/com/se/simu/domain/dto/ResultDto.java
@@ -3,9 +3,7 @@
import cn.hutool.core.io.FileUtil;
import java.io.File;
import java.util.Dictionary;
import java.util.HashMap;
import java.util.Map;
import java.util.*;
/**
 * ç»“果实体类
@@ -30,11 +28,14 @@
    private Map<String, float[]> buildings;
    private List<BuildingDto> buildingList;
    public ResultDto() {
        this.buildings = new HashMap<>();
        this.buildingList = new ArrayList<>();
    }
    public ResultDto(String serviceName, String terrainFile, String buildingFile, String waterPath, String flowPath, String outPath, String temp) {
    public ResultDto(String serviceName, String terrainFile, String buildingFile, String waterPath, String flowPath, String outPath) {
        this();
        this.serviceName = serviceName;
        this.terrainFile = terrainFile;
@@ -120,4 +121,12 @@
    public void setBuildings(Map<String, float[]> buildings) {
        this.buildings = buildings;
    }
    public List<BuildingDto> getBuildingList() {
        return buildingList;
    }
    public void setBuildingList(List<BuildingDto> buildingList) {
        this.buildingList = buildingList;
    }
}
src/main/java/com/se/simu/service/Result2Service.java
@@ -50,8 +50,7 @@
                "D:\\simu\\input\\tongzhou-local-mesh2-buildings.tif",
                "D:\\simu\\input\\waters",
                "D:\\simu\\input\\flows",
                "D:\\simu\\out",
                "");
                "D:\\simu\\out");
        LayerDto layer = new LayerDto(config.getVer(), 4528, config.getSizes());
        process(dto, layer);
@@ -66,8 +65,7 @@
                basePath + config.getBuildingFile(),
                basePath + config.getWaterPath(),
                basePath + config.getFlowPath(),
                config.getOutPath(),
                "");
                config.getOutPath());
        LayerDto layer = new LayerDto(config.getVer(), data.getEpsg(), config.getSizes());
        process(dto, layer);
    }
src/main/java/com/se/simu/service/ResultService.java
@@ -3,6 +3,7 @@
import cn.hutool.core.io.FileUtil;
import com.alibaba.fastjson.JSON;
import com.se.simu.config.PropertiesConfig;
import com.se.simu.domain.dto.BuildingDto;
import com.se.simu.domain.dto.ExtensionDto;
import com.se.simu.domain.dto.LayerDto;
import com.se.simu.domain.dto.ResultDto;
@@ -14,7 +15,7 @@
import org.gdal.gdal.WarpOptions;
import org.gdal.gdal.gdal;
import org.gdal.gdalconst.gdalconst;
import org.gdal.ogr.Geometry;
import org.gdal.ogr.*;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -48,8 +49,7 @@
                basePath + config.getBuildingFile(),
                basePath + config.getWaterPath(),
                basePath + config.getFlowPath(),
                config.getOutPath(),
                "");
                config.getOutPath());
        LayerDto layer = new LayerDto(config.getVer(), data.getEpsg(), config.getSizes());
        process(dto, layer);
    }
@@ -209,28 +209,31 @@
     * å»ºç­‘
     */
    private void copeBuilding(ResultDto dto, LayerDto layer) {
        Dataset ds = null;
        Driver driver = null;
        DataSource dataSource = null;
        Layer shpLayer = null;
        try {
            ds = gdal.Open(dto.getBuildingFile(), gdalconst.GA_ReadOnly);
            if (null == ds || 0 == ds.getRasterCount()) return;
            driver = ogr.GetDriverByName("ESRI shapefile");
            if (null == driver) return;
            for (int[] sizes : layer.getTerrain().getSize()) {
                String tif = dto.getTemp() + File.separator + "building_" + sizes[0] + "_" + sizes[1] + ".tif";
                Resample(ds, tif, sizes[0], sizes[1], layer);
                if (!new File(tif).exists()) continue;
            dataSource = driver.Open(dto.getBuildingFile());
            if (null == dataSource) return;
                Dataset dataset = gdal.Open(tif, gdalconst.GA_ReadOnly);
                if (null == dataset || 0 == dataset.getRasterCount()) return;
            shpLayer = dataSource.GetLayer(0);
            if (shpLayer.GetFeatureCount() < 1) return;
                float[] buffer = new float[sizes[0] * sizes[1]];
                //dataset.GetRasterBand(1).ReadRaster(0, 0, sizes[0], sizes[1], buffer, sizes[0], sizes[1], 0, 0);
                dataset.GetRasterBand(1).ReadRaster(0, 0, sizes[0], sizes[1], buffer);
                dto.getBuildings().put(sizes[0] + "_" + sizes[1], buffer);
            do {
                Feature f = shpLayer.GetNextFeature();
                if (null == f) break;
                dataset.delete();
            }
                String id = f.GetFieldAsString(config.getBuildingKey());
                BuildingDto building = new BuildingDto(id, f.GetGeometryRef());
                dto.getBuildingList().add(building);
            } while (true);
        } finally {
            if (null != ds) ds.delete();
            if (null != shpLayer) shpLayer.delete();
            if (null != dataSource) dataSource.delete();
            if (null != driver) driver.delete();
        }
    }
src/main/resources/application.yml
@@ -127,5 +127,6 @@
  # è¾“出文件
  terrainFile: DEM.tif
  buildingFile: buildings_inside.shp
  buildingKey: seid
  waterPath: depth
  flowPath: velocity