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 ad1dc970ce Add a simple test case for ASCII Grid reader.
ad1dc970ce is described below
commit ad1dc970cede78d649b84956316f17e9cfac2a68
Author: Martin Desruisseaux <[email protected]>
AuthorDate: Tue Apr 5 16:51:50 2022 +0200
Add a simple test case for ASCII Grid reader.
---
ide-project/NetBeans/build.xml | 1 +
.../sis/internal/storage/MetadataBuilder.java | 8 +-
.../sis/internal/storage/ascii/StoreTest.java | 99 ++++++++++++++++++++++
.../apache/sis/test/suite/StorageTestSuite.java | 1 +
.../org/apache/sis/internal/storage/ascii/grid.asc | 34 ++++++++
.../org/apache/sis/internal/storage/ascii/grid.prj | 5 ++
6 files changed, 146 insertions(+), 2 deletions(-)
diff --git a/ide-project/NetBeans/build.xml b/ide-project/NetBeans/build.xml
index af72e7e2e9..ba9d889f9a 100644
--- a/ide-project/NetBeans/build.xml
+++ b/ide-project/NetBeans/build.xml
@@ -302,6 +302,7 @@
</fileset>
<fileset dir="${project.root}/storage/sis-storage/src/test/resources">
<include name="**/*.txt"/>
+ <include name="**/*.asc"/>
<include name="**/*.prj"/>
<include name="**/*.xml"/>
</fileset>
diff --git
a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/MetadataBuilder.java
b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/MetadataBuilder.java
index e759ad7642..2e83572902 100644
---
a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/MetadataBuilder.java
+++
b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/MetadataBuilder.java
@@ -1892,9 +1892,13 @@ parse: for (int i = 0; i < length;) {
*/
public final void addExtent(final Envelope envelope) throws
TransformException {
if (envelope != null) {
- addReferenceSystem(envelope.getCoordinateReferenceSystem());
+ final CoordinateReferenceSystem crs =
envelope.getCoordinateReferenceSystem();
+ addReferenceSystem(crs);
if (!(envelope instanceof AbstractEnvelope && ((AbstractEnvelope)
envelope).isAllNaN())) {
- extent().addElements(envelope);
+ if (crs != null) {
+ extent().addElements(envelope);
+ }
+ // Future version could add as a geometry in unspecified CRS.
}
}
}
diff --git
a/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/ascii/StoreTest.java
b/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/ascii/StoreTest.java
new file mode 100644
index 0000000000..4df0a60adc
--- /dev/null
+++
b/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/ascii/StoreTest.java
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.internal.storage.ascii;
+
+import java.awt.image.Raster;
+import java.awt.image.RenderedImage;
+import org.opengis.metadata.Metadata;
+import org.opengis.metadata.extent.GeographicBoundingBox;
+import org.opengis.metadata.identification.Identification;
+import org.apache.sis.coverage.grid.GridCoverage;
+import org.apache.sis.storage.DataStoreException;
+import org.apache.sis.storage.StorageConnector;
+import org.apache.sis.test.TestCase;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+import static org.apache.sis.test.TestUtilities.getSingleton;
+
+
+/**
+ * Tests {@link Store}.
+ *
+ * @author Martin Desruisseaux (Geomatys)
+ * @version 1.2
+ * @since 1.2
+ * @module
+ */
+public final strictfp class StoreTest extends TestCase {
+ /**
+ * Opens an ASCII Grid store on the test data.
+ */
+ private static Store open() throws DataStoreException {
+ return new Store(null, new
StorageConnector(StoreTest.class.getResource("grid.asc")));
+ }
+
+ /**
+ * Tests the metadata of the {@code "grid.asc"} file.
+ *
+ * @throws DataStoreException if an error occurred while reading the file.
+ */
+ @Test
+ public void testMetadata() throws DataStoreException {
+ try (Store store = open()) {
+ assertEquals("grid", store.getIdentifier().get().toString());
+ final Metadata metadata = store.getMetadata();
+ /*
+ * Format information is hard-coded in "SpatialMetadata" database.
Complete string should
+ * be "ESRI ArcInfo ASCII Grid format" but it depends on the
presence of Derby dependency.
+ */
+ final Identification id =
getSingleton(metadata.getIdentificationInfo());
+ final String format =
getSingleton(id.getResourceFormats()).getFormatSpecificationCitation().getTitle().toString();
+ assertTrue(format, format.contains("ASCII Grid"));
+ /*
+ * This information should have been read from the PRJ file.
+ */
+ assertEquals("WGS 84 / World Mercator",
+
getSingleton(metadata.getReferenceSystemInfo()).getName().getCode());
+ final GeographicBoundingBox bbox = (GeographicBoundingBox)
+
getSingleton(getSingleton(id.getExtents()).getGeographicElements());
+ assertEquals(-84, bbox.getSouthBoundLatitude(), 1);
+ assertEquals(+85, bbox.getNorthBoundLatitude(), 1);
+ }
+ }
+
+ /**
+ * Tests reading a few values from the {@code "grid.asc"} file.
+ *
+ * @throws DataStoreException if an error occurred while reading the file.
+ */
+ @Test
+ public void testRead() throws DataStoreException {
+ try (Store store = open()) {
+ final GridCoverage coverage = store.read(null, null);
+ final RenderedImage image = coverage.render(null);
+ assertEquals(10, image.getWidth());
+ assertEquals(20, image.getHeight());
+ final Raster tile = image.getTile(0,0);
+ assertEquals( 1.061f, tile.getSampleFloat(0, 0, 0), 0f);
+ assertEquals(Float.NaN, tile.getSampleFloat(9, 0, 0), 0f);
+ assertEquals(Float.NaN, tile.getSampleFloat(9, 19, 0), 0f);
+ assertEquals( -1.075f, tile.getSampleFloat(0, 19, 0), 0f);
+ assertEquals( 27.039f, tile.getSampleFloat(4, 10, 0), 0f);
+ }
+ }
+}
diff --git
a/storage/sis-storage/src/test/java/org/apache/sis/test/suite/StorageTestSuite.java
b/storage/sis-storage/src/test/java/org/apache/sis/test/suite/StorageTestSuite.java
index 1703a23ed5..222e1dd34b 100644
---
a/storage/sis-storage/src/test/java/org/apache/sis/test/suite/StorageTestSuite.java
+++
b/storage/sis-storage/src/test/java/org/apache/sis/test/suite/StorageTestSuite.java
@@ -57,6 +57,7 @@ import org.junit.BeforeClass;
org.apache.sis.internal.storage.wkt.StoreTest.class,
org.apache.sis.internal.storage.csv.StoreProviderTest.class,
org.apache.sis.internal.storage.csv.StoreTest.class,
+ org.apache.sis.internal.storage.ascii.StoreTest.class,
org.apache.sis.internal.storage.folder.StoreTest.class,
org.apache.sis.internal.storage.JoinFeatureSetTest.class,
org.apache.sis.internal.storage.ConcatenatedFeatureSetTest.class,
diff --git
a/storage/sis-storage/src/test/resources/org/apache/sis/internal/storage/ascii/grid.asc
b/storage/sis-storage/src/test/resources/org/apache/sis/internal/storage/ascii/grid.asc
new file mode 100644
index 0000000000..54f3704c11
--- /dev/null
+++
b/storage/sis-storage/src/test/resources/org/apache/sis/internal/storage/ascii/grid.asc
@@ -0,0 +1,34 @@
+#
+# The Apache SIS implementation of ASCII Grid reader is a slight extension
+# of the format defined by ESRI. It can skip comment lines like those ones,
+# and accept a few more keywords such as [X|Y]CELLSIZE (not used here).
+#
+# Data were originally temperature data, but locations have been modified
+# arbitrarily with round numbers for easier debugging.
+#
+NCOLS 10
+NROWS 20
+XLLCENTER -10000
+YLLCENTER -20000
+CELLSIZE 2000
+NODATA_VALUE -9999
+ 1.061 0.273 -0.819 0.358 -9999 7.806 4.296 -9999 -9999
-9999
+ 1.766 -9999 -9999 0.401 4.618 9.824 6.146 -9999 -9999
-9999
+ 3.476 -9999 -9999 0.001 8.476 10.522 -9999 -9999 -9999
-9999
+ 5.393 9.315 -9999 -9999 9.472 12.499 -9999 -9999 -9999
3.825
+ 6.644 9.936 -9999 -9999 13.941 -9999 -9999 -9999 -9999
6.235
+ 13.691 15.224 -9999 19.109 18.523 20.674 -9999 -9999 -9999
15.641
+ 22.031 19.662 -9999 24.164 22.161 -9999 -9999 -9999 -9999
21.837
+ 26.475 22.612 -9999 27.756 23.313 -9999 28.996 -9999 27.922
29.193
+ 27.468 27.278 28.891 26.914 26.498 -9999 -9999 28.951 29.253
29.330
+ 28.744 26.183 23.483 -9999 27.619 25.820 -9999 29.347 29.522
29.773
+ 29.436 27.970 24.466 -9999 27.039 23.890 -9999 27.037 28.221
26.856
+ 24.670 25.626 22.430 -9999 25.086 20.259 25.069 23.321 24.248
-9999
+ 18.940 19.303 18.557 -9999 17.933 18.475 20.097 18.529 18.691
-9999
+ 13.850 13.268 12.258 -9999 13.968 10.872 14.141 13.677 12.603
13.964
+ 10.503 8.636 8.195 8.200 5.086 4.501 3.874 3.660 5.974
9.339
+ 5.454 4.409 5.834 6.084 0.290 -0.027 1.315 2.086 1.963
2.895
+ 1.209 0.159 2.569 -0.424 -1.421 -1.375 -0.952 -0.780 0.080
-0.666
+ -0.340 -1.228 -0.598 -1.688 -1.810 -1.517 -1.865 -1.419 -1.825
-1.876
+ -0.804 -1.852 -1.280 -9999 -1.428 -1.881 -9999 -9999 -9999
-9999
+ -1.075 -1.869 -9999 -9999 -1.362 -9999 -9999 -9999 -9999
-9999
diff --git
a/storage/sis-storage/src/test/resources/org/apache/sis/internal/storage/ascii/grid.prj
b/storage/sis-storage/src/test/resources/org/apache/sis/internal/storage/ascii/grid.prj
new file mode 100644
index 0000000000..61f8cc4918
--- /dev/null
+++
b/storage/sis-storage/src/test/resources/org/apache/sis/internal/storage/ascii/grid.prj
@@ -0,0 +1,5 @@
+PROJCS["WGS 84 / World Mercator",
+ GEOGCS["WGS 84",
+ DATUM["World Geodetic System 1984", SPHEROID["WGS 84", 6378137.0,
298.257223563]],
+ PRIMEM["Greenwich", 0.0], UNIT["degree", 0.017453292519943295]],
+ PROJECTION["Mercator_1SP"], UNIT["km", 1000.0]]