## com.bbn.openmap.proj
Class ProjMath

    java.lang.Object
      com.bbn.openmap.proj.ProjMath

public final class ProjMath
extends java.lang.Object

Math functions used by projection code.

Field Summary
`static double` `DATELINE_D` Dateline longitude in radians.
`static float` `DATELINE_F` Dateline longitude in radians.
`static double` `LON_RANGE_D` Longitude range in radians.
`static float` `LON_RANGE_F` Longitude range in radians.
`static double` `NORTH_POLE_D` North pole latitude in radians.
`static float` `NORTH_POLE_F` North pole latitude in radians.
`static double` `SOUTH_POLE_D` South pole latitude in radians.
`static float` `SOUTH_POLE_F` South pole latitude in radians.

Method Summary
`static double[]` `arrayDegToRad(double[] degs)` Converts an array of decimal degrees double lat/lons to double radians in place.
`static float[]` `arrayDegToRad(float[] degs)` Converts an array of decimal degrees float lat/lons to float radians in place.
`static double[]` `arrayRadToDeg(double[] rads)` Converts an array of radian double lat/lons to decimal degrees in place.
`static float[]` `arrayRadToDeg(float[] rads)` Converts an array of radian float lat/lons to decimal degrees in place.
`static long` `DEG_TO_SC(double deg)` Convert between decimal degrees and scoords.
`static double` `degToRad(double deg)` Convert degrees to radians.
`static float` `degToRad(float deg)` Convert degrees to radians.
`static float` `geocentric_latitude(float lat, float flat)` Calculate the geocentric latitude given a geographic latitude.
`static float` `geographic_latitude(float lat, float flat)` Calculate the geographic latitude given a geocentric latitude.
`protected static float` `getScale(LatLonPoint ll1, LatLonPoint ll2, java.awt.Point point1, java.awt.Point point2, Projection projection)` Given a couple of points representing a bounding box, find out what the scale should be in order to make those points appear at the corners of the projection.
`static float` `getScale(LatLonPoint ll1, LatLonPoint ll2, Projection projection)` Given a couple of points representing a bounding box, find out what the scale should be in order to make those points appear at the corners of the projection.
`static float` `getScale(java.awt.Point point1, java.awt.Point point2, Projection projection)` Given a couple of points representing a bounding box, find out what the scale should be in order to make those points appear at the corners of the projection.
`static int` `hashLatLon(float lat, float lon)` Generate a hashCode value for a lat/lon pair.
`static boolean` `isCrossingDateline(double leftLon, double rightLon, float projScale)` Generic test for seeing if an left longitude value and a right longitude value seem to constitute crossing the dateline.
`static float` `lonDistance(float lon1, float lon2)` Calculate the shortest arc distance between two lons.
`static double` `normalize_latitude(double lat, double epsilon)` Normalizes radian latitude.
`static float` `normalize_latitude(float lat, float epsilon)` Normalizes radian latitude.
`static double` `qint(double x)` Rounds the quantity away from 0.
`static double` `radToDeg(double rad)` Convert radians to degrees.
`static float` `radToDeg(float rad)` Convert radians to degrees.
`static double` `roundAdjust(double x)` rounds the quantity away from 0.
`static double` `SC_TO_DEG(int sc)` Convert between decimal degrees and scoords.
`static float` `sphericalUnitsToDeg(float u, float uCircumference)` Converts units (km, nm, miles, etc) to decimal degrees for a spherical planet.
`static float` `sphericalUnitsToRad(float u, float uCircumference)` Converts units (km, nm, miles, etc) to arc radians for a spherical planet.
`static double` `wrap_longitude(double lon)` Sets radian longitude to something sane.
`static float` `wrap_longitude(float lon)` Sets radian longitude to something sane.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### NORTH_POLE_F

    public static final transient float NORTH_POLE_F

  North pole latitude in radians.

  See Also:
    Constant Field Values

### SOUTH_POLE_F

    public static final transient float SOUTH_POLE_F

  South pole latitude in radians.

  See Also:
    Constant Field Values

### NORTH_POLE_D

    public static final transient double NORTH_POLE_D

  North pole latitude in radians.

  See Also:
    Constant Field Values

### SOUTH_POLE_D

    public static final transient double SOUTH_POLE_D

  South pole latitude in radians.

  See Also:
    Constant Field Values

### DATELINE_F

    public static final transient float DATELINE_F

  Dateline longitude in radians.

  See Also:
    Constant Field Values

### DATELINE_D

    public static final transient double DATELINE_D

  Dateline longitude in radians.

  See Also:
    Constant Field Values

