From 3f85f5e14aafa6fcf1dd06fc8239f36eb9636427 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期五, 22 九月 2023 12:30:50 +0800 Subject: [PATCH] 去除无效分析节点 --- src/main/java/com/moon/server/service/data/RasterAnalysisService.java | 21 +++++++++++++-------- src/main/resources/application.yml | 2 +- 2 files changed, 14 insertions(+), 9 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 0c1d48b..05db3f1 100644 --- a/src/main/java/com/moon/server/service/data/RasterAnalysisService.java +++ b/src/main/java/com/moon/server/service/data/RasterAnalysisService.java @@ -188,7 +188,7 @@ */ public void analysisPolyline(AnalysisResultEntity entity, Dataset ds, Geometry geo, int size) { double[] transform = ds.GetGeoTransform(); - // double rotationX = transform[2]; double rotationY = transform[4] + double xSize = ds.getRasterXSize(), ySize = ds.getRasterXSize(); double minX = transform[0], pixelWidth = transform[1], maxY = transform[3], pixelHeight = transform[5]; double len = 0; @@ -206,6 +206,9 @@ int xPixel = (int) Math.floor((xy[0] - minX) / pixelWidth); int yPixel = (int) Math.floor((maxY - xy[1]) / Math.abs(pixelHeight)); + if (xPixel < 1 || xPixel > xSize || yPixel < 1 || yPixel > ySize) { + continue; + } List<Double> vals = new ArrayList<>(); for (int j = 1; j <= bandCount; j++) { @@ -222,19 +225,22 @@ */ 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 = Math.abs(transform[5]); + double minX = transform[0], pixelWidth = transform[1], maxY = transform[3], pixelHeight = Math.abs(transform[5]), rotationX = transform[2], rotationY = transform[4]; 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]) / pixelHeight); - int xMaxPixel = (int) Math.floor((env[1] - minX) / pixelWidth); - int yMaxPixel = (int) Math.floor((maxY - env[2]) / pixelHeight); + 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), ds.getRasterXSize()); + int yMaxPixel = Math.min((int) Math.floor((maxY - env[2]) / pixelHeight), ds.getRasterYSize()); int bandCount = ds.getRasterCount(); int width = Math.abs(xMaxPixel - xMinPixel); int height = Math.abs(yMaxPixel - yMinPixel); + if (width < 1 || height < 1) { + setError(entity, "鏌ヨ鑼冨洿鏃犳晥"); + return; + } if (width * height > StaticData.I64 * StaticData.I64) { readRasterForBlocks(entity, ds, bandCount, xMinPixel, yMinPixel, width, height); @@ -355,7 +361,6 @@ d += distance; } } - list.add(geo.GetPoint(c)); return list; diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 391d3a2..a7d152c 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -14,7 +14,7 @@ name: MoonServer # redis redis: - database: 0 + database: 1 #host: 192.168.20.83 host: 127.0.0.1 port: 6369 -- Gitblit v1.9.3