com.bbn.openmap.proj
Class GreatCircle

java.lang.Object
  extended bycom.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