From 4fab1da943cc36e05c9732e3b510d00137273347 Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期四, 17 十月 2024 09:25:45 +0800
Subject: [PATCH] 1

---
 src/main/java/com/se/simu/service/ResultService.java |   41 ++++++++++++++++++++++-------------------
 1 files changed, 22 insertions(+), 19 deletions(-)

diff --git a/src/main/java/com/se/simu/service/ResultService.java b/src/main/java/com/se/simu/service/ResultService.java
index c98138e..cc15bf4 100644
--- a/src/main/java/com/se/simu/service/ResultService.java
+++ b/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();
         }
     }
 

--
Gitblit v1.9.3