| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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); |
| | | } |
| | |
| | | * 建筑 |
| | | */ |
| | | 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(); |
| | | } |
| | | } |
| | | |