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 54302eaec10eb83224417ff1d037f47b33b7f406
Author: Martin Desruisseaux <martin.desruisse...@geomatys.com>
AuthorDate: Tue Apr 18 17:17:58 2023 +0200

    Add a convenience method for building a `GridGeometry` from only an 
envelope.
---
 .../sis/coverage/grid/GridCoverageBuilder.java      |  2 +-
 .../org/apache/sis/coverage/grid/GridGeometry.java  | 21 +++++++++++++++++++++
 .../sis/coverage/grid/GridDerivationTest.java       |  6 +++---
 .../apache/sis/coverage/grid/GridGeometryTest.java  |  5 +++++
 .../java/org/apache/sis/storage/CoverageQuery.java  |  3 +--
 5 files changed, 31 insertions(+), 6 deletions(-)

diff --git 
a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverageBuilder.java
 
b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverageBuilder.java
index 4119687eac..c495a84f89 100644
--- 
a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverageBuilder.java
+++ 
b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverageBuilder.java
@@ -238,7 +238,7 @@ public class GridCoverageBuilder {
      * @see GridGeometry#GridGeometry(GridExtent, Envelope, GridOrientation)
      */
     public GridCoverageBuilder setDomain(final Envelope domain) {
-        return setDomain(domain == null ? null : new GridGeometry(null, 
domain, GridOrientation.HOMOTHETY));
+        return setDomain(domain == null ? null : new GridGeometry(domain));
     }
 
     /**
diff --git 
a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java 
b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
index d2c22a6718..1f3f6207b8 100644
--- 
a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
+++ 
b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
@@ -708,6 +708,27 @@ public class GridGeometry implements LenientComparable, 
Serializable {
         resolution  = null;
     }
 
+    /**
+     * Creates a grid geometry with only an envelope.
+     *
+     * @param  envelope  the envelope together with CRS of the "real world" 
coordinates.
+     * @throws IllegalArgumentException if the envelope has no CRS and only 
NaN coordinate values.
+     *
+     * @since 1.4
+     */
+    public GridGeometry(final Envelope envelope) {
+        ArgumentChecks.ensureNonNull("envelope", envelope);
+        this.envelope = ImmutableEnvelope.castOrCopy(envelope);
+        if (this.envelope.isAllNaN() && 
this.envelope.getCoordinateReferenceSystem() == null) {
+            throw new 
IllegalArgumentException(Errors.format(Errors.Keys.EmptyArgument_1, 
"envelope"));
+        }
+        extent      = null;
+        gridToCRS   = null;
+        cornerToCRS = null;
+        resolution  = null;
+        nonLinears  = 0;
+    }
+
     /**
      * Creates a new grid geometry from the given components.
      * This constructor performs no verification (unless assertions are 
enabled).
diff --git 
a/core/sis-feature/src/test/java/org/apache/sis/coverage/grid/GridDerivationTest.java
 
b/core/sis-feature/src/test/java/org/apache/sis/coverage/grid/GridDerivationTest.java
index 9d1f538e96..407836eca7 100644
--- 
a/core/sis-feature/src/test/java/org/apache/sis/coverage/grid/GridDerivationTest.java
+++ 
b/core/sis-feature/src/test/java/org/apache/sis/coverage/grid/GridDerivationTest.java
@@ -873,8 +873,8 @@ public final class GridDerivationTest extends TestCase {
         Envelope2D   domain   = new Envelope2D(HardCodedCRS.WGS84, 10, 20, 
110, 70);
         Envelope2D   request  = new Envelope2D(HardCodedCRS.WGS84, -5, 25, 
100, 90);
         Envelope2D   expected = new Envelope2D(HardCodedCRS.WGS84, 10, 25,  
85, 65);
-        GridGeometry grid1    = new GridGeometry(null, domain,  
GridOrientation.HOMOTHETY);
-        GridGeometry grid2    = new GridGeometry(null, request, 
GridOrientation.HOMOTHETY);
+        GridGeometry grid1    = new GridGeometry(domain);
+        GridGeometry grid2    = new GridGeometry(request);
         GridGeometry subgrid  = grid1.derive().subgrid(grid2).build();
         assertTrue(subgrid.isEnvelopeOnly());
         assertEnvelopeEquals(expected, subgrid.getEnvelope(), STRICT);
@@ -884,7 +884,7 @@ public final class GridDerivationTest extends TestCase {
          */
         
request.setCoordinateReferenceSystem(HardCodedCRS.WGS84_LATITUDE_FIRST);
         request.setRect(25, -5, 90, 100);
-        grid2   = new GridGeometry(null, request, GridOrientation.HOMOTHETY);
+        grid2   = new GridGeometry(request);
         subgrid = grid1.derive().subgrid(grid2).build();
         assertSame(HardCodedCRS.WGS84, subgrid.getCoordinateReferenceSystem());
         assertTrue(subgrid.isEnvelopeOnly());
diff --git 
a/core/sis-feature/src/test/java/org/apache/sis/coverage/grid/GridGeometryTest.java
 
b/core/sis-feature/src/test/java/org/apache/sis/coverage/grid/GridGeometryTest.java
index a4149ed31f..ea7759a1f0 100644
--- 
a/core/sis-feature/src/test/java/org/apache/sis/coverage/grid/GridGeometryTest.java
+++ 
b/core/sis-feature/src/test/java/org/apache/sis/coverage/grid/GridGeometryTest.java
@@ -381,6 +381,11 @@ public final class GridGeometryTest extends TestCase {
          * The use of `DISPLAY` mode in this particular case should be 
equivalent ro `REFLECTION_Y`.
          */
         assertEquals(grid, new GridGeometry(extent, aoi, 
GridOrientation.DISPLAY));
+        /*
+         * Test when only an envelope is specified.
+         * The grid orientation should have no effect.
+         */
+        assertEnvelopeEquals(aoi, new GridGeometry(null, aoi, 
GridOrientation.DISPLAY).getEnvelope());
     }
 
     /**
diff --git 
a/storage/sis-storage/src/main/java/org/apache/sis/storage/CoverageQuery.java 
b/storage/sis-storage/src/main/java/org/apache/sis/storage/CoverageQuery.java
index 190d2a2b8d..efa20e0e15 100644
--- 
a/storage/sis-storage/src/main/java/org/apache/sis/storage/CoverageQuery.java
+++ 
b/storage/sis-storage/src/main/java/org/apache/sis/storage/CoverageQuery.java
@@ -33,7 +33,6 @@ import org.apache.sis.measure.AngleFormat;
 import org.apache.sis.coverage.SampleDimension;
 import org.apache.sis.coverage.grid.GridCoverage;
 import org.apache.sis.coverage.grid.GridGeometry;
-import org.apache.sis.coverage.grid.GridRoundingMode;
 import org.apache.sis.coverage.grid.GridCoverageProcessor;
 import org.apache.sis.coverage.grid.DimensionalityReduction;
 import org.apache.sis.coverage.grid.IllegalGridGeometryException;
@@ -124,7 +123,7 @@ public class CoverageQuery extends Query implements 
Cloneable, Serializable {
     public void setSelection(final Envelope domain) {
         GridGeometry g = null;
         if (domain != null) {
-            g = new GridGeometry(null, null, domain, GridRoundingMode.NEAREST);
+            g = new GridGeometry(domain);
         }
         setSelection(g);
     }

Reply via email to