sis-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From desruisse...@apache.org
Subject [sis] 01/01: Merge branch 'geoapi-3.1'.
Date Thu, 08 Nov 2018 13:36:00 GMT
This is an automated email from the ASF dual-hosted git repository.

desruisseaux pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sis.git

commit 475ebea8835ba4e3eaf33904ba859be377e9d5b9
Merge: 37f225e c4821c0
Author: Martin Desruisseaux <martin.desruisseaux@geomatys.com>
AuthorDate: Thu Nov 8 14:35:10 2018 +0100

    Merge branch 'geoapi-3.1'.

 application/sis-console/pom.xml                    |   2 +-
 application/sis-console/src/main/artifact/README   |   6 +-
 application/sis-console/src/main/artifact/bin/sis  |  10 -
 core/sis-build-helper/pom.xml                      |   2 +-
 .../org/apache/sis/internal/maven/Assembler.java   | 192 ++++++++----
 .../apache/sis/internal/maven/BundleCreator.java   | 114 -------
 .../org/apache/sis/internal/maven/Filenames.java   |  42 +--
 .../apache/sis/internal/maven/JarCollector.java    |  20 +-
 .../org/apache/sis/internal/maven/PackInput.java   | 227 --------------
 .../org/apache/sis/internal/maven/PackOutput.java  | 338 ---------------------
 .../java/org/apache/sis/internal/maven/Packer.java | 123 --------
 .../apache/sis/internal/maven/package-info.java    |  10 +-
 .../apache/sis/internal/metadata/Resources.java    |  33 ++
 .../sis/internal/metadata/Resources.properties     |   1 +
 .../sis/internal/metadata/Resources_fr.properties  |   1 +
 .../apache/sis/internal/simple/SimpleDuration.java |  77 +++++
 .../java/org/apache/sis/io/wkt/AbstractParser.java |   2 +-
 .../apache/sis/io/wkt/GeodeticObjectParser.java    |   6 +-
 .../org/apache/sis/io/wkt/MathTransformParser.java |  85 +++++-
 .../org/apache/sis/metadata/AbstractMetadata.java  |   5 +
 .../org/apache/sis/metadata/MetadataFormat.java    |  65 ++++
 .../org/apache/sis/metadata/MetadataStandard.java  |   5 +
 .../org/apache/sis/metadata/PropertyAccessor.java  |  11 +-
 .../java/org/apache/sis/metadata/SpecialCases.java |  21 +-
 .../java/org/apache/sis/metadata/TreeNode.java     |  19 +-
 .../org/apache/sis/metadata/TreeTableView.java     |  50 ++-
 .../apache/sis/metadata/iso/DefaultIdentifier.java |  23 +-
 .../org/apache/sis/metadata/TreeTableViewTest.java |  30 +-
 .../DefaultDataIdentificationTest.java             |   2 +-
 .../org/apache/sis/coverage/grid/GridGeometry.java |  23 +-
 .../java/org/apache/sis/image/PixelIterator.java   |   8 +-
 .../gazetteer/MilitaryGridReferenceSystem.java     |  11 +-
 .../referencing/provider/GeodeticOperation.java    |   2 +-
 .../internal/referencing/provider/Molodensky.java  |   4 +-
 .../operation/CoordinateOperationFinder.java       |  19 +-
 .../sis/referencing/operation/matrix/Matrices.java |   3 +-
 .../apache/sis/geometry/CoordinateFormatTest.java  |   4 +-
 .../org/apache/sis/io/wkt/ComparisonWithEPSG.java  | 159 ++++++++++
 .../sis/io/wkt/GeodeticObjectParserTest.java       |   4 +-
 .../sis/referencing/factory/TestFactorySource.java |   2 +-
 .../operation/CoordinateOperationFinderTest.java   |  32 +-
 .../sis/test/suite/ReferencingTestSuite.java       |   1 +
 .../sis/internal/geoapi/temporal/Duration.java}    |  13 +-
 .../org/apache/sis/internal/system/Modules.java    |   5 +
 .../org/apache/sis/internal/util/Numerics.java     |  34 +++
 .../java/org/apache/sis/io/CompoundFormat.java     |   3 +
 .../main/java/org/apache/sis/io/DefaultFormat.java |   2 +-
 .../java/org/apache/sis/math/DecimalFunctions.java | 108 ++++++-
 .../java/org/apache/sis/math/StatisticsFormat.java | 135 ++++----
 .../java/org/apache/sis/measure/UnitFormat.java    |  87 +++++-
 .../java/org/apache/sis/util/CharSequences.java    |  19 +-
 .../apache/sis/util/collection/TableColumn.java    |  11 +
 .../sis/util/collection/TreeTableFormat.java       |  48 ++-
 .../org/apache/sis/measure/UnitAliases.properties  |   1 +
 .../org/apache/sis/measure/UnitNames.properties    |   2 +-
 .../org/apache/sis/measure/UnitNames_fr.properties |   2 +-
 .../org/apache/sis/internal/util/NumericsTest.java |  15 +
 .../org/apache/sis/math/DecimalFunctionsTest.java  |  55 +++-
 .../org/apache/sis/math/StatisticsFormatTest.java  |  40 ++-
 .../org/apache/sis/measure/UnitFormatTest.java     |  19 +-
 .../src/test/java/org/apache/sis/test/Assert.java  |   4 +-
 .../java/org/apache/sis/test/TestUtilities.java    |   9 +-
 .../org/apache/sis/util/CharSequencesTest.java     |   8 +-
 pom.xml                                            |   4 +-
 .../earthobservation/LandsatReaderTest.java        |   4 +-
 .../java/org/apache/sis/internal/netcdf/Axis.java  |   3 +
 .../org/apache/sis/internal/netcdf/DataType.java   |  19 +-
 .../apache/sis/internal/netcdf/GridGeometry.java   |   2 +
 .../apache/sis/internal/netcdf/NamedElement.java   |  13 +-
 .../org/apache/sis/internal/netcdf/Resources.java  |  20 ++
 .../sis/internal/netcdf/Resources.properties       |   4 +
 .../sis/internal/netcdf/Resources_fr.properties    |   4 +
 .../org/apache/sis/internal/netcdf/Variable.java   |  15 +-
 .../sis/internal/netcdf/impl/ChannelDecoder.java   |  78 +++--
 .../apache/sis/internal/netcdf/impl/Dimension.java |  26 +-
 .../sis/internal/netcdf/impl/FeaturesInfo.java     |   4 +
 .../sis/internal/netcdf/impl/GridGeometryInfo.java |  21 +-
 .../sis/internal/netcdf/impl/VariableInfo.java     | 205 +++++++++++--
 .../sis/internal/netcdf/impl/package-info.java     |   1 +
 .../internal/netcdf/ucar/GridGeometryWrapper.java  |   1 +
 .../sis/internal/netcdf/ucar/VariableWrapper.java  |  11 +-
 .../apache/sis/storage/netcdf/MetadataReader.java  |   2 +
 .../org/apache/sis/storage/netcdf/NetcdfStore.java |   4 +-
 .../sis/storage/netcdf/NetcdfStoreProvider.java    |   2 +-
 .../org/apache/sis/internal/netcdf/TestCase.java   |   6 +-
 .../sis/internal/storage/MetadataBuilder.java      |   5 +-
 .../org/apache/sis/internal/storage/Resources.java |   2 +-
 .../sis/internal/storage/Resources.properties      |   2 +-
 .../sis/internal/storage/Resources_fr.properties   |   2 +-
 .../sis/internal/storage/io/ChannelDataInput.java  |  16 +-
 .../sis/internal/storage/io/DataTransfer.java      |   8 +-
 .../internal/storage/io/HyperRectangleReader.java  |  27 +-
 .../org/apache/sis/internal/storage/io/Region.java |  89 ++++--
 .../sis/storage/DataStoreContentException.java     |   6 +
 .../org/apache/sis/storage/DataStoreException.java |   6 +
 95 files changed, 1797 insertions(+), 1229 deletions(-)

