org.gicentre.utils.spatial

## Class LambertConformalConic

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

- All Implemented Interfaces:
    MapProjection

      public class LambertConformalConic
      extends java.lang.Object
      implements MapProjection

  Class for representing Lambert conformal conic projectiAlons. Includes forward and inverse transforms from/to lat,long. Uses transformation equations from Snyder (1987) Map Projections - A Working Manual
  Version:
    3.4, 5th February, 2016.

- - ### 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
    `LambertConformalConic(double lat1, double lon0, double lat0)` Initialises the projection converter assuming spherical figure of the earth and single standard parallel and centred at the given location.
    `LambertConformalConic(Ellipsoid ellipsoid, double lat1, double lat2, double lon0, double lat0, double falseEast, double falseNorth)` Initialises the projection converter with the given ellipsoid.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `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 (Lambert conformal conic to latitude/longitude) on the given location.
    `processing.core.PVector` | `LambertToLatLong(processing.core.PVector p)` Converts the given coordinates that use the Lambert conformal conic projection into a (longitude,latitude) location.
    `processing.core.PVector` | `latLongToLambert(processing.core.PVector p)` Converts the given (`lng`, `lat`) coordinates into a location referenced using the Lambert conformal 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 Lambert conformal conic) 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

    - #### LambertConformalConic

          public LambertConformalConic(double lat1,
                                       double lon0,
                                       double lat0)

      Initialises the projection converter assuming spherical figure of the earth and single standard parallel and centred at the given location. The forward transformation will be from lat/long to Lambert conformal conic.
      Parameters:
        `lat1` - The single 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).

    - #### LambertConformalConic

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

      Initialises the projection converter with the given ellipsoid. The forward transformation will be from lat/long to Lambert conformal 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 Lambert conformal conic) 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 (Lambert conformal conic 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.

    - #### latLongToLambert

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

      Converts the given (`lng`, `lat`) coordinates into a location referenced using the Lambert conformal 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 Lambert conformal conic coordinate system.

    - #### LambertToLatLong

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

      Converts the given coordinates that use the Lambert conformal 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 Lambert 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.