This is an automated email from the ASF dual-hosted git repository.

asf-gitbox-commits pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git

commit 3278ea0871f6aae9136301abd33b20b1afe15c08
Author: Martin Desruisseaux <[email protected]>
AuthorDate: Mon Apr 27 15:52:17 2026 +0200

    Add `GridExtent.derivativeAtPOI(…)` internal method for convenience.
---
 .../main/org/apache/sis/coverage/grid/DefaultEvaluator.java |  3 +--
 .../main/org/apache/sis/coverage/grid/GridExtent.java       | 13 +++++++++++++
 .../main/org/apache/sis/coverage/grid/GridGeometry.java     |  4 ++--
 .../org/apache/sis/coverage/grid/ResampledGridCoverage.java |  4 +---
 .../main/org/apache/sis/coverage/grid/SliceGeometry.java    |  3 +--
 5 files changed, 18 insertions(+), 9 deletions(-)

diff --git 
a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/DefaultEvaluator.java
 
b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/DefaultEvaluator.java
index d5f815a7df..7cc19292fd 100644
--- 
a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/DefaultEvaluator.java
+++ 
b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/DefaultEvaluator.java
@@ -36,7 +36,6 @@ import org.opengis.referencing.operation.CoordinateOperation;
 import org.opengis.referencing.operation.NoninvertibleTransformException;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.referencing.CRS;
-import org.apache.sis.referencing.internal.shared.DirectPositionView;
 import org.apache.sis.referencing.internal.shared.WraparoundAxesFinder;
 import org.apache.sis.referencing.operation.matrix.Matrices;
 import org.apache.sis.referencing.operation.matrix.MatrixSIS;
