Class AbstractCS

    • Constructor Detail

      • AbstractCS

        public AbstractCS​(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.
        Parameters:
        cs - The coordinate system to copy.
        Since:
        2.2
      • AbstractCS

        public AbstractCS​(String name,
                          CoordinateSystemAxis... axis)
        Constructs a coordinate system from a name.
        Parameters:
        name - The coordinate system name.
        axis - The set of axis.
      • AbstractCS

        public AbstractCS​(Map<String,​?> properties,
                          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​(AxisDirection direction)
        Returns true 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 true for all axis directions. Subclasses will overrides this method in order to put more restrictions on allowed axis directions.
        Parameters:
        direction - The direction to test for compatibility.
        Returns:
        true if the given direction is compatible with this coordinate system.
      • isCompatibleUnit

        protected boolean isCompatibleUnit​(AxisDirection direction,
                                           Unit<?> unit)
        Returns true 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 true in all cases. Subclasses can override this method and check for compatibility with meter or degree units.
        Parameters:
        direction - The direction of the axis having the given unit.
        unit - The unit to test for compatibility.
        Returns:
        true if the given unit is compatible with this coordinate system.
        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 CoordinateSystem
        Returns:
        The dimension of the coordinate system.
      • swapAndScaleAxis

        public static Matrix swapAndScaleAxis​(CoordinateSystem sourceCS,
                                              CoordinateSystem targetCS)
                                       throws IllegalArgumentException
        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 sourceCS are (x,y) pairs in metres and coordinates in targetCS 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 sourceCS to targetCS as an affine transform. Only axis direction and units are taken in account.
        Throws:
        IllegalArgumentException - if axis doesn't matches, or the CS doesn't have the same geometry.
        ConversionException - if the unit conversion is non-linear.
      • standard

        public static CoordinateSystem standard​(CoordinateSystem cs)
                                         throws IllegalArgumentException
        Returns a coordinate system with "standard" axis order and units. Most of the time, this method returns one of the predefined constants with axis in (longitude,latitude) or (X,Y) order, and units in degrees or metres. In some particular cases like Cartesian CS, this method may create a new instance on the fly. In every cases this method attempts to return a right-handed coordinate system, but this is not garanteed.

        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 cs with "standard" axis.
        Throws:
        IllegalArgumentException - if the specified coordinate system is unknow to this method.
        Since:
        2.2
      • 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 this.
        compareMetadata - true for performing a strict comparaison, or false for comparing only properties relevant to transformations.
        Returns:
        true 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.