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);
