nsidc.spheres
Class Orbit

java.lang.Object
  extended bynsidc.spheres.Sphere
      extended bynsidc.spheres.Orbit
Direct Known Subclasses:
Scene

public class Orbit
extends Sphere

Orbit class - Provide services and information relating to an orbit.

This orbit model isn't anything fancy. We just draw a great circle and rotate the sphere under it. As such it works fairly well for satellites in a circular orbit with forward, nadir, or backward looking sensors. For satellites with elliptical orbits and/or side viewing sensors you'll need something fancier.

This class assumes a spherical earth.
This class assumes orbits start and end at the equator on the ascending pass.

See Also:
Sphere, Scene

Field Summary
 double declination
          The declination of the orbit in decimal degrees West of North.
 double eq_swath_width
          Swath width at the equator in (scaled) Km.
 double eq_swath_width_deg
          Swath width at the equator in degrees.
 double eq_swath_width_rad
          Swath width at the equator in radians.
 double inflection_lat
          Absolute value of highest/lowest lat achieved by nadir in decimal degrees.
 double inflection_max_lat
          Max latitude of the swath edge at the inflection point.
 double inflection_min_lat
          Min latitude of the swath edge at the inflection point.
 float maxCoverageLat
          Absolute value of latitude above/below which no orbits have coverage.
 double period
          Orbital period in decimal minutes.
 boolean pole_to_pole
          Boolean to indicate if this starts/ends at the south pole or the equator
protected  double ROTATION_RATE
          rotation of the earth in radians/minute
 float totalCoverageLat
          Absolute value of latitude above/below which all orbits have coverage.
 
Fields inherited from class nsidc.spheres.Sphere
radius, Re_km
 
Constructor Summary
protected Orbit()
          Empty constructor - do not use.
  Orbit(double given_declination, double given_period, double given_eq_swath_width)
          Construct and initialize an orbit.
  Orbit(float given_declination, float given_period, float given_eq_swath_width)
          Construct and initialize an orbit.
  Orbit(java.lang.String given_declination, java.lang.String given_period, java.lang.String given_eq_swath_width)
          Construct and initialize an orbit.
 
Method Summary
 float circularLat(double lat, boolean asc)
           
 float circularLat(float lat, boolean asc)
           
 float directedLonDistance(float lon1, float lon2)
           
 LonRange[] getAreaCrossingRange(double[] lat, double[] lon, boolean ascending)
          Get the range of ascending nodal crossings for orbits that cover the given spherical polygon.
 LonRange[] getAreaCrossingRange(float[] lat, float[] lon, boolean ascending)
           
 LonRange[] getAreaCrossingRange(LatLonBoundingBox llbox, boolean ascending)
          Get the range of ascending nodal crossings for orbits that cover the given Lat/Lon Bounding Box.
 LonRange[] getAreaCrossingRange(Point[] points, boolean ascending)
          Get the range of ascending nodal crossings for orbits that cover the given spherical polygon.
 LonRange[] getAreaCrossingRange(SphericalPolygon spolygon, boolean ascending)
          Get the range of ascending nodal crossings for orbits that cover the given spherical polygon.
(package private)  void getCrossSwathEdges(float lat, float lon, float[] edge_lat, float[] edge_lon, boolean ascending)
          Get the cross track edge points of the swath with nadir at the given point.
 boolean getLonSwathEdges(float lat, float lon, boolean ascending, float[] edgeLon)
          Get the swath edge points at the given latitude.
 float getNodalCrossing(double lat, double lon, boolean ascending, boolean adjust)
           
 float getNodalCrossing(float lat, float lon, boolean ascending, boolean adjust)
          Get the ascending nodal crossing of the orbit with nadir passing through the given point.
 LonRange getPointCrossingRange(float lat, float lon, boolean ascending)
          Get the range of ascending nodal crossings for orbits that cover the given point.
 LonRange getPointCrossingRange(Point point, boolean ascending)
          Get the range of ascending nodal crossings for orbits that cover the given point.
 float lonDistance(float lon1, float lon2)
          Misc.
 float shortestLonDistance(float lon1, float lon2)
           
 float standardLat(double lat)
           
protected  void systemLog(java.lang.String msg)
          Log diagnostic messages
protected  void systemLog(java.lang.String msg, int level)
          Log diagnostic messages
 java.lang.String toString()
           
 
