org.gicentre.utils.spatial

## Class AlbersEqualAreaConic

- java.lang.Object
- - org.gicentre.utils.spatial.AlbersEqualAreaConic

- All Implemented Interfaces:
    MapProjection
  Direct Known Subclasses:
    AlbersBC, AlbersUS, AlbersUSCont

      public class AlbersEqualAreaConic
      extends java.lang.Object
      implements MapProjection

  Class for representing Albers Equal Area Conic projections. Includes forward and inverse transforms from/to lat,long. Uses transformation equations from Snyder (1987) Atlas of Map Projections. Some code adapted from C program by T. Mittan, Feb, 1992 - see http://geography.usgs.gov/ftp/software/current_software/gctpc2/alberfor.c.
  Version:
    3.4, 5th February, 2016.
  Author:
    Jo Wood, giCentre, City University London and T. Mittan.

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static int` | `FROM_LAT_LONG` Indicates a transformation from latitude/longitude
    `static int` | `TO_LAT_LONG` Indicates a transformation to latitude/longitude

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `AlbersEqualAreaConic(Ellipsoid ellipsoid, double lat1, double lat2)` Initialises the Albers converter with the given ellipsoid and standard parallels.
    `AlbersEqualAreaConic(Ellipsoid ellipsoid, double lat1, double lat2, double lon0, double lat0, double falseEast, double falseNorth)` Initialises the Albers converter with the given ellipsoid.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `processing.core.PVector` | `AlbersToLatLong(processing.core.PVector p)` Converts the given coordinates that use the Albers equal area conic projection into a (longitude,latitude) location.
    `boolean` | `doInterpolation()` Indicates whether the transformation should use nearest neighbour (false) or some interpolator (true).
    `java.lang.String` | `getDescription()` Provides a general description of the transformation.
    `Ellipsoid` | `getEllipsoid()` Reports the ellipsoid used in the transformation.
    `processing.core.PVector` | `invTransformCoords(processing.core.PVector p)` Performs an inverse transformation (Albers to latitude/longitude) on the given location.
    `processing.core.PVector` | `latLongToAlbers(processing.core.PVector p)` Converts the given (`lng`, `lat`) coordinates into a location referenced using the Albers equal area conic projection.
    `void` | `setInterpolation(boolean doInterpolation)` Sets whether the transformation should use nearest neighbour (false) or some interpolator (true).
    `processing.core.PVector` | `transformCoords(processing.core.PVector p)` Performs a forward transformation (latitude/longitude to Albers) on the given location.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### FROM_LAT_LONG

          public static final int FROM_LAT_LONG

      Indicates a transformation from latitude/longitude
      See Also:
        Constant Field Values

    - #### TO_LAT_LONG

          public static final int TO_LAT_LONG

      Indicates a transformation to latitude/longitude
      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### AlbersEqualAreaConic

          public AlbersEqualAreaConic(Ellipsoid ellipsoid,
                                      double lat1,
                                      double lat2)

      Initialises the Albers converter with the given ellipsoid and standard parallels. Defaults to a projection centred at lng/lat of (0,0). The forward transformation will be from Lat/long to Albers equal area conic.
      Parameters:
        `ellipsoid` - to use in projection.
        `lat1` - First standard parallel in degrees (north of equator positive).
        `lat2` - Second standard parallel in degrees (north of equator positive).

    - #### AlbersEqualAreaConic

          public AlbersEqualAreaConic(Ellipsoid ellipsoid,
                                      double lat1,
                                      double lat2,
                                      double lon0,
                                      double lat0,
                                      double falseEast,
                                      double falseNorth)

      Initialises the Albers converter with the given ellipsoid. The forward transformation will be from Lat/long to Albers equal area conic.
      Parameters:
        `ellipsoid` - to use in projection.
        `lat1` - First standard parallel in degrees (north of equator positive).
        `lat2` - Second standard parallel in degrees (north of equator positive).
        `lon0` - Centre longitude in degrees (east of Greenwich positive).
        `lat0` - Centre latitude in degrees (north of equator positive).
        `falseEast` - False easting (offset in metres).
        `falseNorth` - False northing (offset in metres).

  - ### Method Detail

    - #### transformCoords

          public processing.core.PVector transformCoords(processing.core.PVector p)

      Performs a forward transformation (latitude/longitude to Albers) on the given location.
      Specified by:
        `transformCoords` in interface `MapProjection`
      Parameters:
        `p` - Location of point to transform.
      Returns:
        Transformed location coordinates.

    - #### invTransformCoords

          public processing.core.PVector invTransformCoords(processing.core.PVector p)

      Performs an inverse transformation (Albers to latitude/longitude) on the given location.
      Specified by:
        `invTransformCoords` in interface `MapProjection`
      Parameters:
        `p` - Location of point to transform.
      Returns:
        Transformed location coordinates.

    - #### getDescription

          public java.lang.String getDescription()

      Provides a general description of the transformation.
      Specified by:
        `getDescription` in interface `MapProjection`
      Returns:
        Description of the transformation.

    - #### doInterpolation

          public boolean doInterpolation()

      Indicates whether the transformation should use nearest neighbour (false) or some interpolator (true).
      Returns:
        True if transformation should perform some local interpolation.

    - #### setInterpolation

          public void setInterpolation(boolean doInterpolation)

      Sets whether the transformation should use nearest neighbour (false) or some interpolator (true).
      Parameters:
        `doInterpolation` - True if transformation should perform some local interpolation.

    - #### latLongToAlbers

          public processing.core.PVector latLongToAlbers(processing.core.PVector p)

      Converts the given (`lng`, `lat`) coordinates into a location referenced using the Albers equal area conic projection. Latitude/longitude coordinates should be in decimal degrees with positive North and positive East.
      Parameters:
        `p` - Longitude/latitude point. Longitude varies within +-180 degrees, latitude within +-90 degrees.
      Returns:
        Location (units in metres) using Albers coordinate system.

    - #### AlbersToLatLong

          public processing.core.PVector AlbersToLatLong(processing.core.PVector p)

      Converts the given coordinates that use the Albers equal area conic projection into a (longitude,latitude) location. Longitude and latitude will be in decimal degrees with positive North and positive East.
      Parameters:
        `p` - Location of point as an easting and northing in the Albers projection (metres from local origin).
      Returns:
        location in geographical coordinates (longitude/latitude decimal degrees).

    - #### getEllipsoid

          public Ellipsoid getEllipsoid()

      Reports the ellipsoid used in the transformation.
      Returns:
        Ellipsoid used in the UTM transformation.