blob: 9fe54f86fbe9703fcda5f0302938402449cb215b [file] [log] [blame]
/*
* 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.referencing.privy;
import javax.measure.Unit;
import org.opengis.referencing.IdentifiedObject;
import org.opengis.referencing.cs.*;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.referencing.crs.GeographicCRS;
import org.opengis.referencing.datum.PrimeMeridian;
import org.opengis.referencing.datum.VerticalDatum;
import org.apache.sis.util.Utilities;
import org.apache.sis.measure.Units;
import static org.apache.sis.referencing.privy.ReferencingUtilities.*;
// Test dependencies
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
import org.apache.sis.test.TestCase;
import org.apache.sis.referencing.crs.HardCodedCRS;
import org.apache.sis.referencing.datum.HardCodedDatum;
/**
* Tests {@link ReferencingUtilities}.
*
* @author Martin Desruisseaux (Geomatys)
*/
public final class ReferencingUtilitiesTest extends TestCase {
/**
* Creates a new test case.
*/
public ReferencingUtilitiesTest() {
}
/**
* Tests {@link ReferencingUtilities#getGreenwichLongitude(PrimeMeridian, Unit)}.
*/
@Test
public void testGetGreenwichLongitude() {
assertEquals(0, getGreenwichLongitude(HardCodedDatum.GREENWICH, Units.DEGREE));
assertEquals(0, getGreenwichLongitude(HardCodedDatum.GREENWICH, Units.GRAD));
assertEquals(2.5969213, getGreenwichLongitude(HardCodedDatum.PARIS, Units.GRAD));
assertEquals(2.33722917, getGreenwichLongitude(HardCodedDatum.PARIS, Units.DEGREE), 1E-12);
assertEquals(2.33720833, getGreenwichLongitude(HardCodedDatum.PARIS_RGS, Units.DEGREE), 1E-8);
assertEquals(2.596898, getGreenwichLongitude(HardCodedDatum.PARIS_RGS, Units.GRAD), 1E-6);
}
/**
* Tests {@link ReferencingUtilities#isEllipsoidalHeight(VerticalDatum)}.
*/
@Test
public void testEllipsoidalHeight() {
assertTrue(isEllipsoidalHeight(HardCodedDatum.ELLIPSOID));
}
/**
* Asserts that normalization of the given CRS produces {@link HardCodedCRS#WGS84} (ignoring metadata).
*
* @param message the message to show in case of failure.
* @param createExpected {@code true} if we expect normalization to create a new CRS object.
* @param crs the CRS for which to test normalization.
*/
private static void assertNormalizedEqualsWGS84(final String message, final boolean createExpected,
final CoordinateReferenceSystem crs)
{
final GeographicCRS normalizedCRS = toNormalizedGeographicCRS(crs, false, false);
assertTrue(Utilities.equalsIgnoreMetadata(HardCodedCRS.WGS84, normalizedCRS), message);
assertEquals(createExpected, normalizedCRS != HardCodedCRS.WGS84);
}
/**
* Tests {@link ReferencingUtilities#toNormalizedGeographicCRS(CoordinateReferenceSystem, boolean, boolean)}.
*/
@Test
public void testToNormalizedGeographicCRS() {
assertNormalizedEqualsWGS84("Expected identity operation.", false, HardCodedCRS.WGS84);
assertNormalizedEqualsWGS84("Shall extract the 2D component.", false, HardCodedCRS.GEOID_3D);
assertNormalizedEqualsWGS84("Shall extract the 2D component.", false, HardCodedCRS.GEOID_4D);
assertNormalizedEqualsWGS84("Shall build a the 2D component.", true, HardCodedCRS.WGS84_3D);
assertNormalizedEqualsWGS84("Shall normalize axis order.", true, HardCodedCRS.WGS84_LATITUDE_FIRST);
assertNull(toNormalizedGeographicCRS(null, false, false));
}
/**
* Tests {@link ReferencingUtilities#getPropertiesForModifiedCRS(IdentifiedObject)}.
*/
@Test
public void testGetPropertiesForModifiedCRS() {
assertEquals("WGS 84", getPropertiesForModifiedCRS(HardCodedCRS.WGS84_3D).get(IdentifiedObject.NAME_KEY));
assertEquals("WGS 84", getPropertiesForModifiedCRS(HardCodedCRS.GEOID_4D).get(IdentifiedObject.NAME_KEY));
assertEquals("NTF (Paris)", getPropertiesForModifiedCRS(HardCodedCRS.NTF) .get(IdentifiedObject.NAME_KEY));
}
/**
* Tests {@link ReferencingUtilities#toPropertyName(Class, Class)}.
*
* @see WKTUtilitiesTest#testToType()
*/
@Test
public void testToPropertyName() {
assertEquals("coordinateSystem", toPropertyName(CoordinateSystem.class, CoordinateSystem.class).toString());
assertEquals("affineCS", toPropertyName(CoordinateSystem.class, AffineCS .class).toString());
assertEquals("cartesianCS", toPropertyName(CoordinateSystem.class, CartesianCS .class).toString());
assertEquals("cylindricalCS", toPropertyName(CoordinateSystem.class, CylindricalCS .class).toString());
assertEquals("ellipsoidalCS", toPropertyName(CoordinateSystem.class, EllipsoidalCS .class).toString());
assertEquals("linearCS", toPropertyName(CoordinateSystem.class, LinearCS .class).toString());
// assertEquals("parametricCS", toPropertyName(CoordinateSystem.class, ParametricCS .class).toString());
assertEquals("polarCS", toPropertyName(CoordinateSystem.class, PolarCS .class).toString());
assertEquals("sphericalCS", toPropertyName(CoordinateSystem.class, SphericalCS .class).toString());
assertEquals("timeCS", toPropertyName(CoordinateSystem.class, TimeCS .class).toString());
assertEquals("verticalCS", toPropertyName(CoordinateSystem.class, VerticalCS .class).toString());
}
}