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.