From c028a7698252c01dc1fd27e44c97676e7f8fbb59 Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期二, 12 九月 2023 09:51:38 +0800
Subject: [PATCH] 优化栅格查询的点分析

---
 src/main/java/com/moon/server/service/data/RasterAnalysisService.java |   21 +++++++++++++++++----
 1 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/moon/server/service/data/RasterAnalysisService.java b/src/main/java/com/moon/server/service/data/RasterAnalysisService.java
index 8c02940..e6531e3 100644
--- a/src/main/java/com/moon/server/service/data/RasterAnalysisService.java
+++ b/src/main/java/com/moon/server/service/data/RasterAnalysisService.java
@@ -105,6 +105,19 @@
      * 鍒嗘瀽鐐�
      */
     public void analysisPoint(AnalysisResultEntity entity, Dataset ds, Geometry geo, int size) {
+        double[] transform = ds.GetGeoTransform();
+        double pixelWidth = transform[1], pixelHeight = Math.abs(transform[5]);
+
+        double buffer = Math.max(pixelWidth, pixelHeight) * size;
+        geo = geo.Buffer(buffer);
+
+        analysisPolygon(entity, ds, geo);
+    }
+
+    /**
+     * 鍒嗘瀽鐐�
+     */
+    public void analysisPoint2(AnalysisResultEntity entity, Dataset ds, Geometry geo, int size) {
         double x = geo.GetX(), y = geo.GetY();
         double[] transform = ds.GetGeoTransform();
         // double rotationX = transform[2]; double rotationY = transform[4]
@@ -134,7 +147,7 @@
         // double rotationX = transform[2]; double rotationY = transform[4]
         double minX = transform[0], pixelWidth = transform[1], maxY = transform[3], pixelHeight = Math.abs(transform[5]);
 
-        double buffer = Math.max(Math.abs(pixelWidth), Math.abs(pixelHeight)) * size;
+        double buffer = Math.max(pixelWidth, pixelHeight) * size;
         double[] env = new double[4];
         geo = geo.Buffer(buffer);
         geo.GetEnvelope(env);
@@ -174,14 +187,14 @@
     public void analysisPolygon(AnalysisResultEntity entity, Dataset ds, Geometry geo) {
         double[] transform = ds.GetGeoTransform();
         // double rotationX = transform[2]; double rotationY = transform[4]
-        double minX = transform[0], pixelWidth = transform[1], maxY = transform[3], pixelHeight = transform[5];
+        double minX = transform[0], pixelWidth = transform[1], maxY = transform[3], pixelHeight = Math.abs(transform[5]);
         double[] env = new double[4];
         geo.GetEnvelope(env);
 
         int xMinPixel = (int) Math.floor((env[0] - minX) / pixelWidth);
-        int yMinPixel = (int) Math.floor((maxY - env[3]) / Math.abs(pixelHeight));
+        int yMinPixel = (int) Math.floor((maxY - env[3]) / pixelHeight);
         int xMaxPixel = (int) Math.floor((env[1] - minX) / pixelWidth);
-        int yMaxPixel = (int) Math.floor((maxY - env[2]) / Math.abs(pixelHeight));
+        int yMaxPixel = (int) Math.floor((maxY - env[2]) / pixelHeight);
 
         int bandCount = ds.getRasterCount();
         int geoWidth = Math.abs(xMaxPixel - xMinPixel);

--
Gitblit v1.9.3