diff --cc core/sis-metadata/src/main/java/org/apache/sis/internal/simple/SimpleDuration.java
index 0000000,909a3f5..d634a41
mode 000000,100644..100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/SimpleDuration.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/SimpleDuration.java
@@@ -1,0 -1,77 +1,77 @@@
+ /*
+  * 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.simple;
+ 
+ import org.apache.sis.internal.util.Numerics;
 -import org.opengis.temporal.Duration;
++import org.apache.sis.internal.geoapi.temporal.Duration;
+ 
+ 
+ /**
+  * A temporary implementation of {@link Duration}.
+  * Will probably be deleted in some future version.
+  *
+  * @author  Martin Desruisseaux (Geomatys)
+  * @version 1.0
+  * @since   1.0
+  * @module
+  */
+ public class SimpleDuration implements Duration {
+     /**
+      * Duration in days.
+      */
+     public final double duration;
+ 
+     /**
+      * Creates a new duration.
+      *
+      * @param  duration  the duration in days.
+      */
+     public SimpleDuration(final double duration) {
+         this.duration = duration;
+     }
+ 
+     /**
+      * Returns a string representation of this duration.
+      *
+      * @return the duration with its unit of measurement.
+      */
+     @Override
+     public String  toString() {
+         return duration + " days";
+     }
+ 
+     /**
+      * Returns a hash code value for this duration.
+      */
+     @Override
+     public int hashCode() {
+         return Double.hashCode(duration) ^ 37;
+     }
+ 
+     /**
+      * Compares this duration with the given object for equality.
+      *
+      * @param  other  the object to compare with this duration.
+      */
+     @Override
+     public boolean equals(final Object other) {
+         if (other instanceof SimpleDuration) {
+             return Numerics.equals(duration, ((SimpleDuration) other).duration);
+         }
+         return false;
+     }
+ }
diff --cc core/sis-metadata/src/main/java/org/apache/sis/io/wkt/MathTransformParser.java
index 13e28f2,293decc..b9d71b0
--- a/core/sis-metadata/src/main/java/org/apache/sis/io/wkt/MathTransformParser.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/io/wkt/MathTransformParser.java
@@@ -55,9 -57,9 +57,9 @@@ import static org.apache.sis.util.Argum
   * @author  Rémi Eve (IRD)
   * @author  Martin Desruisseaux (IRD, Geomatys)
   * @author  Rueben Schulz (UBC)
-  * @version 0.8
+  * @version 1.0
   *
 - * @see <a href="http://www.geoapi.org/snapshot/javadoc/org/opengis/referencing/doc-files/WKT.html">Well Know Text specification</a>
 + * @see <a href="http://www.geoapi.org/3.0/javadoc/org/opengis/referencing/doc-files/WKT.html">Well Know Text specification</a>
   *
   * @since 0.6
   * @module
diff --cc core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/MilitaryGridReferenceSystem.java
index c0f688a,269f3f5..a9105f1
--- a/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/MilitaryGridReferenceSystem.java
+++ b/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/MilitaryGridReferenceSystem.java
@@@ -62,6 -65,8 +62,7 @@@ import org.apache.sis.geometry.Shapes2D
  import org.apache.sis.geometry.Envelopes;
  import org.apache.sis.geometry.Envelope2D;
  import org.apache.sis.geometry.DirectPosition2D;
 -import org.apache.sis.internal.system.Modules;
+ import org.apache.sis.math.DecimalFunctions;
  import org.apache.sis.measure.Longitude;
  import org.apache.sis.measure.Latitude;
  
diff --cc core/sis-referencing/src/test/java/org/apache/sis/io/wkt/ComparisonWithEPSG.java
index 0000000,a53adc7..b68d37e
mode 000000,100644..100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/io/wkt/ComparisonWithEPSG.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/io/wkt/ComparisonWithEPSG.java
@@@ -1,0 -1,161 +1,159 @@@
+ /*
+  * 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.io.wkt;
+ 
+ import org.opengis.util.FactoryException;
+ import org.opengis.referencing.crs.CoordinateReferenceSystem;
+ import org.apache.sis.referencing.factory.TestFactorySource;
+ import org.apache.sis.referencing.factory.sql.EPSGFactory;
+ import org.apache.sis.referencing.CRS;
 -import org.apache.sis.test.DependsOn;
+ import org.apache.sis.test.TestCase;
+ import org.junit.BeforeClass;
+ import org.junit.AfterClass;
+ import org.junit.Test;
+ 
+ import static org.apache.sis.test.Assert.*;
+ import static org.junit.Assume.assumeNotNull;
+ 
+ 
+ /**
+  * Compares the result of some WKT parsing with the expected result from EPSG database.
+  *
+  * @author  Martin Desruisseaux (Geomatys)
+  * @version 1.0
+  * @since   1.0
+  * @module
+  */
 -@DependsOn(WKTParserTest.class)
