This is an automated email from the ASF dual-hosted git repository. desruisseaux pushed a commit to branch geoapi-4.0 in repository https://gitbox.apache.org/repos/asf/sis.git
commit c0e6706251ccd25ec3ade691e882934ea8f34e7d Author: Martin Desruisseaux <martin.desruisse...@geomatys.com> AuthorDate: Sat Apr 15 11:25:18 2023 +0200 More tests for `BandAggregateGridCoverage`. --- .../sis/internal/coverage/CommonDomainFinder.java | 8 +++-- .../grid/BandAggregateGridCoverageTest.java | 34 +++++++++++++++++++++- 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/coverage/CommonDomainFinder.java b/core/sis-feature/src/main/java/org/apache/sis/internal/coverage/CommonDomainFinder.java index f6d28d8698..4fa3b4b157 100644 --- a/core/sis-feature/src/main/java/org/apache/sis/internal/coverage/CommonDomainFinder.java +++ b/core/sis-feature/src/main/java/org/apache/sis/internal/coverage/CommonDomainFinder.java @@ -155,6 +155,7 @@ public final class CommonDomainFinder { * having the same origin. This criterion is arbitrary and may change in future version. */ GridGeometry fallback = null; + GridExtent location = null; for (final Map.Entry<GridGeometry,long[]> entry : gridTranslations.entrySet()) { final GridGeometry item = entry.getKey(); final GridExtent actual = item.getExtent(); @@ -164,16 +165,19 @@ public final class CommonDomainFinder { reference = item; return; } - if (fallback == null && extent.getLow().equals(item.getExtent().getLow())) { + // Arbitrary criterion (may be revisited in any future version). + if (fallback == null && expected.getLow().equals(actual.getLow())) { + location = expected; fallback = item; } } if (fallback == null) { fallback = reference; + location = extent; } setGridToCRS(items, fallback); try { - reference = fallback.relocate(extent); + reference = fallback.relocate(location); } catch (TransformException e) { throw new IllegalGridGeometryException(Resources.format(Resources.Keys.IncompatibleGridGeometries), e); } diff --git a/core/sis-feature/src/test/java/org/apache/sis/coverage/grid/BandAggregateGridCoverageTest.java b/core/sis-feature/src/test/java/org/apache/sis/coverage/grid/BandAggregateGridCoverageTest.java index ade6c2caa5..d1818094e6 100644 --- a/core/sis-feature/src/test/java/org/apache/sis/coverage/grid/BandAggregateGridCoverageTest.java +++ b/core/sis-feature/src/test/java/org/apache/sis/coverage/grid/BandAggregateGridCoverageTest.java @@ -75,7 +75,7 @@ public final class BandAggregateGridCoverageTest extends TestCase { * coordinates are different. The intersection is not equal to any source extent. */ @Test - public void testNoCommonGridGeometry() { + public void testDifferentExtent() { final GridCoverage c1 = createCoverage(-2, 4, 3, -1, 100, 200); final GridCoverage c2 = createCoverage(-1, 3, 3, -1, 300); final GridCoverage cr = processor.aggregateRanges(c1, c2); @@ -87,6 +87,38 @@ public final class BandAggregateGridCoverageTest extends TestCase { assertPixelsEqual(cr, 101, 201, 303, 102, 202, 304); } + /** + * Tests aggregation with two coverages having equivalent extent but different "grid to CRS". + * This test indirectly verifies that the {@link BandAggregateGridCoverage#gridTranslations} + * array is correctly computed and used. + */ + @Test + public void testDifferentGridToCRS() { + final GridCoverage c1 = createCoverage(-2, 4, 3, -1, 100, 200); + final GridCoverage c2 = createCoverage(-1, 2, 2, +1, 300); + final GridCoverage cr = processor.aggregateRanges(c1, c2); + assertEquals (c1.getGridGeometry(), cr.getGridGeometry()); + assertNotEquals(c2.getGridGeometry(), cr.getGridGeometry()); + assertEquals (3, cr.getSampleDimensions().size()); + assertPixelsEqual(cr, 100, 200, 300, 101, 201, 301, 102, 202, 302, + 103, 203, 303, 104, 204, 304, 105, 205, 305); + } + + /** + * Tests aggregation with two coverages having a translation in both grid extents and "grid to CRS" transforms. + */ + @Test + public void testDifferentExtentAndGridToCRS() { + final GridCoverage c1 = createCoverage(-2, 4, 3, -1, 100, 200); + final GridCoverage c2 = createCoverage( 0, 2, 2, +1, 300); + final GridCoverage cr = processor.aggregateRanges(c1, c2); + assertNotEquals(c1.getGridGeometry(), cr.getGridGeometry()); + assertNotEquals(c2.getGridGeometry(), cr.getGridGeometry()); + assertEquals (3, cr.getSampleDimensions().size()); + assertPixelsEqual(cr, 101, 201, 300, 102, 202, 301, + 104, 204, 303, 105, 205, 304); + } + /** * Returns a two-dimensional grid extents with the given bounding box. * The maximal coordinates are exclusive.