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