You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sis.apache.org by de...@apache.org on 2023/04/15 15:51:35 UTC

[sis] 01/04: More tests for `BandAggregateGridCoverage`.

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 <ma...@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.