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 2023/04/19 17:56:44 UTC

[sis] branch geoapi-4.0 updated: Move `CoverageCombiner` to public API.

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 0f4aaa2d4c Move `CoverageCombiner` to public API.
0f4aaa2d4c is described below

commit 0f4aaa2d4cb320da062476e80c3d8e64fceb1de3
Author: Martin Desruisseaux <ma...@geomatys.com>
AuthorDate: Wed Apr 19 17:21:17 2023 +0200

    Move `CoverageCombiner` to public API.
---
 .../{internal => }/coverage/CoverageCombiner.java  | 40 ++++++++++++++++------
 .../java/org/apache/sis/image/ImageCombiner.java   |  2 +-
 .../internal/storage/WritableResourceSupport.java  |  2 +-
 3 files changed, 32 insertions(+), 12 deletions(-)

diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/coverage/CoverageCombiner.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/CoverageCombiner.java
similarity index 89%
rename from core/sis-feature/src/main/java/org/apache/sis/internal/coverage/CoverageCombiner.java
rename to core/sis-feature/src/main/java/org/apache/sis/coverage/CoverageCombiner.java
index 7957a9a214..231f6946c1 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/coverage/CoverageCombiner.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/CoverageCombiner.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.coverage;
+package org.apache.sis.coverage;
 
 import java.util.Arrays;
 import java.awt.Dimension;
@@ -56,22 +56,26 @@ import static org.apache.sis.internal.util.Numerics.saturatingSubtract;
  * Coverages are combined in the order they are specified.
  *
  * <h2>Limitations</h2>
- * Current implementation does not apply interpolations except in the two dimensions
- * specified at construction time. For all other dimensions, data are taken from the
- * nearest neighbor two-dimensional slice.
+ * The current implementation has the following limitations.
+ * Those restrictions may be resolved progressively in future Apache SIS versions.
  *
- * <p>In addition, current implementation does not verify if sample dimensions are in the same order,
- * and does not expand the destination coverage for accommodating data in given coverages that would
- * be outside the bounds of destination coverage.</p>
+ * <ul>
+ *   <li>Supports only {@link GridCoverage} instances, not yet more generic coverages.</li>
+ *   <li>No interpolation except in the two dimensions specified at construction time.
+ *       For all other dimensions, data are taken from the nearest neighbor two-dimensional slice.</li>
+ *   <li>No expansion of the destination coverage for accommodating data of source coverages
+ *       that are outside the destination coverage bounds.</li>
+ *   <li>No verification of whether sample dimensions are in the same order.</li>
+ * </ul>
  *
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.3
+ * @version 1.4
  *
  * @see ImageCombiner
  *
- * @since 1.2
+ * @since 1.4
  */
-public final class CoverageCombiner {
+public class CoverageCombiner {
     /**
      * The {@value} value for identifying code expecting exactly 2 dimensions.
      */
@@ -303,4 +307,20 @@ next:   for (;;) {
         }
         return success;
     }
+
+    /**
+     * Returns the combination of destination coverage with all coverages specified to {@code CoverageCombiner} methods.
+     * This may be the destination coverage specified at construction time, but may also be a larger coverage if the
+     * destination has been dynamically expanded for accommodating larger sources.
+     *
+     * <p><b>Note:</b> dynamic expansion is not yet implemented in current version.
+     * If a future version implements it, we shall guarantee that the coordinate of each cell is unchanged
+     * (i.e. the grid extent {@code minX} and {@code minY} may become negative, but the cell identified by
+     * coordinates (0,0) for instance will stay the same cell.)</p>
+     *
+     * @return the combination of destination coverage with all source coverages.
+     */
+    public GridCoverage result() {
+        return destination;
+    }
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/image/ImageCombiner.java b/core/sis-feature/src/main/java/org/apache/sis/image/ImageCombiner.java
index 5909ce6ecc..c724a8ed30 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/image/ImageCombiner.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/image/ImageCombiner.java
@@ -78,7 +78,7 @@ public class ImageCombiner implements Consumer<RenderedImage> {
     /**
      * The value to use in calls to {@link ImageProcessor#setImageLayout(ImageLayout)}.
      * We set this property before use of {@link #processor} because the value may change
-     * for each slice processed by {@link org.apache.sis.internal.coverage.CoverageCombiner}.
+     * for each slice processed by {@link org.apache.sis.coverage.CoverageCombiner}.
      */
     private final Layout layout;
 
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/WritableResourceSupport.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/WritableResourceSupport.java
index 9090e4687e..c65932fdc8 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/WritableResourceSupport.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/WritableResourceSupport.java
@@ -34,7 +34,7 @@ import org.apache.sis.storage.IncompatibleResourceException;
 import org.apache.sis.storage.WritableGridCoverageResource;
 import org.apache.sis.internal.storage.io.ChannelDataInput;
 import org.apache.sis.internal.storage.io.ChannelDataOutput;
-import org.apache.sis.internal.coverage.CoverageCombiner;
+import org.apache.sis.coverage.CoverageCombiner;
 import org.apache.sis.referencing.operation.matrix.AffineTransforms2D;
 import org.apache.sis.referencing.operation.transform.TransformSeparator;
 import org.apache.sis.util.resources.Errors;