@@ -252,7 +251,7 @@ abstract class DefaultEvaluator implements 
GridCoverage.Evaluator {
                 final GridExtent extent = gridGeometry.getExtent();
                 MathTransform gridToCRS = 
gridGeometry.getGridToCRS(PixelInCell.CELL_CENTER);
                 gridToWraparound = MathTransforms.concatenate(gridToCRS, 
f.preferredToSpecified.inverse());
-                final Matrix m = gridToWraparound.derivative(new 
DirectPositionView.Double(extent.getPointOfInterest(PixelInCell.CELL_CENTER)));
+                final Matrix m = extent.derivativeAtPOI(gridToWraparound, 
PixelInCell.CELL_CENTER);
                 /*
                  * `gridToWraparound` is the transform from grid coordinates 
to a CRS where wraparound axes exist.
                  * It may be the coverage CRS or its base CRS. The wraparound 
axes are identified by `periods`.
diff --git 
a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/GridExtent.java
 
b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/GridExtent.java
index 8c3439f78d..f4e5797177 100644
--- 
a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/GridExtent.java
+++ 
b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/GridExtent.java
@@ -60,6 +60,7 @@ import org.apache.sis.geometry.AbstractEnvelope;
 import org.apache.sis.geometry.GeneralEnvelope;
 import org.apache.sis.geometry.Envelopes;
 import org.apache.sis.coverage.SubspaceNotSpecifiedException;
+import org.apache.sis.referencing.internal.shared.DirectPositionView;
 import org.apache.sis.referencing.internal.shared.ExtendedPrecisionMatrix;
 import org.apache.sis.referencing.operation.matrix.Matrices;
 import org.apache.sis.referencing.operation.matrix.MatrixSIS;
@@ -982,6 +983,18 @@ public class GridExtent implements GridEnvelope, 
LenientComparable, Serializable
         return center;
     }
 
+    /**
+     * Returns the derivative of the given transform at the point of interest.
+     *
+     * @param  gridToCRS  the transform for which to take the derivative.
+     * @param  anchor  the convention to be used for conversion to "real 
world" coordinates.
+     * @return derivative of the given transform at the point of interest.
+     * @throws TransformException if the derivative cannot be computed.
+     */
+    final Matrix derivativeAtPOI(final MathTransform gridToCRS, final 
PixelInCell anchor) throws TransformException {
+        return gridToCRS.derivative(new 
DirectPositionView.Double(getPointOfInterest(anchor)));
+    }
+
     /**
      * Returns the grid coordinates for all dimensions where the grid has a 
size of 1.
      * Keys are dimensions as values from 0 inclusive to {@link 
#getDimension()} exclusive.
diff --git 
a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/GridGeometry.java
 
b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/GridGeometry.java
index 6d8ace32d5..9f040bcb91 100644
--- 
a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/GridGeometry.java
+++ 
b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/GridGeometry.java
@@ -578,7 +578,7 @@ public class GridGeometry implements LenientComparable, 
Serializable {
             this.envelope = new ImmutableEnvelope(env);
             if (scales == null) try {
                 // `gridToCRS` cannot be null if `cornerToCRS` is non-null.
-                scales = gridToCRS.derivative(new 
DirectPositionView.Double(extent.getPointOfInterest(anchor)));
+                scales = extent.derivativeAtPOI(gridToCRS, anchor);
                 numToIgnore = 0;
             } catch (TransformException e) {
                 recoverableException("<init>", e);
@@ -1375,7 +1375,7 @@ public class GridGeometry implements LenientComparable, 
Serializable {
         if (matrix != null) {
             return resolution(matrix, 1);
         } else if (domain != null && gridToCRS != null) try {
-            return resolution(gridToCRS.derivative(new 
DirectPositionView.Double(domain.getPointOfInterest(anchor))), 0);
+            return resolution(domain.derivativeAtPOI(gridToCRS, anchor), 0);
         } catch (TransformException e) {
             recoverableException("resolution", e);
         }
diff --git 
a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/ResampledGridCoverage.java
 
b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/ResampledGridCoverage.java
index c387deaeb0..67a4710758 100644
--- 
a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/ResampledGridCoverage.java
+++ 
b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/ResampledGridCoverage.java
@@ -33,7 +33,6 @@ import org.apache.sis.util.ComparisonMode;
 import org.apache.sis.util.Utilities;
 import org.apache.sis.util.internal.shared.DoubleDouble;
 import org.apache.sis.referencing.CRS;
-import org.apache.sis.referencing.internal.shared.DirectPositionView;
 import org.apache.sis.referencing.internal.shared.ExtendedPrecisionMatrix;
 import org.apache.sis.referencing.operation.transform.LinearTransform;
 import org.apache.sis.referencing.operation.transform.MathTransforms;
@@ -130,8 +129,7 @@ final class ResampledGridCoverage extends 
DerivedGridCoverage {
         if (srcDim <= BIDIMENSIONAL) return null;                           // 
Dimension mapping not needed.
         Matrix derivative = MathTransforms.getMatrix(mt);
         if (derivative == null) try {
-            derivative = mt.derivative(new DirectPositionView.Double(
-                    
domain.getExtent().getPointOfInterest(PixelInCell.CELL_CENTER)));
+            derivative = domain.getExtent().derivativeAtPOI(mt, 
PixelInCell.CELL_CENTER);
         } catch (TransformException e) {
             GridCoverageProcessor.recoverableException("resample", e);      // 
Public caller of this method.
             return null;
diff --git 
a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/SliceGeometry.java
 
b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/SliceGeometry.java
index 340382b850..61b14a850c 100644
--- 
a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/SliceGeometry.java
+++ 
b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/SliceGeometry.java
@@ -31,7 +31,6 @@ import 
org.apache.sis.referencing.operation.transform.LinearTransform;
 import org.apache.sis.referencing.operation.transform.TransformSeparator;
 import org.apache.sis.geometry.GeneralEnvelope;
 import org.apache.sis.geometry.ImmutableEnvelope;
-import org.apache.sis.referencing.internal.shared.DirectPositionView;
 import org.apache.sis.referencing.internal.shared.ReferencingUtilities;
 import org.apache.sis.util.ComparisonMode;
 import org.apache.sis.util.ArraysExt;
@@ -304,7 +303,7 @@ final class SliceGeometry implements 
Function<RenderedImage, GridGeometry> {
         Matrix derivative = MathTransforms.getMatrix(gridToCRS);
         if (derivative == null) {
             if (extent != null) try {
-                derivative = gridToCRS.derivative(new 
DirectPositionView.Double(extent.getPointOfInterest(PixelInCell.CELL_CENTER)));
+                derivative = extent.derivativeAtPOI(gridToCRS, 
PixelInCell.CELL_CENTER);
             } catch (TransformException e) {
                 // GridGeometry.reduce(…) is the public method invoking 
indirectly this method.
                 GridGeometry.recoverableException("reduce", e);

Reply via email to