+ public final strictfp class ComparisonWithEPSG extends TestCase {
+     /**
+      * Creates the factory to use for all tests in this class.
+      *
+      * @throws FactoryException if an error occurred while creating the factory.
+      */
+     @BeforeClass
+     public static void createFactory() throws FactoryException {
+         TestFactorySource.createFactory();
+     }
+ 
+     /**
+      * Forces release of JDBC connections after the tests in this class.
+      *
+      * @throws FactoryException if an error occurred while closing the connections.
+      */
+     @AfterClass
+     public static void close() throws FactoryException {
+         TestFactorySource.close();
+     }
+ 
+     /**
+      * Tests "Campo Inchauspe / Argentina 7" (EPSG:22197).
+      * This projection has a <cite>"Latitude of natural origin"</cite> at the south pole.
+      *
+      * @throws FactoryException if an error occurred while creating the CRS.
+      *
+      * @see <a href="https://issues.apache.org/jira/browse/SIS-377">SIS-377</a>
+      */
+     @Test
+     public void testLatitudeAtPole() throws FactoryException {
+         compare("PROJCRS[\"Campo Inchauspe / Argentina 7\",\n" +
+                 "  BASEGEODCRS[\"Campo Inchauspe\",\n" +
+                 "    DATUM[\"Campo Inchauspe\",\n" +
+                 "      ELLIPSOID[\"International 1924\",6378388,297,LENGTHUNIT[\"metre\",1.0]]]],\n" +
+                 "  CONVERSION[\"Argentina zone 7\",\n" +
+                 "    METHOD[\"Transverse Mercator\",ID[\"EPSG\",9807]],\n" +
+                 "    PARAMETER[\"Latitude of natural origin\",-90,ANGLEUNIT[\"degree\",0.01745329252]],\n" +
+                 "    PARAMETER[\"Longitude of natural origin\",-54,ANGLEUNIT[\"degree\",0.01745329252]],\n" +
+                 "    PARAMETER[\"Scale factor at natural origin\",1,SCALEUNIT[\"unity\",1.0]],\n" +
+                 "    PARAMETER[\"False easting\",7500000,LENGTHUNIT[\"metre\",1.0]],\n" +
+                 "    PARAMETER[\"False northing\",0,LENGTHUNIT[\"metre\",1.0]]],\n" +
+                 "  CS[cartesian,2],\n" +
+                 "    AXIS[\"northing (X)\",north,ORDER[1]],\n" +
+                 "    AXIS[\"easting (Y)\",east,ORDER[2]],\n" +
+                 "    LENGTHUNIT[\"metre\",1.0],\n" +
+                 "  ID[\"EPSG\",22197]]", 22197);
+     }
+ 
+     /**
+      * Tests "Pulkovo 1942 / 3-degree Gauss-Kruger CM 180E" (EPSG:2636).
+      * This projection has a <cite>"Longitude of natural origin"</cite> at the anti-meridian.
+      *
+      * @throws FactoryException if an error occurred while creating the CRS.
+      *
+      * @see <a href="https://issues.apache.org/jira/browse/SIS-377">SIS-377</a>
+      */
+     @Test
+     public void testLongitudeAtAntiMeridian() throws FactoryException {
+         compare("PROJCRS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 180E\",\n" +
+                 "  BASEGEODCRS[\"Pulkovo 1942\",\n" +
+                 "    DATUM[\"Pulkovo 1942\",\n" +
+                 "      ELLIPSOID[\"Krassowsky 1940\",6378245,298.3,LENGTHUNIT[\"metre\",1.0]]]],\n" +
+                 "  CONVERSION[\"3-degree Gauss-Kruger CM 180\",\n" +
+                 "    METHOD[\"Transverse Mercator\",ID[\"EPSG\",9807]],\n" +
+                 "    PARAMETER[\"Latitude of natural origin\",0,ANGLEUNIT[\"degree\",0.01745329252]],\n" +
+                 "    PARAMETER[\"Longitude of natural origin\",180,ANGLEUNIT[\"degree\",0.01745329252]],\n" +
+                 "    PARAMETER[\"Scale factor at natural origin\",1,SCALEUNIT[\"unity\",1.0]],\n" +
+                 "    PARAMETER[\"False easting\",500000,LENGTHUNIT[\"metre\",1.0]],\n" +
+                 "    PARAMETER[\"False northing\",0,LENGTHUNIT[\"metre\",1.0]]],\n" +
+                 "  CS[cartesian,2],\n" +
+                 "    AXIS[\"northing (X)\",north,ORDER[1]],\n" +
+                 "    AXIS[\"easting (Y)\",east,ORDER[2]],\n" +
+                 "    LENGTHUNIT[\"metre\",1.0],\n" +
+                 "  ID[\"EPSG\",2636]]", 2636);
+     }
+ 
+     /**
+      * Tests "Belge 1950 (Brussels) / Belge Lambert 50" (EPSG:21500).
+      * This projection has a <cite>"Latitude of false origin"</cite> at the anti-meridian.
+      *
+      * @throws FactoryException if an error occurred while creating the CRS.
+      *
+      * @see <a href="https://issues.apache.org/jira/browse/SIS-377">SIS-377</a>
+      */
+     @Test
+     public void testLambert() throws FactoryException {
+         compare("PROJCRS[\"Belge 1950 (Brussels) / Belge Lambert 50\",\n" +
+                 "  BASEGEODCRS[\"Belge 1950 (Brussels)\",\n" +
+                 "    DATUM[\"Reseau National Belge 1950 (Brussels)\",\n" +
+                 "      ELLIPSOID[\"International 1924\",6378388,297,LENGTHUNIT[\"metre\",1.0]]],\n" +
+                 "    PRIMEM[\"Brussels\",4.367975,ANGLEUNIT[\"degree\",0.01745329252]]],\n" +
+                 "  CONVERSION[\"Belge Lambert 50\",\n" +
+                 "    METHOD[\"Lambert Conic Conformal (2SP)\",ID[\"EPSG\",9802]],\n" +
+                 "    PARAMETER[\"Latitude of false origin\",90,ANGLEUNIT[\"degree\",0.01745329252]],\n" +
+                 "    PARAMETER[\"Longitude of false origin\",0,ANGLEUNIT[\"degree\",0.01745329252]],\n" +
+                 "    PARAMETER[\"Latitude of 1st standard parallel\",49.833333333333,ANGLEUNIT[\"degree\",0.01745329252]],\n" +
+                 "    PARAMETER[\"Latitude of 2nd standard parallel\",51.166666666667,ANGLEUNIT[\"degree\",0.01745329252]],\n" +
+                 "    PARAMETER[\"Easting at false origin\",150000,LENGTHUNIT[\"metre\",1.0]],\n" +
+                 "    PARAMETER[\"Northing at false origin\",5400000,LENGTHUNIT[\"metre\",1.0]]],\n" +
+                 "  CS[cartesian,2],\n" +
+                 "    AXIS[\"easting (X)\",east,ORDER[1]],\n" +
+                 "    AXIS[\"northing (Y)\",north,ORDER[2]],\n" +
+                 "    LENGTHUNIT[\"metre\",1.0],\n" +
+                 "  ID[\"EPSG\",21500]]", 21500);
+     }
+ 
+     /**
+      * Compares a projected CRS parsed from a WKT with a the CRS built from EPSG database.
+      * The later is taken as the reference.
+      */
+     private static void compare(final String wkt, final int epsg) throws FactoryException {
+         final CoordinateReferenceSystem crs = CRS.fromWKT(wkt);
+         final EPSGFactory factory = TestFactorySource.factory;
+         assumeNotNull(factory);
+         final CoordinateReferenceSystem reference = factory.createProjectedCRS(Integer.toString(epsg));
+         assertEqualsIgnoreMetadata(reference, crs);
+     }
+ }
diff --cc core/sis-referencing/src/test/java/org/apache/sis/test/suite/ReferencingTestSuite.java
index 1fcd5e8,3a6f889..e9e6c93
--- a/core/sis-referencing/src/test/java/org/apache/sis/test/suite/ReferencingTestSuite.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/test/suite/ReferencingTestSuite.java
@@@ -192,7 -197,20 +192,8 @@@ import org.junit.BeforeClass
      org.apache.sis.io.wkt.MathTransformParserTest.class,
      org.apache.sis.io.wkt.GeodeticObjectParserTest.class,
      org.apache.sis.io.wkt.WKTFormatTest.class,
 -    org.apache.sis.io.wkt.WKTParserTest.class,
