From cad4729d3e6b7a3ff7fcad45c8f592a7813f9c27 Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期四, 28 十一月 2024 09:44:02 +0800
Subject: [PATCH] 1

---
 src/main/java/com/se/simu/helper/ComHelper.java |   37 +++++++++++++++++++++++++++++++++++++
 1 files changed, 37 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/se/simu/helper/ComHelper.java b/src/main/java/com/se/simu/helper/ComHelper.java
index e56f848..c625043 100644
--- a/src/main/java/com/se/simu/helper/ComHelper.java
+++ b/src/main/java/com/se/simu/helper/ComHelper.java
@@ -20,6 +20,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Vector;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 @Slf4j
 @SuppressWarnings("ALL")
@@ -210,4 +211,40 @@
             if (null != ds) ds.delete();
         }
     }
+
+    private List<PointDto> getValues2(Dataset ds, Geometry g, double[] transform, int xSize, int ySize) {
+        double[] env = new double[4];
+        g.GetEnvelope(env);
+
+        int startX = (int) Math.floor((env[0] - transform[0]) / transform[1]);
+        int endX = (int) Math.floor((env[1] - transform[0]) / transform[1]);
+        int startY = (int) Math.floor((transform[3] - env[3]) / Math.abs(transform[5]));
+        int endY = (int) Math.floor((transform[3] - env[2]) / Math.abs(transform[5]));
+        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;
+
+        List<XYDto> xyList = new ArrayList<>();
+        for (int x = startX; x <= endX; x++) {
+            for (int y = startY; y <= endY; y++) {
+                xyList.add(new XYDto(x, y));
+            }
+        }
+
+        List<PointDto> points = new CopyOnWriteArrayList<>();
+        xyList.stream().forEach(xy -> {
+            double X = transform[0] + xy.getX() * transform[1] + xy.getY() * transform[2];
+            double Y = transform[3] + xy.getX() * transform[4] + xy.getY() * transform[5];
+
+            float[] values = new float[1];
+            ds.GetRasterBand(1).ReadRaster(xy.getX(), xy.getY(), 1, 1, values);
+            if (Float.isNaN(values[0]) || values[0] < -999 || !ComHelper.isContains(g, X, Y)) return;
+
+            points.add(new PointDto(X, Y, values[0]));
+        });
+
+        return points;
+    }
 }

--
Gitblit v1.9.3