## com.bbn.openmap.proj
Class GreatCircle

    java.lang.Object
      |
      +--com.bbn.openmap.proj.GreatCircle

public class GreatCircle
extends java.lang.Object

Methods for calculating great circle and other distances on the sphere and ellipsoid.

Spherical equations taken from John Synder's Map Projections --A Working Manual , pp29-31.
Latitude/longitude arguments must be in valid radians: -PI<=lambda<PI, -PI/2<=phi<=PI/2

Method Summary
`static float[]` `earth_circle(float phi1, float lambda0, float c, float s, float e, int n)` Calculate partial earth circle on the sphere.
`static float[]` `earth_circle(float phi1, float lambda0, float c, float s, float e, int n, float[] ret_val)` Calculate earth circle in the sphere.
`static float[]` `earth_circle(float phi1, float lambda0, float c, int n)` Calculate earth circle on the sphere.
`static float[]` `earth_circle(float phi1, float lambda0, float c, int n, float[] ret_val)` Calculate earth circle in the sphere.
`static AziDist` `ellipsoidalAziDist(double a, double finv, double glat1, double glon1, double glat2, double glon2, AziDist ret_val)` Deprecated. this has been yanked until we have a more stable and documented algorithm
`static float[]` `great_circle(float phi1, float lambda0, float phi, float lambda, int n, boolean include_last)` Calculate great circle between two points on the sphere.
`static float` `spherical_azimuth(float phi1, float lambda0, float phi, float lambda)` Calculate spherical azimuth between two points.
`static LatLonPoint` `spherical_between(float phi1, float lambda0, float c, float Az)` Calculate point at azimuth and distance from another point.
`static float[]` `spherical_between(float phi1, float lambda0, float c, float Az, int n)` Calculate point between two points.
`static float` `spherical_distance(float phi1, float lambda0, float phi, float lambda)` Calculate spherical arc distance between two points.

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

Method Detail

### ellipsoidalAziDist

    public static final AziDist ellipsoidalAziDist(double a,
                                                   double finv,
                                                   double glat1,
                                                   double glon1,
                                                   double glat2,
                                                   double glon2,
                                                   AziDist ret_val)

  Deprecated. this has been yanked until we have a more stable and documented algorithm

  Determine azimuth and distance on the ellipsoid.

  Parameters:
    `a` - Semi-major axis of ellipsoid
    `finv` - flattening of the ellipsoid (WGS84 is 1/298.257)
    `glat1` - Latitude of from station
    `glon1` - Longitude of from station
    `glat2` - Latitude of to station
    `glon2` - Longitude of to station
    `ret_val` - AziDist struct
  Returns:
    AziDist ret_val struct with azimuth and distance

### spherical_distance

    public static final float spherical_distance(float phi1,
                                                 float lambda0,
                                                 float phi,
                                                 float lambda)

  Calculate spherical arc distance between two points.

  Computes arc distance `c' on the sphere. equation (5-3a). (0 <= c <= PI)

  Parameters:
    `phi1` - latitude in radians of start point
    `lambda0` - longitude in radians of start point
    `phi` - latitude in radians of end point
    `lambda` - longitude in radians of end point
  Returns:
    float arc distance `c'

### spherical_azimuth

    public static final float spherical_azimuth(float phi1,
                                                float lambda0,
                                                float phi,
                                                float lambda)

  Calculate spherical azimuth between two points.

  Computes the azimuth `Az' east of north from phi1, lambda0 bearing toward phi and lambda. (5-4b). (-PI <= Az <= PI).

  Parameters:
    `phi1` - latitude in radians of start point
    `lambda0` - longitude in radians of start point
    `phi` - latitude in radians of end point
    `lambda` - longitude in radians of end point
  Returns:
    float azimuth east of north `Az'

### spherical_between

    public static final LatLonPoint spherical_between(float phi1,
                                                      float lambda0,
                                                      float c,
                                                      float Az)

  Calculate point at azimuth and distance from another point.

  Returns a LatLonPoint at arc distance `c' in direction `Az' from start point.

  Parameters:
    `phi1` - latitude in radians of start point
    `lambda0` - longitude in radians of start point
    `c` - arc radius in radians (0 < c <= PI)
    `Az` - azimuth (direction) east of north (-PI <= Az < PI)
  Returns:
    LatLonPoint