+     org.apache.sis.io.wkt.ComparisonWithEPSG.class,
  
 -    // Geodetic object creations from authority codes.
 -    org.apache.sis.referencing.factory.GIGS2001.class,
 -    org.apache.sis.referencing.factory.GIGS2002.class,
 -    org.apache.sis.referencing.factory.GIGS2003.class,
 -    org.apache.sis.referencing.factory.GIGS2004.class,
 -    org.apache.sis.referencing.factory.GIGS2005.class,
 -    org.apache.sis.referencing.factory.GIGS2006.class,
 -    org.apache.sis.referencing.factory.GIGS2007.class,
 -    org.apache.sis.referencing.factory.GIGS2008.class,
 -    org.apache.sis.referencing.factory.GIGS2009.class,
 -
      // Following tests use indirectly EPSG factory.
      org.apache.sis.referencing.CommonCRSTest.class,
      org.apache.sis.referencing.factory.CommonAuthorityFactoryTest.class,
diff --cc core/sis-utility/src/main/java/org/apache/sis/internal/geoapi/temporal/Duration.java
index 89d48e5,7291456..0da87d2
--- a/core/sis-utility/src/main/java/org/apache/sis/internal/geoapi/temporal/Duration.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/internal/geoapi/temporal/Duration.java
@@@ -14,15 -14,18 +14,16 @@@
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
++package org.apache.sis.internal.geoapi.temporal;
 +
  
  /**
-  * Maven plugins (others than {@link org.apache.sis.util.resources.ResourceCompilerMojo}) used
-  * for building Apache SIS. See the Maven-generated module description for more information.
 - * Filters features according their properties.
 - * A <cite>filter expression</cite> is a construct used to constraint a feature set to a subset.
++ * Placeholder for a GeoAPI interfaces not present in GeoAPI 3.0.
   *
-  * @author  Martin Desruisseaux (IRD, Geomatys)
-  * @version 0.8
-  * @since   0.3
 - * @author  Johann Sorel (Geomatys)
+  * @author  Martin Desruisseaux (Geomatys)
++ * @since   1.0
+  * @version 1.0
 - *
 - * @see <a href="http://docs.opengeospatial.org/is/09-026r2/09-026r2.html">OGC® Filter Encoding 2.0 Encoding Standard</a>
 - *
 - * @since 1.0
   * @module
   */
- package org.apache.sis.internal.maven;
 -package org.apache.sis.filter;
++public interface Duration {
++}
diff --cc storage/sis-earth-observation/src/test/java/org/apache/sis/storage/earthobservation/LandsatReaderTest.java
index 180483b,aa887c0..fe65059
--- a/storage/sis-earth-observation/src/test/java/org/apache/sis/storage/earthobservation/LandsatReaderTest.java
+++ b/storage/sis-earth-observation/src/test/java/org/apache/sis/storage/earthobservation/LandsatReaderTest.java
@@@ -31,7 -40,7 +31,7 @@@ import org.apache.sis.test.TestCase
  import org.junit.Test;
  
  import static org.apache.sis.test.Assert.*;
- import static org.apache.sis.test.TestUtilities.formatNameAndValue;
 -import static org.apache.sis.test.TestUtilities.date;
++import static org.apache.sis.test.TestUtilities.formatMetadata;
  import static org.apache.sis.storage.earthobservation.LandsatReader.DIM;
  
  
@@@ -92,205 -101,174 +92,205 @@@ public class LandsatReaderTest extends 
              reader.read(in);
              actual = reader.getMetadata();
          }