Methods inherited from class nsidc.spheres.Sphere
degrees, degrees, getRadius, normalize, normalize, radians, radians, scalarTripleProductTest, setRadius
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

declination

public double declination
The declination of the orbit in decimal degrees West of North. For sun-syncronous orbits this is the same as (inclination - 90).


period

public double period
Orbital period in decimal minutes.


eq_swath_width

public double eq_swath_width
Swath width at the equator in (scaled) Km.


eq_swath_width_rad

public double eq_swath_width_rad
Swath width at the equator in radians.


eq_swath_width_deg

public double eq_swath_width_deg
Swath width at the equator in degrees.


inflection_lat

public double inflection_lat
Absolute value of highest/lowest lat achieved by nadir in decimal degrees.


inflection_max_lat

public double inflection_max_lat
Max latitude of the swath edge at the inflection point.


inflection_min_lat

public double inflection_min_lat
Min latitude of the swath edge at the inflection point.


maxCoverageLat

public float maxCoverageLat
Absolute value of latitude above/below which no orbits have coverage.


totalCoverageLat

public float totalCoverageLat
Absolute value of latitude above/below which all orbits have coverage.


pole_to_pole

public boolean pole_to_pole
Boolean to indicate if this starts/ends at the south pole or the equator


ROTATION_RATE

protected final double ROTATION_RATE
rotation of the earth in radians/minute

See Also:
Constant Field Values
Constructor Detail

Orbit

protected Orbit()
Empty constructor - do not use.


Orbit

public Orbit(java.lang.String given_declination,
             java.lang.String given_period,
             java.lang.String given_eq_swath_width)
Construct and initialize an orbit.


Orbit

public Orbit(float given_declination,
             float given_period,
             float given_eq_swath_width)
Construct and initialize an orbit.


Orbit

public Orbit(double given_declination,
             double given_period,
             double given_eq_swath_width)
Construct and initialize an orbit.

Method Detail

getNodalCrossing

public float getNodalCrossing(float lat,
                              float lon,
                              boolean ascending,
                              boolean adjust)
Get the ascending nodal crossing of the orbit with nadir passing through the given point.

Parameters:
lat - Latitude of the given point in degrees.
lon - Longitude of the given point in degrees.
ascending - if true find the orbit with nadir passing through the given point on the ascending pass.
Else find the orbit with nadir passing through the given point on the descending pass.
adjust - if true adjust for the rotation of the Earth.
Else consider a static sphere.
Returns:
lam0 - the nodal crossing in degrees longitude.

getNodalCrossing

public float getNodalCrossing(double lat,
                              double lon,
                              boolean ascending,
                              boolean adjust)

getLonSwathEdges

public boolean getLonSwathEdges(float lat,
                                float lon,
                                boolean ascending,
                                float[] edgeLon)
Get the swath edge points at the given latitude.

Parameters:
lat - Latitude of the given point in degrees.
lon - Longitude of the given point in degrees.
ascending - If true find edges for the orbit with nadir passing through the given point on the ascending pass.
Else find the edges for the orbit with nadir passing through the given point on the descending pass.

Returns:
true - if sucessful
true - if unsucessful.

getAreaCrossingRange

public LonRange[] getAreaCrossingRange(SphericalPolygon spolygon,
                                       boolean ascending)
Get the range of ascending nodal crossings for orbits that cover the given spherical polygon.

Parameters:
spolygon - spherical polygon to get coverage for.
ascending - If true find the orbits that cover the given point on the ascending pass.
Else find the orbits that cover the given point on the descending pass.
Returns:
LonRange[] contains the longitudinal ranges for crossings of orbits that cover the given corner points.
There may be more than one range if the corner points are too far apart, but this method densifies the polygon to help prevent that from happening.
Returns null if it fails utterly (e.g.: if your polygon is completely outside the sensors viewing area.)

getAreaCrossingRange

public LonRange[] getAreaCrossingRange(LatLonBoundingBox llbox,
                                       boolean ascending)
Get the range of ascending nodal crossings for orbits that cover the given Lat/Lon Bounding Box.

