From 243582acd958f94790e92c3825a0b93249486300 Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期六, 02 十一月 2024 19:09:22 +0800
Subject: [PATCH] 修改切片tif数据功能

---
 src/main/java/com/se/simu/service/ResultService.java |   25 +++++++++++++------------
 1 files changed, 13 insertions(+), 12 deletions(-)

diff --git a/src/main/java/com/se/simu/service/ResultService.java b/src/main/java/com/se/simu/service/ResultService.java
index 8cb6be8..7f7371b 100644
--- a/src/main/java/com/se/simu/service/ResultService.java
+++ b/src/main/java/com/se/simu/service/ResultService.java
@@ -32,7 +32,6 @@
 import java.util.*;
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.stream.DoubleStream;
 
 /**
  * 澶勭悊缁撴灉鏈嶅姟绫�
@@ -272,7 +271,7 @@
         if (files.size() == 0 || files.size() != layer.getWaters().getData().size()) return null;
 
         processWaters(dto, files, layer);
-        
+
         return processBuilding(dto, files, layer);
     }
 
@@ -479,18 +478,20 @@
         double[] env = new double[4];
         building.getGeom().GetEnvelope(env);
 
-        int xMinPixel = Math.max((int) Math.floor((env[0] - minX) / pixelWidth), 1);
-        int yMinPixel = Math.max((int) Math.floor((maxY - env[3]) / pixelHeight), 1);
-        int xMaxPixel = Math.min((int) Math.floor((env[1] - minX) / pixelWidth), xSize);
-        int yMaxPixel = Math.min((int) Math.floor((maxY - env[2]) / pixelHeight), ySize);
-        if (xMaxPixel < 1 || yMaxPixel < 1 || xMaxPixel - xMinPixel < 0 || yMaxPixel - yMinPixel < 0) {
-            return null;
-        }
+        int startX = (int) Math.floor((env[0] - minX) / pixelWidth);
+        int endX = (int) Math.floor((env[1] - minX) / pixelWidth);
+        int startY = (int) Math.floor((maxY - env[3]) / Math.abs(pixelHeight));
+        int endY = (int) Math.floor((maxY - env[2]) / Math.abs(pixelHeight));
+        if (startX < 0) startX = 0;
+        if (startY < 0) startY = 0;
+        if (endX > ds.getRasterXSize()) endX = ds.getRasterXSize();
+        if (endY > ds.getRasterYSize()) endY = ds.getRasterYSize();
+        if (endX - startX < 1 || endY - startY < 1) return null;
 
-        int width = xMaxPixel - xMinPixel;
-        int height = yMaxPixel - yMinPixel;
+        int width = endX - startX;
+        int height = endY - startY;
         double[] pixelValues = new double[width * height];
-        ds.GetRasterBand(1).ReadRaster(xMinPixel, yMinPixel, width, height, pixelValues);
+        ds.GetRasterBand(1).ReadRaster(startX, startY, width, height, pixelValues);
 
         Double val = Arrays.stream(pixelValues).max().getAsDouble();
 

--
Gitblit v1.9.3