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 <[email protected]> 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); } }