Parameters:
llbox - lat/lon bounding box to get coverage for.
ascending - If true find the orbits that cover the given point on the ascending pass.
Else find the orbits that cover the given point on the descending pass.
Returns:
LonRange[] contains the longitudinal ranges for crossings of orbits that cover the given corner points.
There may be more than one range if the corner points are too far apart, but this method densifies the LLbox to help prevent that from happening.
Returns null if it fails utterly (e.g.: if your polygon is completely outside the sensors viewing area.)

getAreaCrossingRange

public LonRange[] getAreaCrossingRange(float[] lat,
                                       float[] lon,
                                       boolean ascending)

getAreaCrossingRange

public LonRange[] getAreaCrossingRange(double[] lat,
                                       double[] lon,
                                       boolean ascending)
Get the range of ascending nodal crossings for orbits that cover the given spherical polygon.

Parameters:
ascending - If true find the orbits that cover the given point on the ascending pass.
Else find the orbits that cover the given point on the descending pass.
Returns:
LonRange[] contains the longitudinal ranges for crossings of orbits that cover the given corner points.
There may be more than one range if the corner points are far apart.
Returns null if it fails utterly (e.g.: if your polygon is completely outside the sensors viewing area.)

getAreaCrossingRange

public LonRange[] getAreaCrossingRange(Point[] points,
                                       boolean ascending)
Get the range of ascending nodal crossings for orbits that cover the given spherical polygon.

Parameters:
ascending - If true find the orbits that cover the given point on the ascending pass.
Else find the orbits that cover the given point on the descending pass.
Returns:
LonRange[] contains the longitudinal ranges for crossings of orbits that cover the given corner points.
There may be more than one range if the corner points are far apart.
Returns null if it fails utterly (e.g.: if your polygon is completely outside the sensors viewing area.)

getPointCrossingRange

public LonRange getPointCrossingRange(Point point,
                                      boolean ascending)
Get the range of ascending nodal crossings for orbits that cover the given point.

Parameters:
point - - The given point.
ascending - - If true find the orbits that cover the given point on the ascending pass. Else find the orbits that cover the given point on the descending pass.
Returns:
lonRange - longitude range of crossings.
Returns null if it fails utterly (e.g.: if your point is completely outside the sensors viewing area.)

getPointCrossingRange

public LonRange getPointCrossingRange(float lat,
                                      float lon,
                                      boolean ascending)
Get the range of ascending nodal crossings for orbits that cover the given point.

Parameters:
lat - Latitude of the given point in degrees.
lon - Longitude of the given point in degrees.
ascending - If true find the orbits that cover the given point on the ascending pass. Else find the orbits that cover the given point on the descending pass.
Returns:
lonRange - longitude range of crossings.
Returns null if it fails utterly (e.g.: if your point is completely outside the sensors viewing area.)

getCrossSwathEdges

void getCrossSwathEdges(float lat,
                        float lon,
                        float[] edge_lat,
                        float[] edge_lon,
                        boolean ascending)
Get the cross track edge points of the swath with nadir at the given point.

Parameters:
lat - Latitude of the given point in degrees.
lon - Longitude of the given point in degrees.
ascending - If true find edges for the orbit with nadir passing through the given point on the ascending pass.
Else find the edges for the orbit with nadir passing through the given point on the descending pass.

Notes:
'right' and 'left' are from the satellites perspective.

If any of the edge location pointers are NULL this procedure will only calculate the nadir longitude.

This routine assumes the orbit is a great circle and does not correct for nodal regression. Consequently values for orbits other than sun-syncronous will be in error.


lonDistance

public float lonDistance(float lon1,
                         float lon2)
Misc. Utility functions.


directedLonDistance

public float directedLonDistance(float lon1,
                                 float lon2)

shortestLonDistance

public float shortestLonDistance(float lon1,
                                 float lon2)

circularLat

public float circularLat(float lat,
                         boolean asc)

circularLat

public float circularLat(double lat,
                         boolean asc)

standardLat

public float standardLat(double lat)

toString

public java.lang.String toString()

systemLog

protected void systemLog(java.lang.String msg,
                         int level)
Log diagnostic messages

Overrides:
systemLog in class Sphere
Parameters:
msg - Message to log.
level - Debug sensitivity.

systemLog

protected void systemLog(java.lang.String msg)
Description copied from class: Sphere
Log diagnostic messages

Overrides:
systemLog in class Sphere
Parameters:
msg - Message to log.