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
The following commit(s) were added to refs/heads/geoapi-4.0 by this push:
new c70d212 Invocation of GridDerivation.rescale needs to use the inverse
of the scale factor defined in "resampling_interval" attribute.
c70d212 is described below
commit c70d212527ff8e1a51d7a8e3b0ccc870adfbe0bd
Author: Martin Desruisseaux <[email protected]>
AuthorDate: Tue Mar 12 16:06:14 2019 +0100
Invocation of GridDerivation.rescale needs to use the inverse of the scale
factor defined in "resampling_interval" attribute.
---
.../java/org/apache/sis/coverage/grid/GridDerivation.java | 11 +++++++++--
.../main/java/org/apache/sis/internal/netcdf/Variable.java | 8 ++++++--
2 files changed, 15 insertions(+), 4 deletions(-)
diff --git
a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridDerivation.java
b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridDerivation.java
index 0265a26..bd037e5 100644
---
a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridDerivation.java
+++
b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridDerivation.java
@@ -249,12 +249,19 @@ public class GridDerivation {
}
/**
- * Requests a grid geometry having a different range of grid indices
resulting from application of the given scale factors.
+ * Requests a grid geometry where cell sizes have been scaled by the given
factors, which result in a change of grid size.
* The new grid geometry is given a <cite>"grid to CRS"</cite> transform
computed as the concatenation of given scale factors
* (applied on grid indices) followed by the {@linkplain
GridGeometry#getGridToCRS(PixelInCell) grid to CRS} transform of the
* grid geometry specified at construction time. The resulting grid extent
can be specified explicitly (typically as an extent
* computed by {@link GridExtent#resize(long...)}) or computed
automatically by this method.
*
+ * <div class="note"><b>Example:</b>
+ * if the original grid geometry had an extent of [0 … 5] in <var>x</var>
and [0 … 8] in <var>y</var>, then a call to
+ * {@code resize(null, 0.1, 0.1)} will build a grid geometry with an
extent of [0 … 50] in <var>x</var> and [0 … 80] in <var>y</var>.
+ * This new extent covers the same geographic area than the old extent but
with pixels having a size of 0.1 times the old pixels size.
+ * The <cite>grid to CRS</cite> transform of the new grid geometry will be
pre-concatenated with scale factors of 0.1 in compensation
+ * for the shrink in pixels size.</div>
+ *
* <p>Notes:</p>
* <ul>
* <li>This method can be invoked only once.</li>
@@ -302,7 +309,7 @@ public class GridDerivation {
Arrays.fill(scales, actual, n, 1);
}
this.toBase = MathTransforms.scale(scales);
- this.scales = scales;
+ this.scales = scales; // No clone needed
since the array has been copied above.
/*
* If the user did not specified explicitly the resulting grid extent,
compute it now.
* This operation should never fail since we use known implementation
of MathTransform,
diff --git
a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Variable.java
b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Variable.java
index 19f7d4a..c1c9466 100644
---
a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Variable.java
+++
b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Variable.java
@@ -506,16 +506,20 @@ public abstract class Variable extends NamedElement {
}
}
if (needsResize) {
+ double[] dataToGridIndices = null;
if (gridToDataIndices != null) {
- for (final double s : gridToDataIndices) {
+ dataToGridIndices = new double[gridToDataIndices.length];
+ for (int i=0; i<dataToGridIndices.length; i++) {
+ final double s = gridToDataIndices[i];
if (!(s > 0)) {
warning(Variable.class, "getGridGeometry",
Resources.Keys.ResamplingIntervalNotFound_2, getFilename(), getName());
return null;
}
+ dataToGridIndices[i] = 1 / s;
}
}
extent = extent.resize(sizes);
- grid = grid.derive().resize(extent, gridToDataIndices).build();
+ grid = grid.derive().resize(extent, dataToGridIndices).build();
/*
* Note: the 'gridToDataIndices' array was computed as a
side-effect of the call to 'getGrid(decoder)'.
* This is one reason why we keep the call to 'getGrid(…)'
inside this 'getGridGeometry(…)' method.