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 2026/04/27 16:17:36 UTC
(sis) 02/02: Add `GridExtent.derivativeAtPOI(…)` internal method for convenience.
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 <ma...@geomatys.com>
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);