org.geotools.referencing.cs
Class AbstractCS

java.lang.Object
  extended byorg.geotools.referencing.wkt.Formattable
      extended byorg.geotools.referencing.AbstractIdentifiedObject
          extended byorg.geotools.referencing.cs.AbstractCS
All Implemented Interfaces:
org.opengis.referencing.cs.CoordinateSystem, org.opengis.referencing.IdentifiedObject, java.io.Serializable
Direct Known Subclasses:
DefaultAffineCS, DefaultCompoundCS, DefaultCylindricalCS, DefaultEllipsoidalCS, DefaultLinearCS, DefaultPolarCS, DefaultSphericalCS, DefaultTimeCS, DefaultUserDefinedCS, DefaultVerticalCS

public class AbstractCS
extends AbstractIdentifiedObject
implements org.opengis.referencing.cs.CoordinateSystem

The set of coordinate system axes that spans a given coordinate space. A coordinate system (CS) is derived from a set of (mathematical) rules for specifying how coordinates in a given space are to be assigned to points. The coordinate values in a coordinate tuple shall be recorded in the order in which the coordinate system axes are recorded, whenever those coordinates use a coordinate reference system that uses this coordinate system.

This class is conceptually abstract, even if it is technically possible to instantiate it. Typical applications should create instances of the most specific subclass with prefix instead. An exception to this rule may occurs when it is not possible to identify the exact type. For example it is not possible to infer the exact coordinate system from Well Known Text is some cases (e.g. in a element). In such exceptional situation, a plain object may be instantiated.

Since:
2.1
Version:
$Id: AbstractCS.java 17672 2006-01-19 00:25:55Z desruisseaux $
Author:
Martin Desruisseaux
See Also:
DefaultCoordinateSystemAxis, Unit, AbstractDatum, AbstractCRS, Serialized Form

Field Summary
 
Fields inherited from class org.geotools.referencing.AbstractIdentifiedObject
EMPTY_ALIAS_ARRAY, EMPTY_IDENTIFIER_ARRAY, IDENTIFIER_COMPARATOR, NAME_COMPARATOR, REMARKS_COMPARATOR
 
Fields inherited from interface org.opengis.referencing.IdentifiedObject
ALIAS_KEY, IDENTIFIERS_KEY, NAME_KEY, REMARKS_KEY
 
Constructor Summary
AbstractCS(org.opengis.referencing.cs.CoordinateSystem cs)
          Constructs a new coordinate system with the same values than the specified one.
AbstractCS(java.util.Map properties, org.opengis.referencing.cs.CoordinateSystemAxis[] axis)
          Constructs a coordinate system from a set of properties.
AbstractCS(java.lang.String name, org.opengis.referencing.cs.CoordinateSystemAxis[] axis)
          Constructs a coordinate system from a name.
 
Method Summary
 Measure distance(double[] coord1, double[] coord2)
          Computes the distance between two points.
 boolean equals(AbstractIdentifiedObject object, boolean compareMetadata)
          Compares the specified object with this coordinate system for equality.
protected  java.lang.String formatWKT(Formatter formatter)
          Format the inner part of a Well Known Text (WKT) element.
 org.opengis.referencing.cs.CoordinateSystemAxis getAxis(int dimension)
          Returns the axis for this coordinate system at the specified dimension.
 int getDimension()
          Returns the dimension of the coordinate system.
 int hashCode()
          Returns a hash value for this coordinate system.
protected  boolean isCompatibleDirection(org.opengis.referencing.cs.AxisDirection direction)
          Returns if the specified axis direction is allowed for this coordinate system.
protected  boolean isCompatibleUnit(org.opengis.referencing.cs.AxisDirection direction, javax.units.Unit unit)
          Returns is the specified unit is legal for the specified axis direction.
static org.opengis.referencing.cs.CoordinateSystem standard(org.opengis.referencing.cs.CoordinateSystem cs)
          Returns a coordinate system with "standard" axis order and units.
static org.opengis.referencing.operation.Matrix swapAndScaleAxis(org.opengis.referencing.cs.CoordinateSystem sourceCS, org.opengis.referencing.cs.CoordinateSystem targetCS)
          Returns an affine transform between two coordinate systems.
 
Methods inherited from class org.geotools.referencing.AbstractIdentifiedObject
asSet, ensureAngularUnit, ensureLinearUnit, ensureNonNull, ensureNonNull, ensureTimeUnit, equals, equals, equals, equals, getAlias, getIdentifier, getIdentifier, getIdentifiers, getName, getName, getName, getProperties, getProperties, getRemarks, nameMatches, nameMatches
 
Methods inherited from class org.geotools.referencing.wkt.Formattable
toString, toWKT, toWKT, toWKT
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.opengis.referencing.IdentifiedObject
getAlias, getIdentifiers, getName, getRemarks, toWKT
 

Constructor Detail

AbstractCS

public AbstractCS(org.opengis.referencing.cs.CoordinateSystem cs)
Constructs a new coordinate system with the same values than the specified one. This copy constructor provides a way to wrap an arbitrary implementation into a Geotools one or a user-defined one (as a subclass), usually in order to leverage some implementation-specific API. This constructor performs a shallow copy, i.e. the properties are not cloned.

Since:
2.2

AbstractCS

public AbstractCS(java.lang.String name,
                  org.opengis.referencing.cs.CoordinateSystemAxis[] axis)
Constructs a coordinate system from a name.

Parameters:
name - The coordinate system name.
axis - The set of axis.

AbstractCS

