/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2004-2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotools.referencing; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.HashMap; import java.util.Locale; import java.util.Map; import javax.measure.unit.SI; import org.opengis.referencing.datum.VerticalDatumType; import org.geotools.referencing.crs.DefaultGeographicCRS; import org.geotools.referencing.cs.DefaultCartesianCS; import org.geotools.referencing.cs.DefaultCoordinateSystemAxis; import org.geotools.referencing.cs.DefaultEllipsoidalCS; import org.geotools.referencing.cs.DefaultTimeCS; import org.geotools.referencing.cs.DefaultVerticalCS; import org.geotools.referencing.datum.DefaultEllipsoid; import org.geotools.referencing.datum.DefaultGeodeticDatum; import org.geotools.referencing.datum.DefaultPrimeMeridian; import org.geotools.referencing.datum.DefaultVerticalDatum; import org.junit.*; import static org.junit.Assert.*; /** * Tests <cite>Well Know Text</cite> (WKT) formatting for some hard-coded, predefined objects. * * * @source $URL$ * @version $Id$ * @author Martin Desruisseaux (IRD) */ public final class PredefinedObjectsTest { /** * Tests {@link DefaultCoordinateSystemAxis} constants. */ @Test public void testAxis() { // Test Well Know Text assertEquals("x", "AXIS[\"x\", EAST]", DefaultCoordinateSystemAxis.X .toWKT(0)); assertEquals("y", "AXIS[\"y\", NORTH]", DefaultCoordinateSystemAxis.Y .toWKT(0)); assertEquals("z", "AXIS[\"z\", UP]", DefaultCoordinateSystemAxis.Z .toWKT(0)); assertEquals("Longitude", "AXIS[\"Longitude\", EAST]", DefaultCoordinateSystemAxis.LONGITUDE.toWKT(0)); assertEquals("Latitude", "AXIS[\"Latitude\", NORTH]", DefaultCoordinateSystemAxis.LATITUDE .toWKT(0)); assertEquals("Altitude", "AXIS[\"Altitude\", UP]", DefaultCoordinateSystemAxis.ALTITUDE .toWKT(0)); assertEquals("Time", "AXIS[\"Time\", FUTURE]", DefaultCoordinateSystemAxis.TIME .toWKT(0)); assertEquals("Longitude", "AXIS[\"Geodetic longitude\", EAST]", DefaultCoordinateSystemAxis.GEODETIC_LONGITUDE .toWKT(0)); assertEquals("Longitude", "AXIS[\"Spherical longitude\", EAST]", DefaultCoordinateSystemAxis.SPHERICAL_LONGITUDE.toWKT(0)); assertEquals("Latitude", "AXIS[\"Geodetic latitude\", NORTH]", DefaultCoordinateSystemAxis.GEODETIC_LATITUDE .toWKT(0)); assertEquals("Latitude", "AXIS[\"Spherical latitude\", NORTH]", DefaultCoordinateSystemAxis.SPHERICAL_LATITUDE .toWKT(0)); // Test localization assertEquals("English", "Time", DefaultCoordinateSystemAxis.TIME.getAlias().iterator().next().toInternationalString().toString(Locale.ENGLISH)); assertEquals("French", "Temps", DefaultCoordinateSystemAxis.TIME.getAlias().iterator().next().toInternationalString().toString(Locale.FRENCH )); // TODO: remove cast and use static import once we are allowed to compile for J2SE 1.5. // It will make the line much shorter!! // Test geocentric assertFalse("X", DefaultCoordinateSystemAxis.X .equals(DefaultCoordinateSystemAxis.GEOCENTRIC_X, false)); assertFalse("Longitude", DefaultCoordinateSystemAxis.LONGITUDE.equals(DefaultCoordinateSystemAxis.GEODETIC_LONGITUDE, true )); assertFalse("Longitude", DefaultCoordinateSystemAxis.LONGITUDE.equals(DefaultCoordinateSystemAxis.SPHERICAL_LONGITUDE, true )); assertFalse("Longitude", DefaultCoordinateSystemAxis.LONGITUDE.equals(DefaultCoordinateSystemAxis.SPHERICAL_LONGITUDE, false)); // Test aliases in the special "longitude" and "latitude" cases. assertTrue ("Longitude", DefaultCoordinateSystemAxis.LONGITUDE.equals(DefaultCoordinateSystemAxis.GEODETIC_LONGITUDE, false)); assertTrue ("Latitude", DefaultCoordinateSystemAxis.LATITUDE .equals(DefaultCoordinateSystemAxis.GEODETIC_LATITUDE, false)); assertFalse("Lon/Lat", DefaultCoordinateSystemAxis.LATITUDE .equals(DefaultCoordinateSystemAxis.LONGITUDE, false)); } /** * Tests {@link AbstractCS}. */ @Test public void testCoordinateSystems() { // Test dimensions assertEquals("Cartesian 2D", 2, DefaultCartesianCS .PROJECTED .getDimension()); assertEquals("Cartesian 3D", 3, DefaultCartesianCS .GEOCENTRIC .getDimension()); assertEquals("Ellipsoidal 2D", 2, DefaultEllipsoidalCS.GEODETIC_2D.getDimension()); assertEquals("Ellipsoidal 3D", 3, DefaultEllipsoidalCS.GEODETIC_3D.getDimension()); assertEquals("Vertical", 1, DefaultVerticalCS .DEPTH .getDimension()); assertEquals("Temporal", 1, DefaultTimeCS .DAYS .getDimension()); } /** * Test {@link AbstractDatum} and well-know text formatting. */ @Test public void testDatum() { // WGS84 components and equalities assertEquals("Ellipsoid", DefaultEllipsoid.WGS84, DefaultGeodeticDatum.WGS84.getEllipsoid()); assertEquals("PrimeMeridian", DefaultPrimeMeridian.GREENWICH, DefaultGeodeticDatum.WGS84.getPrimeMeridian()); assertFalse ("VerticalDatum", DefaultVerticalDatum.GEOIDAL.equals(DefaultVerticalDatum.ELLIPSOIDAL)); assertEquals("Geoidal", VerticalDatumType.GEOIDAL, DefaultVerticalDatum.GEOIDAL .getVerticalDatumType()); assertEquals("Ellipsoidal", VerticalDatumType.ELLIPSOIDAL, DefaultVerticalDatum.ELLIPSOIDAL.getVerticalDatumType()); // Test WKT assertEquals("Ellipsoid", "SPHEROID[\"WGS84\", 6378137.0, 298.257223563]", DefaultEllipsoid.WGS84 .toWKT(0)); assertEquals("PrimeMeridian", "PRIMEM[\"Greenwich\", 0.0]", DefaultPrimeMeridian.GREENWICH .toWKT(0)); assertEquals("VerticalDatum", "VERT_DATUM[\"Geoidal\", 2005]", DefaultVerticalDatum.GEOIDAL .toWKT(0)); assertEquals("VerticalDatum", "VERT_DATUM[\"Ellipsoidal\", 2002]", DefaultVerticalDatum.ELLIPSOIDAL.toWKT(0)); assertEquals("GeodeticDatum", "DATUM[\"WGS84\", "+ "SPHEROID[\"WGS84\", 6378137.0, 298.257223563]]", DefaultGeodeticDatum.WGS84 .toWKT(0)); // Test properties final Map<String,Object> properties = new HashMap<String,Object>(); properties.put("name", "This is a name"); properties.put("scope", "This is a scope"); properties.put("scope_fr", "Valide dans ce domaine"); properties.put("remarks", "There is remarks"); properties.put("remarks_fr", "Voici des remarques"); DefaultGeodeticDatum datum = new DefaultGeodeticDatum(properties, DefaultEllipsoid.createEllipsoid("Test", 1000, 1000, SI.METER), new DefaultPrimeMeridian("Test", 12)); assertEquals("name", "This is a name", datum.getName ().getCode()); assertEquals("scope", "This is a scope", datum.getScope ().toString(null)); assertEquals("scope_fr", "Valide dans ce domaine", datum.getScope ().toString(Locale.FRENCH)); assertEquals("remarks", "There is remarks", datum.getRemarks().toString(null)); assertEquals("remarks_fr", "Voici des remarques", datum.getRemarks().toString(Locale.FRENCH)); } /** * Tests {@link AbstractCRS}. */ @Test public void testCoordinateReferenceSystems() { // Test dimensions assertEquals("WGS84 2D", 2, DefaultGeographicCRS.WGS84 .getCoordinateSystem().getDimension()); assertEquals("WGS84 3D", 3, DefaultGeographicCRS.WGS84_3D.getCoordinateSystem().getDimension()); // Test WKT assertEquals("WGS84", "GEOGCS[\"WGS84(DD)\", " + "DATUM[\"WGS84\", "+ "SPHEROID[\"WGS84\", 6378137.0, 298.257223563]], "+ "PRIMEM[\"Greenwich\", 0.0], "+ "UNIT[\"degree\", 0.017453292519943295], "+ "AXIS[\"Geodetic longitude\", EAST], "+ "AXIS[\"Geodetic latitude\", NORTH]]", DefaultGeographicCRS.WGS84.toWKT(0)); } /** * Test serialization of various objects. */ @Test public void testSerialization() throws IOException, ClassNotFoundException { serialize(DefaultCoordinateSystemAxis.X); serialize(DefaultCoordinateSystemAxis.GEOCENTRIC_X); serialize(DefaultCoordinateSystemAxis.GEODETIC_LONGITUDE); serialize(DefaultCartesianCS.PROJECTED); serialize(DefaultCartesianCS.GEOCENTRIC); serialize(DefaultEllipsoidalCS.GEODETIC_2D); serialize(DefaultEllipsoidalCS.GEODETIC_3D); serialize(DefaultPrimeMeridian.GREENWICH); serialize(DefaultGeodeticDatum.WGS84); } /** * Test the serialization of the given object. */ private static void serialize(final Object object) throws IOException, ClassNotFoundException { final ByteArrayOutputStream out = new ByteArrayOutputStream(); final ObjectOutputStream outs = new ObjectOutputStream(out); outs.writeObject(object); outs.close(); final ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(out.toByteArray())); final Object test = in.readObject(); in.close(); assertEquals("Serialization", object, test); assertEquals("Serialization", object.hashCode(), test.hashCode()); } }