From 6827092435f97dcd7bf557eb01711d24f437ce55 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期一, 30 九月 2024 18:04:35 +0800 Subject: [PATCH] 1 --- src/main/java/com/se/simu/service/ResultService.java | 50 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 49 insertions(+), 1 deletions(-) diff --git a/src/main/java/com/se/simu/service/ResultService.java b/src/main/java/com/se/simu/service/ResultService.java index 84c57a4..64c8645 100644 --- a/src/main/java/com/se/simu/service/ResultService.java +++ b/src/main/java/com/se/simu/service/ResultService.java @@ -3,9 +3,16 @@ import cn.hutool.core.io.FileUtil; import cn.hutool.json.JSONUtil; import com.se.simu.config.PropertiesConfig; +import com.se.simu.domain.dto.ExtensionDto; import com.se.simu.domain.dto.LayerDto; import com.se.simu.domain.dto.ResultDto; +import com.se.simu.helper.GdalHelper; import lombok.extern.slf4j.Slf4j; +import org.gdal.gdal.Band; +import org.gdal.gdal.Dataset; +import org.gdal.gdal.gdal; +import org.gdal.gdalconst.gdalconst; +import org.gdal.ogr.Geometry; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -47,7 +54,48 @@ } private void copeTerrain(ResultDto dto, LayerDto layer) { - // + Dataset ds = null; + try { + ds = gdal.Open(dto.getTerrainFile(), gdalconst.GA_ReadOnly); + if (null == ds || 0 == ds.getRasterCount() || null == ds.GetSpatialRef()) return; + + setTerrainInfo(ds, layer); + setWaterInfo(dto, layer); + createTerrainPng(dto, ds, layer); + } finally { + if (null != ds) ds.delete(); + } + } + + private void setTerrainInfo(Dataset ds, LayerDto layer) { + Geometry minPoint = GdalHelper.getMinPoint(ds); + Geometry maxPoint = GdalHelper.getMaxPoint(ds); + double minx = getMinVal(minPoint.GetX(0), 10000000); + double miny = getMinVal(minPoint.GetY(0), 10000000); + double maxx = getMaxVal(maxPoint.GetX(0) + MAX_X_OFFSET, 10000000); + double maxy = getMaxVal(maxPoint.GetY(0), 10000000); + layer.setExtension(new ExtensionDto(minx, miny, maxx, maxy, Double.MAX_VALUE, Double.MIN_VALUE)); + + Band band = ds.GetRasterBand(1); + double[] mm = new double[2]; + band.ComputeRasterMinMax(mm, 0); + layer.getTerrain().setHeight(getMinVal(mm[0], 1000), getMaxVal(mm[1], 1000)); + } + + private static double getMinVal(double val, double radix) { + return ((long) Math.floor(val * radix)) / radix; + } + + private static double getMaxVal(double val, double radix) { + return ((long) Math.ceil(val * radix)) / radix; + } + + private void setWaterInfo(ResultDto dto, LayerDto layer) { + + } + + private void createTerrainPng(ResultDto dto, Dataset ds, LayerDto layer) { + } private void copeBuilding(ResultDto dto, LayerDto layer) { -- Gitblit v1.9.3