public AbstractCS(java.util.Map properties,
                  org.opengis.referencing.cs.CoordinateSystemAxis[] axis)
Constructs a coordinate system from a set of properties. The properties map is given unchanged to the super-class constructor.

Parameters:
properties - Set of properties. Should contains at least "name".
axis - The set of axis.
Method Detail

isCompatibleDirection

protected boolean isCompatibleDirection(org.opengis.referencing.cs.AxisDirection direction)
Returns if the specified axis direction is allowed for this coordinate system. This method is invoked at construction time for checking argument validity. The default implementation returns for all axis directions. Subclasses will overrides this method in order to put more restrictions on allowed axis directions.


isCompatibleUnit

protected boolean isCompatibleUnit(org.opengis.referencing.cs.AxisDirection direction,
                                   javax.units.Unit unit)
Returns is the specified unit is legal for the specified axis direction. This method is invoked at construction time for checking units compatibility. The default implementation returns in all cases. Subclasses can override this method and check for compatibility with meter or degree units.

Since:
2.2

getDimension

public int getDimension()
Returns the dimension of the coordinate system. This is the number of axis.

Specified by:
getDimension in interface org.opengis.referencing.cs.CoordinateSystem

getAxis

public org.opengis.referencing.cs.CoordinateSystemAxis getAxis(int dimension)
                                                        throws java.lang.IndexOutOfBoundsException
Returns the axis for this coordinate system at the specified dimension.

Specified by:
getAxis in interface org.opengis.referencing.cs.CoordinateSystem
Parameters:
dimension - The zero based index of axis.
Returns:
The axis at the specified dimension.
Throws:
java.lang.IndexOutOfBoundsException - if is out of bounds.

swapAndScaleAxis

public static org.opengis.referencing.operation.Matrix swapAndScaleAxis(org.opengis.referencing.cs.CoordinateSystem sourceCS,
                                                                        org.opengis.referencing.cs.CoordinateSystem targetCS)
                                                                 throws java.lang.IllegalArgumentException,
                                                                        javax.units.ConversionException
Returns an affine transform between two coordinate systems. Only units and axis order (e.g. transforming from (NORTH,WEST) to (EAST,NORTH are taken in account.

Example: If coordinates in are (x,y) pairs in metres and coordinates in are (-y,x) pairs in centimetres, then the transformation can be performed as below:

[-y(cm)] [ 0 -100 0 ] [x(m)] [ x(cm)] = [ 100 0 0 ] [y(m)] [ 1 ] [ 0 0 1 ] [1 ]

Parameters:
sourceCS - The source coordinate system.
targetCS - The target coordinate system.
Returns:
The conversion from to as an affine transform. Only axis direction and units are taken in account.
Throws:
java.lang.IllegalArgumentException - if axis doesn't matches, or the CS doesn't have the same geometry.
javax.units.ConversionException - if the unit conversion is non-linear.

standard

public static org.opengis.referencing.cs.CoordinateSystem standard(org.opengis.referencing.cs.CoordinateSystem cs)
                                                            throws java.lang.IllegalArgumentException
Returns a coordinate system with "standard" axis order and units. This method returns one of the predefined constants with axis in (longitude,latitude) or (X,Y) order, and units in degree or metres. This method is typically used together with swapAndScaleAxis for the creation of a transformation step before some math transform. Example:
 Matrix step1 = swapAndScaleAxis(sourceCS, standard(sourceCS));
 Matrix step2 = ... some transform operating on standard axis ...
 Matrix step3 = swapAndScaleAxis(standard(targetCS), targetCS);
 

A rational for standard axis order and units is explained in the Axis units and direction section in the description of map projection package.

Parameters:
cs - The coordinate system.
Returns:
A constant similar to the specified with "standard" axis.
Throws:
java.lang.IllegalArgumentException - if the specified coordinate system is unknow to this method.
Since:
2.2

distance

public Measure distance(double[] coord1,
                        double[] coord2)
                 throws java.lang.UnsupportedOperationException,
                        org.opengis.spatialschema.geometry.MismatchedDimensionException
Computes the distance between two points. This method is not available for all coordinate systems. For example, ellipsoidal CS doesn't have suffisient information.

Parameters:
coord1 - Coordinates of the first point.
coord2 - Coordinates of the second point.
Returns:
The distance between and .
Throws:
java.lang.UnsupportedOperationException - if this coordinate system can't compute distances.
org.opengis.spatialschema.geometry.MismatchedDimensionException - if a coordinate doesn't have the expected dimension.
To Do:
Provides a localized message in the exception.

equals

public boolean equals(AbstractIdentifiedObject object,
                      boolean compareMetadata)
Compares the specified object with this coordinate system for equality.

Overrides:
equals in class AbstractIdentifiedObject
Parameters:
object - The object to compare to .
compareMetadata - for performing a strict comparaison, or for comparing only properties relevant to transformations.
Returns:
if both objects are equal.

hashCode

public int hashCode()
Returns a hash value for this coordinate system.

Overrides:
hashCode in class AbstractIdentifiedObject
Returns:
The hash code value. This value doesn't need to be the same in past or future versions of this class.

formatWKT

protected java.lang.String formatWKT(Formatter formatter)
Format the inner part of a Well Known Text (WKT) element. Note that WKT is not yet defined for coordinate system. Current implementation list the axis contained in this CS.

Overrides:
formatWKT in class Formattable
Parameters:
formatter - The formatter to use.
Returns:
The WKT element name. Current implementation default to the class name.
See Also:
Formattable.toWKT(), Formattable.toString()


Copyright © GeoTools. All Rights Reserved.