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