-         final String text = formatNameAndValue(DefaultMetadata.castOrCopy(actual).asTreeTable());
 -        final ContentVerifier verifier = new ContentVerifier();
 -        verifier.addPropertyToIgnore(Metadata.class, "metadataStandard");           // Because hard-coded in SIS.
 -        verifier.addPropertyToIgnore(Metadata.class, "referenceSystemInfo");        // Very verbose and depends on EPSG connection.
 -        verifier.addMetadataToVerify(actual);
 -        verifier.assertMetadataEquals(
 -            "language[0]",                                                                           "en",
 -            "metadataIdentifier.code",                                                               "LandsatTest",
 -            "metadataScope[0].resourceScope",                                                        ScopeCode.COVERAGE,
 -            "dateInfo[0].date",                                                                      date("2016-06-27 16:48:12"),
 -            "dateInfo[0].dateType",                                                                  DateType.CREATION,
 -            "identificationInfo[0].topicCategory[0]",                                                TopicCategory.GEOSCIENTIFIC_INFORMATION,
 -            "identificationInfo[0].citation.date[0].date",                                           date("2016-06-27 16:48:12"),
 -            "identificationInfo[0].citation.date[0].dateType",                                       DateType.CREATION,
 -            "identificationInfo[0].citation.title",                                                  "LandsatTest",
 -            "identificationInfo[0].credit[0]",                                                       "Derived from U.S. Geological Survey data",
 -            "identificationInfo[0].resourceFormat[0].formatSpecificationCitation.title",             "GeoTIFF Coverage Encoding Profile",
 -            "identificationInfo[0].resourceFormat[0].formatSpecificationCitation.alternateTitle[0]", "GeoTIFF",
 -            "identificationInfo[0].extent[0].geographicElement[0].extentTypeCode",                   true,
 -            "identificationInfo[0].extent[0].geographicElement[0].westBoundLongitude",               108.34,
 -            "identificationInfo[0].extent[0].geographicElement[0].eastBoundLongitude",               110.44,
 -            "identificationInfo[0].extent[0].geographicElement[0].southBoundLatitude",                10.50,
 -            "identificationInfo[0].extent[0].geographicElement[0].northBoundLatitude",                12.62,
 -            "identificationInfo[0].spatialResolution[0].distance",                                    15.0,
 -            "identificationInfo[0].spatialResolution[1].distance",                                    30.0,
 -
 -            "acquisitionInformation[0].platform[0].identifier.code",               "Pseudo LANDSAT",
 -            "acquisitionInformation[0].platform[0].instrument[0].identifier.code", "Pseudo TIRS",
 -            "acquisitionInformation[0].acquisitionRequirement[0].identifier.code", "Software unit tests",
 -            "acquisitionInformation[0].operation[0].significantEvent[0].context",  Context.ACQUISITION,
 -            "acquisitionInformation[0].operation[0].significantEvent[0].time",     date("2016-06-26 03:02:01.090"),
 -            "acquisitionInformation[0].operation[0].status",                       Progress.COMPLETED,
 -            "acquisitionInformation[0].operation[0].type",                         OperationType.REAL,
 -
 -            "contentInfo[0].processingLevelCode.authority.title",          "Landsat",
 -            "contentInfo[0].processingLevelCode.codeSpace",                "Landsat",
 -            "contentInfo[0].processingLevelCode.code",                     "Pseudo LT1",
 -
 -            "contentInfo[0].attributeGroup[0].attribute[0].name[0].code",  "TestImage_B1.TIF",
 -            "contentInfo[0].attributeGroup[0].attribute[1].name[0].code",  "TestImage_B2.TIF",
 -            "contentInfo[0].attributeGroup[0].attribute[2].name[0].code",  "TestImage_B3.TIF",
 -            "contentInfo[0].attributeGroup[0].attribute[3].name[0].code",  "TestImage_B4.TIF",
 -            "contentInfo[0].attributeGroup[0].attribute[4].name[0].code",  "TestImage_B5.TIF",
 -            "contentInfo[0].attributeGroup[0].attribute[5].name[0].code",  "TestImage_B6.TIF",
 -            "contentInfo[0].attributeGroup[0].attribute[6].name[0].code",  "TestImage_B7.TIF",
 -            "contentInfo[0].attributeGroup[0].attribute[7].name[0].code",  "TestImage_B9.TIF",
 -            "contentInfo[0].attributeGroup[1].attribute[0].name[0].code",  "TestImage_B8.TIF",
 -            "contentInfo[0].attributeGroup[2].attribute[0].name[0].code",  "TestImage_B10.TIF",
 -            "contentInfo[0].attributeGroup[2].attribute[1].name[0].code",  "TestImage_B11.TIF",
 -
 -            "contentInfo[0].attributeGroup[0].attribute[0].description",   "Coastal Aerosol",
 -            "contentInfo[0].attributeGroup[0].attribute[1].description",   "Blue",
 -            "contentInfo[0].attributeGroup[0].attribute[2].description",   "Green",
 -            "contentInfo[0].attributeGroup[0].attribute[3].description",   "Red",
 -            "contentInfo[0].attributeGroup[0].attribute[4].description",   "Near-Infrared",
 -            "contentInfo[0].attributeGroup[0].attribute[5].description",   "Short Wavelength Infrared (SWIR) 1",
 -            "contentInfo[0].attributeGroup[0].attribute[6].description",   "Short Wavelength Infrared (SWIR) 2",
 -            "contentInfo[0].attributeGroup[0].attribute[7].description",   "Cirrus",
 -            "contentInfo[0].attributeGroup[1].attribute[0].description",   "Panchromatic",
 -            "contentInfo[0].attributeGroup[2].attribute[0].description",   "Thermal Infrared Sensor (TIRS) 1",
 -            "contentInfo[0].attributeGroup[2].attribute[1].description",   "Thermal Infrared Sensor (TIRS) 2",
 -
 -            "contentInfo[0].attributeGroup[0].attribute[0].minValue",      1.0,
 -            "contentInfo[0].attributeGroup[0].attribute[1].minValue",      1.0,
 -            "contentInfo[0].attributeGroup[0].attribute[2].minValue",      1.0,
 -            "contentInfo[0].attributeGroup[0].attribute[3].minValue",      1.0,
 -            "contentInfo[0].attributeGroup[0].attribute[4].minValue",      1.0,
 -            "contentInfo[0].attributeGroup[0].attribute[5].minValue",      1.0,
 -            "contentInfo[0].attributeGroup[0].attribute[6].minValue",      1.0,
 -            "contentInfo[0].attributeGroup[0].attribute[7].minValue",      1.0,
 -            "contentInfo[0].attributeGroup[1].attribute[0].minValue",      1.0,
 -            "contentInfo[0].attributeGroup[2].attribute[0].minValue",      1.0,
 -            "contentInfo[0].attributeGroup[2].attribute[1].minValue",      1.0,
 -
 -            "contentInfo[0].attributeGroup[0].attribute[0].maxValue",      65535.0,
 -            "contentInfo[0].attributeGroup[0].attribute[1].maxValue",      65535.0,
 -            "contentInfo[0].attributeGroup[0].attribute[2].maxValue",      65535.0,
 -            "contentInfo[0].attributeGroup[0].attribute[3].maxValue",      65535.0,
 -            "contentInfo[0].attributeGroup[0].attribute[4].maxValue",      65535.0,
 -            "contentInfo[0].attributeGroup[0].attribute[5].maxValue",      65535.0,
 -            "contentInfo[0].attributeGroup[0].attribute[6].maxValue",      65535.0,
 -            "contentInfo[0].attributeGroup[0].attribute[7].maxValue",      65535.0,
 -            "contentInfo[0].attributeGroup[1].attribute[0].maxValue",      65535.0,
 -            "contentInfo[0].attributeGroup[2].attribute[0].maxValue",      65535.0,
 -            "contentInfo[0].attributeGroup[2].attribute[1].maxValue",      65535.0,
 -
 -            "contentInfo[0].attributeGroup[0].attribute[0].peakResponse",    433.0,
 -            "contentInfo[0].attributeGroup[0].attribute[1].peakResponse",    482.0,
 -            "contentInfo[0].attributeGroup[0].attribute[2].peakResponse",    562.0,
 -            "contentInfo[0].attributeGroup[0].attribute[3].peakResponse",    655.0,
 -            "contentInfo[0].attributeGroup[0].attribute[4].peakResponse",    865.0,
 -            "contentInfo[0].attributeGroup[0].attribute[5].peakResponse",   1610.0,
 -            "contentInfo[0].attributeGroup[0].attribute[6].peakResponse",   2200.0,
 -            "contentInfo[0].attributeGroup[0].attribute[7].peakResponse",   1375.0,
 -            "contentInfo[0].attributeGroup[1].attribute[0].peakResponse",    590.0,
 -            "contentInfo[0].attributeGroup[2].attribute[0].peakResponse",  10800.0,
 -            "contentInfo[0].attributeGroup[2].attribute[1].peakResponse",  12000.0,
 -
 -            "contentInfo[0].attributeGroup[0].attribute[0].transferFunctionType",  TransferFunctionType.LINEAR,
 -            "contentInfo[0].attributeGroup[0].attribute[1].transferFunctionType",  TransferFunctionType.LINEAR,
 -            "contentInfo[0].attributeGroup[0].attribute[2].transferFunctionType",  TransferFunctionType.LINEAR,
 -            "contentInfo[0].attributeGroup[0].attribute[3].transferFunctionType",  TransferFunctionType.LINEAR,
 -            "contentInfo[0].attributeGroup[0].attribute[4].transferFunctionType",  TransferFunctionType.LINEAR,
 -            "contentInfo[0].attributeGroup[0].attribute[5].transferFunctionType",  TransferFunctionType.LINEAR,
 -            "contentInfo[0].attributeGroup[0].attribute[6].transferFunctionType",  TransferFunctionType.LINEAR,
 -            "contentInfo[0].attributeGroup[0].attribute[7].transferFunctionType",  TransferFunctionType.LINEAR,
 -            "contentInfo[0].attributeGroup[1].attribute[0].transferFunctionType",  TransferFunctionType.LINEAR,
 -            "contentInfo[0].attributeGroup[2].attribute[0].transferFunctionType",  TransferFunctionType.LINEAR,
 -            "contentInfo[0].attributeGroup[2].attribute[1].transferFunctionType",  TransferFunctionType.LINEAR,
 -
 -            "contentInfo[0].attributeGroup[0].attribute[0].scaleFactor",  0.0127,
 -            "contentInfo[0].attributeGroup[0].attribute[1].scaleFactor",  0.013,
 -            "contentInfo[0].attributeGroup[0].attribute[2].scaleFactor",  0.012,
 -            "contentInfo[0].attributeGroup[0].attribute[3].scaleFactor",  0.0101,
 -            "contentInfo[0].attributeGroup[0].attribute[4].scaleFactor",  0.00619,
 -            "contentInfo[0].attributeGroup[0].attribute[5].scaleFactor",  0.00154,
 -            "contentInfo[0].attributeGroup[0].attribute[6].scaleFactor",  0.000519,
 -            "contentInfo[0].attributeGroup[0].attribute[7].scaleFactor",  0.00242,
 -            "contentInfo[0].attributeGroup[1].attribute[0].scaleFactor",  0.0115,
 -            "contentInfo[0].attributeGroup[2].attribute[0].scaleFactor",  0.000334,
 -            "contentInfo[0].attributeGroup[2].attribute[1].scaleFactor",  0.000334,
 -
 -            "contentInfo[0].attributeGroup[0].attribute[0].offset",       -63.6,
 -            "contentInfo[0].attributeGroup[0].attribute[1].offset",       -65.1,
 -            "contentInfo[0].attributeGroup[0].attribute[2].offset",       -60.0,
 -            "contentInfo[0].attributeGroup[0].attribute[3].offset",       -50.6,
 -            "contentInfo[0].attributeGroup[0].attribute[4].offset",       -31.0,
 -            "contentInfo[0].attributeGroup[0].attribute[5].offset",       -7.7,
 -            "contentInfo[0].attributeGroup[0].attribute[6].offset",       -2.6,
 -            "contentInfo[0].attributeGroup[0].attribute[7].offset",       -12.1,
 -            "contentInfo[0].attributeGroup[1].attribute[0].offset",       -57.3,
 -            "contentInfo[0].attributeGroup[2].attribute[0].offset",       0.1,
 -            "contentInfo[0].attributeGroup[2].attribute[1].offset",       0.1,
 -
 -            "contentInfo[0].attributeGroup[0].attribute[0].boundUnits",   "nm",
 -            "contentInfo[0].attributeGroup[0].attribute[1].boundUnits",   "nm",
 -            "contentInfo[0].attributeGroup[0].attribute[2].boundUnits",   "nm",
 -            "contentInfo[0].attributeGroup[0].attribute[3].boundUnits",   "nm",
 -            "contentInfo[0].attributeGroup[0].attribute[4].boundUnits",   "nm",
 -            "contentInfo[0].attributeGroup[0].attribute[5].boundUnits",   "nm",
 -            "contentInfo[0].attributeGroup[0].attribute[6].boundUnits",   "nm",
 -            "contentInfo[0].attributeGroup[0].attribute[7].boundUnits",   "nm",
 -            "contentInfo[0].attributeGroup[1].attribute[0].boundUnits",   "nm",
 -            "contentInfo[0].attributeGroup[2].attribute[0].boundUnits",   "nm",
 -            "contentInfo[0].attributeGroup[2].attribute[1].boundUnits",   "nm",
 -
 -            "contentInfo[0].attributeGroup[0].contentType[0]", CoverageContentType.PHYSICAL_MEASUREMENT,
 -            "contentInfo[0].attributeGroup[1].contentType[0]", CoverageContentType.PHYSICAL_MEASUREMENT,
 -            "contentInfo[0].attributeGroup[2].contentType[0]", CoverageContentType.PHYSICAL_MEASUREMENT,
 -
 -            "contentInfo[0].cloudCoverPercentage",         8.3,
 -            "contentInfo[0].illuminationAzimuthAngle",   116.9,
 -            "contentInfo[0].illuminationElevationAngle",  58.8,
 -
 -            "spatialRepresentationInfo[0].numberOfDimensions",                       2,
 -            "spatialRepresentationInfo[1].numberOfDimensions",                       2,
 -            "spatialRepresentationInfo[0].axisDimensionProperties[0].dimensionName", DimensionNameType.SAMPLE,
 -            "spatialRepresentationInfo[1].axisDimensionProperties[0].dimensionName", DimensionNameType.SAMPLE,
 -            "spatialRepresentationInfo[0].axisDimensionProperties[1].dimensionName", DimensionNameType.LINE,
 -            "spatialRepresentationInfo[1].axisDimensionProperties[1].dimensionName", DimensionNameType.LINE,
 -            "spatialRepresentationInfo[0].axisDimensionProperties[0].dimensionSize", 15000,
 -            "spatialRepresentationInfo[0].axisDimensionProperties[1].dimensionSize", 15500,
 -            "spatialRepresentationInfo[1].axisDimensionProperties[0].dimensionSize", 7600,
 -            "spatialRepresentationInfo[1].axisDimensionProperties[1].dimensionSize", 7800,
 -            "spatialRepresentationInfo[0].transformationParameterAvailability",      false,
 -            "spatialRepresentationInfo[1].transformationParameterAvailability",      false,
 -            "spatialRepresentationInfo[0].checkPointAvailability",                   false,
 -            "spatialRepresentationInfo[1].checkPointAvailability",                   false,
 -
 -            "resourceLineage[0].source[0].description", "Pseudo GLS");
