src/main/java/com/se/simu/config/PropertiesConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/simu/domain/dto/BuildingDto.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/simu/domain/dto/ResultDto.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/simu/service/Result2Service.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/simu/service/ResultService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | 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