### LON_RANGE_F

    public static final transient float LON_RANGE_F

  Longitude range in radians.

  See Also:
    Constant Field Values

### LON_RANGE_D

    public static final transient double LON_RANGE_D

  Longitude range in radians.

  See Also:
    Constant Field Values

Method Detail

### roundAdjust

    public static final double roundAdjust(double x)

  rounds the quantity away from 0.

  Parameters:
    `x` - in value
  Returns:
    double
  See Also:
    `qint(double)`

### qint

    public static final double qint(double x)

  Rounds the quantity away from 0.

  Parameters:
    `x` - value
  Returns:
    double

### lonDistance

    public static final float lonDistance(float lon1,
                                          float lon2)

  Calculate the shortest arc distance between two lons.

  Parameters:
    `lon1` - radians
    `lon2` - radians
  Returns:
    float distance

### DEG_TO_SC

    public static final long DEG_TO_SC(double deg)

  Convert between decimal degrees and scoords.

  Parameters:
    `deg` - degrees
  Returns:
    long scoords

### SC_TO_DEG

    public static final double SC_TO_DEG(int sc)

  Convert between decimal degrees and scoords.

  Parameters:
    `sc` - scoords
  Returns:
    double decimal degrees

### radToDeg

    public static final double radToDeg(double rad)

  Convert radians to degrees.

  Parameters:
    `rad` - radians
  Returns:
    double decimal degrees

### radToDeg

    public static final float radToDeg(float rad)

  Convert radians to degrees.

  Parameters:
    `rad` - radians
  Returns:
    float decimal degrees

### degToRad

    public static final double degToRad(double deg)

  Convert degrees to radians.

  Parameters:
    `deg` - degrees
  Returns:
    double radians

### degToRad

    public static final float degToRad(float deg)

  Convert degrees to radians.

  Parameters:
    `deg` - degrees
  Returns:
    float radians

### hashLatLon

    public static final int hashLatLon(float lat,
                                       float lon)

  Generate a hashCode value for a lat/lon pair.

  Parameters:
    `lat` - latitude
    `lon` - longitude
  Returns:
    int hashcode

### arrayDegToRad

    public static final float[] arrayDegToRad(float[] degs)

  Converts an array of decimal degrees float lat/lons to float radians in place.

  Parameters:
    `degs` - float[] lat/lons in decimal degrees
  Returns:
    float[] lat/lons in radians

### arrayRadToDeg

    public static final float[] arrayRadToDeg(float[] rads)

  Converts an array of radian float lat/lons to decimal degrees in place.

  Parameters:
    `rads` - float[] lat/lons in radians
  Returns:
    float[] lat/lons in decimal degrees

### arrayDegToRad

    public static final double[] arrayDegToRad(double[] degs)

  Converts an array of decimal degrees double lat/lons to double radians in place.

  Parameters:
    `degs` - double[] lat/lons in decimal degrees
  Returns:
    double[] lat/lons in radians

### arrayRadToDeg

    public static final double[] arrayRadToDeg(double[] rads)

  Converts an array of radian double lat/lons to decimal degrees in place.

  Parameters:
    `rads` - double[] lat/lons in radians
  Returns:
    double[] lat/lons in decimal degrees

### normalize_latitude

    public static final float normalize_latitude(float lat,
                                                 float epsilon)

  Normalizes radian latitude. Normalizes latitude if at or exceeds epsilon distance from a pole.

  Parameters:
    `lat` - float latitude in radians
    `epsilon` - epsilon (>= 0) radians distance from pole
  Returns:
    float latitude (-PI/2 <= phi <= PI/2)
  See Also:
    `Proj.normalize_latitude(float)`, `LatLonPoint.normalize_latitude(float)`

### normalize_latitude

    public static final double normalize_latitude(double lat,
                                                  double epsilon)

  Normalizes radian latitude. Normalizes latitude if at or exceeds epsilon distance from a pole.

  Parameters:
    `lat` - double latitude in radians
    `epsilon` - epsilon (>= 0) radians distance from pole
  Returns:
    double latitude (-PI/2 <= phi <= PI/2)
  See Also:
    `Proj.normalize_latitude(float)`, `LatLonPoint.normalize_latitude(float)`

### wrap_longitude

    public static final float wrap_longitude(float lon)

  Sets radian longitude to something sane.

  Parameters:
    `lon` - float longitude in radians
  Returns:
    float longitude (-PI <= lambda < PI)
  See Also:
    `LatLonPoint.wrap_longitude(float)`