++        final String text = formatMetadata(DefaultMetadata.castOrCopy(actual).asTreeTable());
 +        assertMultilinesEquals(
 +                "Metadata\n"
 +                + "  ├─Metadata identifier……………………………………………………………… LandsatTest\n"
 +                + "  ├─Metadata standard (1 of 2)…………………………………………… Geographic Information — Metadata Part 1: Fundamentals\n"
 +                + "  │   ├─Alternate title……………………………………………………………… ISO 19115-1\n"
 +                + "  │   ├─Edition…………………………………………………………………………………… ISO 19115-1:2014(E)\n"
 +                + "  │   ├─Identifier…………………………………………………………………………… 19115-1\n"
 +                + "  │   ├─Cited responsible party\n"
 +                + "  │   │   ├─Role………………………………………………………………………………… Principal investigator\n"
 +                + "  │   │   └─Party……………………………………………………………………………… International Organization for Standardization\n"
 +                + "  │   └─Presentation form………………………………………………………… Document digital\n"
 +                + "  ├─Metadata standard (2 of 2)…………………………………………… Geographic Information — Metadata Part 2: Extensions for imagery and gridded data\n"
 +                + "  │   ├─Alternate title……………………………………………………………… ISO 19115-2\n"
 +                + "  │   ├─Edition…………………………………………………………………………………… ISO 19115-2:2009(E)\n"
 +                + "  │   ├─Identifier…………………………………………………………………………… 19115-2\n"
 +                + "  │   ├─Cited responsible party\n"
 +                + "  │   │   ├─Role………………………………………………………………………………… Principal investigator\n"
 +                + "  │   │   └─Party……………………………………………………………………………… International Organization for Standardization\n"
 +                + "  │   └─Presentation form………………………………………………………… Document digital\n"
 +                + "  ├─Spatial representation info (1 of 2)\n"
 +                + "  │   ├─Number of dimensions………………………………………………… 2\n"
 +                + "  │   ├─Axis dimension properties (1 of 2)…………… Sample\n"
 +                + "  │   │   └─Dimension size……………………………………………………… 15000\n"
 +                + "  │   ├─Axis dimension properties (2 of 2)…………… Line\n"
 +                + "  │   │   └─Dimension size……………………………………………………… 15500\n"
 +                + "  │   ├─Transformation parameter availability…… false\n"
 +                + "  │   └─Check point availability……………………………………… false\n"
 +                + "  ├─Spatial representation info (2 of 2)\n"
 +                + "  │   ├─Number of dimensions………………………………………………… 2\n"
 +                + "  │   ├─Axis dimension properties (1 of 2)…………… Sample\n"
 +                + "  │   │   └─Dimension size……………………………………………………… 7600\n"
 +                + "  │   ├─Axis dimension properties (2 of 2)…………… Line\n"
 +                + "  │   │   └─Dimension size……………………………………………………… 7800\n"
 +                + "  │   ├─Transformation parameter availability…… false\n"
 +                + "  │   └─Check point availability……………………………………… false\n"
 +                + "  ├─Reference system info………………………………………………………… EPSG:WGS 84 / UTM zone 49N\n"
 +                + "  ├─Identification info\n"
 +                + "  │   ├─Citation………………………………………………………………………………… LandsatTest\n"
 +                + "  │   │   └─Date………………………………………………………………………………… 2016-06-27 16:48:12\n"
 +                + "  │   │       └─Date type………………………………………………………… Creation\n"
 +                + "  │   ├─Credit……………………………………………………………………………………… Derived from U.S. Geological Survey data\n"
 +                + "  │   ├─Spatial resolution (1 of 2)\n"
 +                + "  │   │   └─Distance……………………………………………………………………… 15.0\n"
 +                + "  │   ├─Spatial resolution (2 of 2)\n"
 +                + "  │   │   └─Distance……………………………………………………………………… 30.0\n"
 +                + "  │   ├─Topic category………………………………………………………………… Geoscientific information\n"
 +                + "  │   ├─Extent\n"
 +                + "  │   │   └─Geographic element\n"
 +                + "  │   │       ├─West bound longitude…………………………… 108°20′24″E\n"
 +                + "  │   │       ├─East bound longitude…………………………… 110°26′24″E\n"
 +                + "  │   │       ├─South bound latitude…………………………… 10°30′N\n"
 +                + "  │   │       ├─North bound latitude…………………………… 12°37′12″N\n"
 +                + "  │   │       └─Extent type code……………………………………… true\n"
 +                + "  │   └─Resource format\n"
 +                + "  │       └─Format specification citation……………… GeoTIFF Coverage Encoding Profile\n"
 +                + "  │           └─Alternate title………………………………………… GeoTIFF\n"
 +                + "  ├─Content info\n"
 +                + "  │   ├─Processing level code……………………………………………… Pseudo LT1\n"
 +                + "  │   │   ├─Authority…………………………………………………………………… Landsat\n"
 +                + "  │   │   └─Code space………………………………………………………………… Landsat\n"
 +                + "  │   ├─Attribute group (1 of 3)\n"
 +                + "  │   │   ├─Content type…………………………………………………………… Physical measurement\n"
 +                + "  │   │   ├─Attribute (1 of 8)\n"
 +                + "  │   │   │   ├─Description…………………………………………………… Coastal Aerosol\n"
 +                + "  │   │   │   ├─Name……………………………………………………………………… TestImage_B1.TIF\n"
 +                + "  │   │   │   ├─Max value………………………………………………………… 65535.0\n"
 +                + "  │   │   │   ├─Min value………………………………………………………… 1.0\n"
 +                + "  │   │   │   ├─Scale factor………………………………………………… 0.0127\n"
 +                + "  │   │   │   ├─Offset………………………………………………………………… -63.6\n"
 +                + "  │   │   │   ├─Bound units…………………………………………………… nm\n"
 +                + "  │   │   │   ├─Peak response……………………………………………… 433.0\n"
 +                + "  │   │   │   └─Transfer function type……………………… Linear\n"
 +                + "  │   │   ├─Attribute (2 of 8)\n"
 +                + "  │   │   │   ├─Description…………………………………………………… Blue\n"
 +                + "  │   │   │   ├─Name……………………………………………………………………… TestImage_B2.TIF\n"
 +                + "  │   │   │   ├─Max value………………………………………………………… 65535.0\n"
 +                + "  │   │   │   ├─Min value………………………………………………………… 1.0\n"
 +                + "  │   │   │   ├─Scale factor………………………………………………… 0.013\n"
 +                + "  │   │   │   ├─Offset………………………………………………………………… -65.1\n"
 +                + "  │   │   │   ├─Bound units…………………………………………………… nm\n"
 +                + "  │   │   │   ├─Peak response……………………………………………… 482.0\n"
 +                + "  │   │   │   └─Transfer function type……………………… Linear\n"
 +                + "  │   │   ├─Attribute (3 of 8)\n"
 +                + "  │   │   │   ├─Description…………………………………………………… Green\n"
 +                + "  │   │   │   ├─Name……………………………………………………………………… TestImage_B3.TIF\n"
 +                + "  │   │   │   ├─Max value………………………………………………………… 65535.0\n"
 +                + "  │   │   │   ├─Min value………………………………………………………… 1.0\n"
 +                + "  │   │   │   ├─Scale factor………………………………………………… 0.012\n"
 +                + "  │   │   │   ├─Offset………………………………………………………………… -60.0\n"
 +                + "  │   │   │   ├─Bound units…………………………………………………… nm\n"
 +                + "  │   │   │   ├─Peak response……………………………………………… 562.0\n"
 +                + "  │   │   │   └─Transfer function type……………………… Linear\n"
 +                + "  │   │   ├─Attribute (4 of 8)\n"
 +                + "  │   │   │   ├─Description…………………………………………………… Red\n"
 +                + "  │   │   │   ├─Name……………………………………………………………………… TestImage_B4.TIF\n"
 +                + "  │   │   │   ├─Max value………………………………………………………… 65535.0\n"
 +                + "  │   │   │   ├─Min value………………………………………………………… 1.0\n"
 +                + "  │   │   │   ├─Scale factor………………………………………………… 0.0101\n"
 +                + "  │   │   │   ├─Offset………………………………………………………………… -50.6\n"
 +                + "  │   │   │   ├─Bound units…………………………………………………… nm\n"
 +                + "  │   │   │   ├─Peak response……………………………………………… 655.0\n"
 +                + "  │   │   │   └─Transfer function type……………………… Linear\n"
 +                + "  │   │   ├─Attribute (5 of 8)\n"
 +                + "  │   │   │   ├─Description…………………………………………………… Near-Infrared\n"
 +                + "  │   │   │   ├─Name……………………………………………………………………… TestImage_B5.TIF\n"
 +                + "  │   │   │   ├─Max value………………………………………………………… 65535.0\n"
 +                + "  │   │   │   ├─Min value………………………………………………………… 1.0\n"
 +                + "  │   │   │   ├─Scale factor………………………………………………… 0.00619\n"
 +                + "  │   │   │   ├─Offset………………………………………………………………… -31.0\n"
 +                + "  │   │   │   ├─Bound units…………………………………………………… nm\n"
 +                + "  │   │   │   ├─Peak response……………………………………………… 865.0\n"
 +                + "  │   │   │   └─Transfer function type……………………… Linear\n"
 +                + "  │   │   ├─Attribute (6 of 8)\n"
 +                + "  │   │   │   ├─Description…………………………………………………… Short Wavelength Infrared (SWIR) 1\n"
 +                + "  │   │   │   ├─Name……………………………………………………………………… TestImage_B6.TIF\n"
 +                + "  │   │   │   ├─Max value………………………………………………………… 65535.0\n"
 +                + "  │   │   │   ├─Min value………………………………………………………… 1.0\n"
 +                + "  │   │   │   ├─Scale factor………………………………………………… 0.00154\n"
 +                + "  │   │   │   ├─Offset………………………………………………………………… -7.7\n"
 +                + "  │   │   │   ├─Bound units…………………………………………………… nm\n"
 +                + "  │   │   │   ├─Peak response……………………………………………… 1610.0\n"
 +                + "  │   │   │   └─Transfer function type……………………… Linear\n"
 +                + "  │   │   ├─Attribute (7 of 8)\n"
 +                + "  │   │   │   ├─Description…………………………………………………… Short Wavelength Infrared (SWIR) 2\n"
 +                + "  │   │   │   ├─Name……………………………………………………………………… TestImage_B7.TIF\n"
 +                + "  │   │   │   ├─Max value………………………………………………………… 65535.0\n"
 +                + "  │   │   │   ├─Min value………………………………………………………… 1.0\n"
 +                + "  │   │   │   ├─Scale factor………………………………………………… 5.19E-4\n"
 +                + "  │   │   │   ├─Offset………………………………………………………………… -2.6\n"
 +                + "  │   │   │   ├─Bound units…………………………………………………… nm\n"
 +                + "  │   │   │   ├─Peak response……………………………………………… 2200.0\n"
 +                + "  │   │   │   └─Transfer function type……………………… Linear\n"
 +                + "  │   │   └─Attribute (8 of 8)\n"
 +                + "  │   │       ├─Description…………………………………………………… Cirrus\n"
 +                + "  │   │       ├─Name……………………………………………………………………… TestImage_B9.TIF\n"
 +                + "  │   │       ├─Max value………………………………………………………… 65535.0\n"
 +                + "  │   │       ├─Min value………………………………………………………… 1.0\n"
 +                + "  │   │       ├─Scale factor………………………………………………… 0.00242\n"
 +                + "  │   │       ├─Offset………………………………………………………………… -12.1\n"
 +                + "  │   │       ├─Bound units…………………………………………………… nm\n"
 +                + "  │   │       ├─Peak response……………………………………………… 1375.0\n"
 +                + "  │   │       └─Transfer function type……………………… Linear\n"
 +                + "  │   ├─Attribute group (2 of 3)\n"
 +                + "  │   │   ├─Content type…………………………………………………………… Physical measurement\n"
 +                + "  │   │   └─Attribute\n"
 +                + "  │   │       ├─Description…………………………………………………… Panchromatic\n"
 +                + "  │   │       ├─Name……………………………………………………………………… TestImage_B8.TIF\n"
 +                + "  │   │       ├─Max value………………………………………………………… 65535.0\n"
 +                + "  │   │       ├─Min value………………………………………………………… 1.0\n"
 +                + "  │   │       ├─Scale factor………………………………………………… 0.0115\n"
 +                + "  │   │       ├─Offset………………………………………………………………… -57.3\n"
 +                + "  │   │       ├─Bound units…………………………………………………… nm\n"
 +                + "  │   │       ├─Peak response……………………………………………… 590.0\n"
 +                + "  │   │       └─Transfer function type……………………… Linear\n"
 +                + "  │   ├─Attribute group (3 of 3)\n"
 +                + "  │   │   ├─Content type…………………………………………………………… Physical measurement\n"
 +                + "  │   │   ├─Attribute (1 of 2)\n"
 +                + "  │   │   │   ├─Description…………………………………………………… Thermal Infrared Sensor (TIRS) 1\n"
 +                + "  │   │   │   ├─Name……………………………………………………………………… TestImage_B10.TIF\n"
 +                + "  │   │   │   ├─Max value………………………………………………………… 65535.0\n"
 +                + "  │   │   │   ├─Min value………………………………………………………… 1.0\n"
 +                + "  │   │   │   ├─Scale factor………………………………………………… 3.34E-4\n"
 +                + "  │   │   │   ├─Offset………………………………………………………………… 0.1\n"
 +                + "  │   │   │   ├─Bound units…………………………………………………… nm\n"
 +                + "  │   │   │   ├─Peak response……………………………………………… 10800.0\n"
 +                + "  │   │   │   └─Transfer function type……………………… Linear\n"
 +                + "  │   │   └─Attribute (2 of 2)\n"
 +                + "  │   │       ├─Description…………………………………………………… Thermal Infrared Sensor (TIRS) 2\n"
 +                + "  │   │       ├─Name……………………………………………………………………… TestImage_B11.TIF\n"
 +                + "  │   │       ├─Max value………………………………………………………… 65535.0\n"
 +                + "  │   │       ├─Min value………………………………………………………… 1.0\n"
 +                + "  │   │       ├─Scale factor………………………………………………… 3.34E-4\n"
 +                + "  │   │       ├─Offset………………………………………………………………… 0.1\n"
 +                + "  │   │       ├─Bound units…………………………………………………… nm\n"
 +                + "  │   │       ├─Peak response……………………………………………… 12000.0\n"
 +                + "  │   │       └─Transfer function type……………………… Linear\n"
 +                + "  │   ├─Illumination elevation angle…………………………… 58.8\n"
 +                + "  │   ├─Illumination azimuth angle………………………………… 116.9\n"
 +                + "  │   └─Cloud cover percentage…………………………………………… 8.3\n"
 +                + "  ├─Resource lineage\n"
 +                + "  │   └─Source……………………………………………………………………………………… Pseudo GLS\n"
 +                + "  ├─Metadata scope\n"
 +                + "  │   └─Resource scope………………………………………………………………… COVERAGE\n"
 +                + "  ├─Acquisition information\n"
 +                + "  │   ├─Acquisition requirement\n"
 +                + "  │   │   └─Identifier………………………………………………………………… Software unit tests\n"
 +                + "  │   ├─Operation\n"
 +                + "  │   │   ├─Status…………………………………………………………………………… Completed\n"
 +                + "  │   │   ├─Type………………………………………………………………………………… Real\n"
 +                + "  │   │   └─Significant event\n"
 +                + "  │   │       ├─Context……………………………………………………………… Acquisition\n"
 +                + "  │   │       └─Time……………………………………………………………………… 2016-06-26 03:02:01\n"
 +                + "  │   └─Platform\n"
 +                + "  │       ├─Identifier………………………………………………………………… Pseudo LANDSAT\n"
 +                + "  │       └─Instrument\n"
 +                + "  │           └─Identifier……………………………………………………… Pseudo TIRS\n"
 +                + "  ├─Date info………………………………………………………………………………………… 2016-06-27 16:48:12\n"
 +                + "  │   └─Date type……………………………………………………………………………… Creation\n"
 +                + "  └─Default locale+other locale………………………………………… en\n", text);
      }
  }


Mime
View raw message