From 7d3438d452aecffd952cb5dca35ddf3eeec5e47b Mon Sep 17 00:00:00 2001 From: AM1729 Date: Mon, 13 Apr 2026 09:48:25 +0200 Subject: [PATCH 1/4] remove ws --- .../gears/utils/coverage/CoverageUtilities.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gears/src/main/java/org/hortonmachine/gears/utils/coverage/CoverageUtilities.java b/gears/src/main/java/org/hortonmachine/gears/utils/coverage/CoverageUtilities.java index 8e140c047..c11d01b4e 100644 --- a/gears/src/main/java/org/hortonmachine/gears/utils/coverage/CoverageUtilities.java +++ b/gears/src/main/java/org/hortonmachine/gears/utils/coverage/CoverageUtilities.java @@ -479,8 +479,13 @@ public static RegionMap getRegionParamsFromGridCoverage( GridCoverage2D gridCove Position lowerCorner = envelope.getLowerCorner(); double[] westSouth = lowerCorner.getCoordinate(); + westSouth[1] = Math.max(-90, Math.min(90, westSouth[1])); + westSouth[0] = Math.max(-180, Math.min(180, westSouth[0])); + Position upperCorner = envelope.getUpperCorner(); double[] eastNorth = upperCorner.getCoordinate(); + eastNorth[1] = Math.max(-90, Math.min(90, eastNorth[1])); + eastNorth[0] = Math.max(-180, Math.min(180, eastNorth[0])); GridGeometry2D gridGeometry = gridCoverage.getGridGeometry(); GridEnvelope2D gridRange = gridGeometry.getGridRange2D(); From a4418f241404dde4a3e52af2d2724bb435e29c28 Mon Sep 17 00:00:00 2001 From: AM1729 Date: Mon, 13 Apr 2026 10:29:50 +0200 Subject: [PATCH 2/4] fixes for GeographicCRS, checks AxisDir --- .../utils/coverage/CoverageUtilities.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/gears/src/main/java/org/hortonmachine/gears/utils/coverage/CoverageUtilities.java b/gears/src/main/java/org/hortonmachine/gears/utils/coverage/CoverageUtilities.java index c11d01b4e..39d94928c 100644 --- a/gears/src/main/java/org/hortonmachine/gears/utils/coverage/CoverageUtilities.java +++ b/gears/src/main/java/org/hortonmachine/gears/utils/coverage/CoverageUtilities.java @@ -55,6 +55,7 @@ import org.eclipse.imagen.iterator.RandomIterFactory; import org.eclipse.imagen.iterator.WritableRandomIter; import org.eclipse.imagen.media.range.NoDataContainer; +import org.geotools.api.referencing.cs.AxisDirection; import org.geotools.coverage.CoverageFactoryFinder; import org.geotools.coverage.GridSampleDimension; import org.geotools.coverage.grid.GridCoordinates2D; @@ -479,14 +480,8 @@ public static RegionMap getRegionParamsFromGridCoverage( GridCoverage2D gridCove Position lowerCorner = envelope.getLowerCorner(); double[] westSouth = lowerCorner.getCoordinate(); - westSouth[1] = Math.max(-90, Math.min(90, westSouth[1])); - westSouth[0] = Math.max(-180, Math.min(180, westSouth[0])); - Position upperCorner = envelope.getUpperCorner(); double[] eastNorth = upperCorner.getCoordinate(); - eastNorth[1] = Math.max(-90, Math.min(90, eastNorth[1])); - eastNorth[0] = Math.max(-180, Math.min(180, eastNorth[0])); - GridGeometry2D gridGeometry = gridCoverage.getGridGeometry(); GridEnvelope2D gridRange = gridGeometry.getGridRange2D(); int height = gridRange.height; @@ -500,7 +495,18 @@ public static RegionMap getRegionParamsFromGridCoverage( GridCoverage2D gridCove CoordinateReferenceSystem crs = gridCoverage.getCoordinateReferenceSystem(); // check if crs is geographic - if (crs != null && crs instanceof GeographicCRS) { + if (crs instanceof GeographicCRS) { + // limit to bounds check (lat, lon) or (lon, lat) + for (int i = 0; i < 2; i++) { + AxisDirection dir = crs.getCoordinateSystem().getAxis(i).getDirection(); + if (dir == AxisDirection.NORTH || dir == AxisDirection.SOUTH) { + westSouth[i] = Math.max(-90, Math.min(90, westSouth[i])); + eastNorth[i] = Math.max(-90, Math.min(90, eastNorth[i])); + } else if (dir == AxisDirection.EAST || dir == AxisDirection.WEST) { + westSouth[i] = Math.max(-180, Math.min(180, westSouth[i])); + eastNorth[i] = Math.max(-180, Math.min(180, eastNorth[i])); + } + } // convert to metric GeodeticCalculator gc = new GeodeticCalculator(crs); gc.setStartingGeographicPoint(westSouth[0], westSouth[1]); From 3b8160de57d59e839689e1ffeb1ea90905d1f488 Mon Sep 17 00:00:00 2001 From: AM1729 Date: Mon, 13 Apr 2026 10:35:39 +0200 Subject: [PATCH 3/4] use getDimension other then assuming 2 --- .../hortonmachine/gears/utils/coverage/CoverageUtilities.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gears/src/main/java/org/hortonmachine/gears/utils/coverage/CoverageUtilities.java b/gears/src/main/java/org/hortonmachine/gears/utils/coverage/CoverageUtilities.java index 39d94928c..2b92bdee7 100644 --- a/gears/src/main/java/org/hortonmachine/gears/utils/coverage/CoverageUtilities.java +++ b/gears/src/main/java/org/hortonmachine/gears/utils/coverage/CoverageUtilities.java @@ -497,7 +497,7 @@ public static RegionMap getRegionParamsFromGridCoverage( GridCoverage2D gridCove // check if crs is geographic if (crs instanceof GeographicCRS) { // limit to bounds check (lat, lon) or (lon, lat) - for (int i = 0; i < 2; i++) { + for (int i = 0; i < upperCorner.getDimension(); i++) { AxisDirection dir = crs.getCoordinateSystem().getAxis(i).getDirection(); if (dir == AxisDirection.NORTH || dir == AxisDirection.SOUTH) { westSouth[i] = Math.max(-90, Math.min(90, westSouth[i])); From b1c2e6665e9749a60968bc79431875c7a21b768a Mon Sep 17 00:00:00 2001 From: AM1729 Date: Mon, 13 Apr 2026 10:37:04 +0200 Subject: [PATCH 4/4] use equals instead of == --- .../gears/utils/coverage/CoverageUtilities.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gears/src/main/java/org/hortonmachine/gears/utils/coverage/CoverageUtilities.java b/gears/src/main/java/org/hortonmachine/gears/utils/coverage/CoverageUtilities.java index 2b92bdee7..3aa3a2146 100644 --- a/gears/src/main/java/org/hortonmachine/gears/utils/coverage/CoverageUtilities.java +++ b/gears/src/main/java/org/hortonmachine/gears/utils/coverage/CoverageUtilities.java @@ -494,15 +494,15 @@ public static RegionMap getRegionParamsFromGridCoverage( GridCoverage2D gridCove double yRes = XAffineTransform.getScaleY0(gridToCRS); CoordinateReferenceSystem crs = gridCoverage.getCoordinateReferenceSystem(); - // check if crs is geographic + // check if crs is geographic, angular if (crs instanceof GeographicCRS) { // limit to bounds check (lat, lon) or (lon, lat) for (int i = 0; i < upperCorner.getDimension(); i++) { AxisDirection dir = crs.getCoordinateSystem().getAxis(i).getDirection(); - if (dir == AxisDirection.NORTH || dir == AxisDirection.SOUTH) { + if (AxisDirection.NORTH.equals(dir) || AxisDirection.SOUTH.equals(dir)) { westSouth[i] = Math.max(-90, Math.min(90, westSouth[i])); eastNorth[i] = Math.max(-90, Math.min(90, eastNorth[i])); - } else if (dir == AxisDirection.EAST || dir == AxisDirection.WEST) { + } else if (AxisDirection.EAST.equals(dir) || AxisDirection.WEST.equals(dir)) { westSouth[i] = Math.max(-180, Math.min(180, westSouth[i])); eastNorth[i] = Math.max(-180, Math.min(180, eastNorth[i])); }