### wrap_longitude

    public static final double wrap_longitude(double lon)

  Sets radian longitude to something sane.

  Parameters:
    `lon` - double longitude in radians
  Returns:
    double longitude (-PI <= lambda < PI)
  See Also:
    `wrap_longitude(float)`

### sphericalUnitsToDeg

    public static final float sphericalUnitsToDeg(float u,
                                                  float uCircumference)

  Converts units (km, nm, miles, etc) to decimal degrees for a spherical planet. This does not check for arc distances > 1/2 planet circumference, which are better represented as (2pi - calculated arc).

  Parameters:
    `u` - units float value
    `uCircumference` - units circumference of planet
  Returns:
    float decimal degrees

### sphericalUnitsToRad

    public static final float sphericalUnitsToRad(float u,
                                                  float uCircumference)

  Converts units (km, nm, miles, etc) to arc radians for a spherical planet. This does not check for arc distances > 1/2 planet circumference, which are better represented as (2pi - calculated arc).

  Parameters:
    `u` - units float value
    `uCircumference` - units circumference of planet
  Returns:
    float arc radians

### geocentric_latitude

    public static final float geocentric_latitude(float lat,
                                                  float flat)

  Calculate the geocentric latitude given a geographic latitude. According to John Synder:
  "The geographic or geodetic latitude is the angle which a line perpendicular to the surface of the ellipsoid at the given point makes with the plane of the equator. ...The geocentric latitude is the angle made by a line to the center of the ellipsoid with the equatorial plane". ( Map Projections --A Working Manual , p 13)

  Translated from Ken Anderson's lisp code Freeing the Essence of Computation

  Parameters:
    `lat` - float geographic latitude in radians
    `flat` - float flatening factor
  Returns:
    float geocentric latitude in radians
  See Also:
    `geographic_latitude(float, float)`

### geographic_latitude

    public static final float geographic_latitude(float lat,
                                                  float flat)

  Calculate the geographic latitude given a geocentric latitude. Translated from Ken Anderson's lisp code Freeing the Essence of Computation

  Parameters:
    `lat` - float geocentric latitude in radians
    `flat` - float flatening factor
  Returns:
    float geographic latitude in radians
  See Also:
    `geocentric_latitude(float, float)`

### getScale

    public static float getScale(LatLonPoint ll1,
                                 LatLonPoint ll2,
                                 Projection projection)

  Given a couple of points representing a bounding box, find out what the scale should be in order to make those points appear at the corners of the projection.

  Parameters:
    `ll1` - the upper left coordinates of the bounding box.
    `ll2` - the lower right coordinates of the bounding box.
    `projection` - the projection to use for other projection parameters, like map width and map height.

### getScale

    public static float getScale(java.awt.Point point1,
                                 java.awt.Point point2,
                                 Projection projection)

  Given a couple of points representing a bounding box, find out what the scale should be in order to make those points appear at the corners of the projection.

  Parameters:
    `point1` - a java.awt.Point reflecting a pixel spot on the projection, usually the upper left corner of the area of interest.
    `point2` - a java.awt.Point reflecting a pixel spot on the projection, usually the lower right corner of the area of interest.
    `projection` - the projection to use for other projection parameters, like map width and map height.

### getScale

    protected static float getScale(LatLonPoint ll1,
                                    LatLonPoint ll2,
                                    java.awt.Point point1,
                                    java.awt.Point point2,
                                    Projection projection)

  Given a couple of points representing a bounding box, find out what the scale should be in order to make those points appear at the corners of the projection.

  Parameters:
    `ll1` - the upper left coordinates of the bounding box.
    `ll2` - the lower right coordinates of the bounding box.
    `point1` - a java.awt.Point reflecting a pixel spot on the projection that matches the ll1 coordinate, the upper left corner of the area of interest.
    `point2` - a java.awt.Point reflecting a pixel spot on the projection that matches the ll2 coordinate, usually the lower right corner of the area of interest.
    `projection` - the projection to use to query to get the scale for, for projection type and height and width.

### isCrossingDateline

    public static boolean isCrossingDateline(double leftLon,
                                             double rightLon,
                                             float projScale)

  Generic test for seeing if an left longitude value and a right longitude value seem to constitute crossing the dateline.

  Parameters:
    `leftLon` - the leftmost longitude, in decimal degrees. Expected to represent the location of the left side of a map window.
    `rightLon` - the rightmost longitude, in decimal degrees. Expected to represent the location of the right side of a map window.
    `projScale` - the projection scale, considered if the two values are very close to each other and leftLon less than rightLon.
  Returns:
    true if it seems like these two longitude values represent a dateline crossing.

Copyright (C) BBNT Solutions LLC; See http://openmap.bbn.com/ for details