### spherical_between

    public static final float[] spherical_between(float phi1,
                                                  float lambda0,
                                                  float c,
                                                  float Az,
                                                  int n)

  Calculate point between two points.

  Same as spherical_between() above except it calculates n equal segments along the length of c.

  Parameters:
    `phi1` - latitude in radians of start point
    `lambda0` - longitude in radians of start point
    `c` - arc radius in radians (0 < c <= PI)
    `Az` - azimuth (direction) east of north (-PI <= Az < PI)
    `n` - number of points along great circle edge to calculate
  Returns:
    float[n+1] radian lat,lon pairs

### great_circle

    public static final float[] great_circle(float phi1,
                                             float lambda0,
                                             float phi,
                                             float lambda,
                                             int n,
                                             boolean include_last)

  Calculate great circle between two points on the sphere.

  Folds all computation (distance, azimuth, points between) into one function for optimization. returns n or n+1 pairs of lat,lon on great circle between lat-lon pairs.

  Parameters:
    `phi1` - latitude in radians of start point
    `lambda0` - longitude in radians of start point
    `phi` - latitude in radians of end point
    `lambda` - longitude in radians of end point
    `n` - number of segments
    `include_last` - return n or n+1 segments
  Returns:
    float[n] or float[n+1] radian lat,lon pairs

### earth_circle

    public static final float[] earth_circle(float phi1,
                                             float lambda0,
                                             float c,
                                             float s,
                                             float e,
                                             int n)

  Calculate partial earth circle on the sphere.

  Returns n float lat,lon pairs at arc distance c from point at phi1,lambda0.

  Parameters:
    `phi1` - latitude in radians of center point
    `lambda0` - longitude in radians of center point
    `c` - arc radius in radians (0 < c < PI)
    `s` - starting angle in radians. North up is zero.
    `e` - angular extent in radians, clockwise right from starting angle.
    `n` - number of points along circle edge to calculate
  Returns:
    float[n] radian lat,lon pairs along earth circle

### earth_circle

    public static final float[] earth_circle(float phi1,
                                             float lambda0,
                                             float c,
                                             int n)

  Calculate earth circle on the sphere.

  Returns n float lat,lon pairs at arc distance c from point at phi1,lambda0.

  Parameters:
    `phi1` - latitude in radians of center point
    `lambda0` - longitude in radians of center point
    `c` - arc radius in radians (0 < c < PI)
    `n` - number of points along circle edge to calculate
  Returns:
    float[n] radian lat,lon pairs along earth circle

### earth_circle

    public static final float[] earth_circle(float phi1,
                                             float lambda0,
                                             float c,
                                             int n,
                                             float[] ret_val)

  Calculate earth circle in the sphere.

  Returns n float lat,lon pairs at arc distance c from point at phi1,lambda0.

  Parameters:
    `phi1` - latitude in radians of center point
    `lambda0` - longitude in radians of center point
    `c` - arc radius in radians (0 < c < PI)
    `n` - number of points along circle edge to calculate
    `ret_val` - float[] ret_val array of n*2 number of points along circle edge to calculate
  Returns:
    float[n] radian lat,lon pairs along earth circle

### earth_circle

    public static final float[] earth_circle(float phi1,
                                             float lambda0,
                                             float c,
                                             float s,
                                             float e,
                                             int n,
                                             float[] ret_val)

  Calculate earth circle in the sphere.

  Returns n float lat,lon pairs at arc distance c from point at phi1,lambda0.

  Parameters:
    `phi1` - latitude in radians of center point.
    `lambda0` - longitude in radians of center point.
    `c` - arc radius in radians (0 < c < PI).
    `s` - starting angle in radians. North up is zero.
    `e` - angular extent in radians, clockwise right from starting angle.
    `n` - number of points along circle edge to calculate.
    `ret_val` - float[] ret_val array of n*2 number of points along circle edge to calculate.
  Returns:
    float[n] radian lat,lon pairs along earth circle.

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