blob: 24df89336cb4d2a89eb1ca923bdd693b5cae4e79 [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.internal.referencing.provider;
import java.util.Iterator;
import org.opengis.util.GenericName;
import org.opengis.referencing.ReferenceIdentifier;
import org.opengis.parameter.ParameterDescriptor;
import org.opengis.parameter.GeneralParameterDescriptor;
import org.apache.sis.metadata.iso.citation.Citations;
import org.apache.sis.test.DependsOnMethod;
import org.apache.sis.test.TestCase;
import org.junit.Test;
import static org.apache.sis.test.ReferencingAssert.*;
import static org.apache.sis.internal.util.Constants.*;
/**
* Verifies some parameters of {@link MapProjection} and a few subclasses.
*
* @author Martin Desruisseaux (Geomatys)
* @version 0.6
* @since 0.6
* @module
*/
public final strictfp class MapProjectionTest extends TestCase {
/**
* Verifies {@link MapProjection#SEMI_MAJOR} and {@link MapProjection#SEMI_MINOR} parameter descriptors.
*/
@Test
public void testSemiAxes() {
assertParamEquals(null, SEMI_MAJOR, true, MapProjection.SEMI_MAJOR);
assertParamEquals(null, SEMI_MINOR, true, MapProjection.SEMI_MINOR);
}
/**
* Verifies some parameters of {@link Equirectangular}. Note that {@code Equirectangular} is the first projection
* to be loaded by {@link org.apache.sis.referencing.operation.transform.DefaultMathTransformFactory} and defines
* some parameters which will be reused by other projections.
*
* <p><b>Note:</b> there is no test for {@code Equirectangular.createMathTransform(…)} in this class because
* the math transforms are tested in the {@link org.apache.sis.referencing.operation.projection} package.</p>
*/
@Test
@DependsOnMethod("testSemiAxes")
public void testEquirectangular() {
final Iterator<GeneralParameterDescriptor> it = Equirectangular.PARAMETERS.descriptors().iterator();
assertParamEquals("Equidistant Cylindrical (Spherical)", "Equirectangular", true, Equirectangular.PARAMETERS);
assertParamEquals(null, SEMI_MAJOR, true, it.next());
assertParamEquals(null, SEMI_MINOR, true, it.next());
assertParamEquals("Latitude of 1st standard parallel", STANDARD_PARALLEL_1, true, it.next());
assertParamEquals("Latitude of natural origin", LATITUDE_OF_ORIGIN, false, it.next());
assertParamEquals("Longitude of natural origin", CENTRAL_MERIDIAN, true, it.next());
assertParamEquals("False easting", FALSE_EASTING, true, it.next());
assertParamEquals("False northing", FALSE_NORTHING, true, it.next());
assertFalse(it.hasNext());
assertIsForcedToZero((ParameterDescriptor<?>) Equirectangular.PARAMETERS.descriptor(LATITUDE_OF_ORIGIN));
}
/**
* Verifies some {@link Mercator1SP} parameter descriptors.
*/
@Test
@DependsOnMethod("testEquirectangular")
public void testMercator1SP() {
final Iterator<GeneralParameterDescriptor> it = Mercator1SP.PARAMETERS.descriptors().iterator();
assertParamEquals("Mercator (variant A)", "Mercator_1SP", true, Mercator1SP.PARAMETERS);
assertParamEquals(null, SEMI_MAJOR, true, it.next());
assertParamEquals(null, SEMI_MINOR, true, it.next());
assertParamEquals("Latitude of natural origin", LATITUDE_OF_ORIGIN, true, it.next());
assertParamEquals("Longitude of natural origin", CENTRAL_MERIDIAN, true, it.next());
assertParamEquals("Scale factor at natural origin", SCALE_FACTOR, true, it.next());
assertParamEquals("False easting", FALSE_EASTING, true, it.next());
assertParamEquals("False northing", FALSE_NORTHING, true, it.next());
assertFalse(it.hasNext());
assertIsForcedToZero((ParameterDescriptor<?>) Mercator1SP.PARAMETERS.descriptor(LATITUDE_OF_ORIGIN));
}
/**
* Verifies some {@link Mercator2SP} parameter descriptors.
*/
@Test
@DependsOnMethod("testMercator1SP")
public void testMercator2SP() {
final Iterator<GeneralParameterDescriptor> it = Mercator2SP.PARAMETERS.descriptors().iterator();
assertParamEquals("Mercator (variant B)", "Mercator_2SP", true, Mercator2SP.PARAMETERS);
assertParamEquals(null, SEMI_MAJOR, true, it.next());
assertParamEquals(null, SEMI_MINOR, true, it.next());
assertParamEquals("Latitude of 1st standard parallel", STANDARD_PARALLEL_1, true, it.next());
assertParamEquals("Latitude of natural origin", LATITUDE_OF_ORIGIN, false, it.next());
assertParamEquals("Longitude of natural origin", CENTRAL_MERIDIAN, true, it.next());
assertParamEquals(null, SCALE_FACTOR, false, it.next());
assertParamEquals("False easting", FALSE_EASTING, true, it.next());
assertParamEquals("False northing", FALSE_NORTHING, true, it.next());
assertFalse(it.hasNext());
assertIsForcedToZero((ParameterDescriptor<?>) Mercator1SP.PARAMETERS.descriptor(LATITUDE_OF_ORIGIN));
}
/**
* Asserts that the primary name of the given parameter is the given name in the EPSG namespace.
* Then asserts that the first alias (ignoring other EPSG alias) of the given parameter is the
* given name in the OGC namespace.
*/
private static void assertParamEquals(final String epsgName, final String ogcName, final boolean isMandatory,
final GeneralParameterDescriptor actual)
{
if (epsgName != null) {
assertEpsgIdentifierEquals(epsgName, actual.getName());
} else {
assertOgcIdentifierEquals(ogcName, actual.getName());
}
assertEquals("minimumOccurs", isMandatory ? 1 : 0, actual.getMinimumOccurs());
if (epsgName != null) {
for (final GenericName alias : actual.getAlias()) {
if (alias instanceof ReferenceIdentifier && ((ReferenceIdentifier) alias).getAuthority() != Citations.EPSG) {
assertOgcIdentifierEquals(ogcName, (ReferenceIdentifier) alias);
return;
}
}
fail("OGC alias not found.");
}
}
/**
* Asserts the the given parameter forces its value to zero.
* This test is mostly for {@link Equirectangular#LATITUDE_OF_ORIGIN}.
*/
private static void assertIsForcedToZero(final ParameterDescriptor<?> parameter) {
assertEquals("minimumValue", -0.0, parameter.getMinimumValue());
assertEquals("maximumValue", +0.0, parameter.getMaximumValue());
}
}