fr.cnes.sirius.patrius.projections
Class ProjectionEllipsoid

java.lang.Object
  extended by org.orekit.bodies.ExtendedOneAxisEllipsoid
      extended by fr.cnes.sirius.patrius.projections.ProjectionEllipsoid
All Implemented Interfaces:
Serializable, BodyShape, GeometricBodyShape, PVCoordinatesProvider

public class ProjectionEllipsoid
extends ExtendedOneAxisEllipsoid

This class extends the ExtendedOneAxisEllipsoid class and provides utility methods needed for projections.

Since:
3.2
Version:
$Id: ProjectionEllipsoid.java 16841 2016-10-21 07:24:16Z bignon $
Author:
Thomas Galpin
See Also:
ExtendedOneAxisEllipsoid, Serialized Form
Concurrency :
not thread-safe

Field Summary
static double GEODETIC_PRECISION
          Local precision for geodetic problem computation (in meters).
 
Constructor Summary
ProjectionEllipsoid(double ae, double f, Frame bodyFrame, String name)
          Constructor for the body ellipsoid.
 
Method Summary
 double computeBearing(GeodeticPoint gv1, GeodeticPoint gv2)
          Compute the bearing (azimuth) between two geodetic Points.
 double computeInverseMeridionalDistance(double distance)
          Compute the geodetic latitude, from a distance from the equator.
 double computeInverseRectifyingLatitude(double rectifyingLat)
          compute geodetic latitude at a given rectifying latitude.
 double computeLoxodromicDistance(GeodeticPoint p1, GeodeticPoint p2)
          Loxodromic distance between P1 and P2.This is the distance of constant bearing (or along a line in Mercator).
 double computeMercatorLatitude(double geodeticLat)
          Compute crescent latitude (Le) at a given geodetic latitude.
 double computeMeridionalDistance(double geodeticLat)
          Compute the distance from a given geodetic latitude to the equator, along a meridian.
 double computeOrthodromicDistance(double lat1, double lon1, double lat2, double lon2)
          Compute the orthodromic distance.
 double computeOrthodromicDistance(GeodeticPoint p1, GeodeticPoint p2)
          Compute the orthodromic distance between two points.
 GeodeticPoint computePointAlongLoxodrome(GeodeticPoint p1, double distance, double azimuth)
          Compute the point coordinates from an origin point, an azimuth and a distance along the rhumb line (Loxodrome).
 GeodeticPoint computePointAlongOrthodrome(GeodeticPoint p1, double distance, double azimuthDirection)
          Compute a geodetic point along orthodrome, from a point p1, at a distance d, in a direction defined from an azimuth.
 double computeRadiusEastWest(double geodeticLat)
          Compute radius of curvature section East/West (also called M or Re).
 double computeSphericalAzimuth(GeodeticPoint p1, GeodeticPoint p2)
          Compute the spherical azimuth (clock wise) between two points.
 List<GeodeticPoint> discretizeGreatCircle(GeodeticPoint from, GeodeticPoint to, double maxLength)
          Discretize a great circle into N segments, between two points.
 List<GeodeticPoint> discretizeRhumbLine(GeodeticPoint from, GeodeticPoint to, double maxLength)
          Discretize a rhumb line into N segments, between two points.
 double getEccentricity()
          Get the eccentricity.
 double[] getSeries()
          Getter for series.
 
Methods inherited from class org.orekit.bodies.ExtendedOneAxisEllipsoid
distanceTo, getBodyFrame, getConjugateRadius, getEquatorialRadius, getFlattening, getIntersectionPoint, getIntersectionPoints, getLocalRadius, getName, getNormal, getPVCoordinates, getTransverseRadius, transform, transform
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

GEODETIC_PRECISION

public static final double GEODETIC_PRECISION
Local precision for geodetic problem computation (in meters).

See Also:
Constant Field Values
Constructor Detail

ProjectionEllipsoid

public ProjectionEllipsoid(double ae,
                           double f,
                           Frame bodyFrame,
                           String name)
Constructor for the body ellipsoid.

Parameters:
ae - equatorial radius
f - the flattening (f = (a-b)/a)
bodyFrame - body frame related to body shape
name - the name of this shape
Method Detail

computeBearing

public final double computeBearing(GeodeticPoint gv1,
                                   GeodeticPoint gv2)
                            throws OrekitException
Compute the bearing (azimuth) between two geodetic Points.

Parameters:
gv1 - geodetic point 1
gv2 - geodetic point 2
Returns:
the azimuth angle as a double. Convention used : azimuth is angle from the north direction to the current direction in CLOCKWISE sense.
Throws:
OrekitException - if points are too close from each other

computeSphericalAzimuth

public double computeSphericalAzimuth(GeodeticPoint p1,
                                      GeodeticPoint p2)
Compute the spherical azimuth (clock wise) between two points.

Parameters:
p1 - first point
p2 - second point
Returns:
the spherical azimuth (clock wise)

computeMercatorLatitude

public double computeMercatorLatitude(double geodeticLat)
Compute crescent latitude (Le) at a given geodetic latitude. also called Mercator latitude. See following link for demonstration of formula :

Parameters:
geodeticLat - geodetic latitude
Returns:
crescent latitude (Le) also called Mercator latitude
See Also:
http://cartes-martinique.pagesperso-orange.fr/LatitudesCroissantes.htm

computeRadiusEastWest

public double computeRadiusEastWest(double geodeticLat)
Compute radius of curvature section East/West (also called M or Re). Distance to the Intersection of normal to ellipsoid at the given latitude with pole axis.

Parameters:
geodeticLat - geodetic latitude must between : - PI/2 and PI/2
Returns:
radius of curvatureEast/West (also called M or Re)

computeLoxodromicDistance

public double computeLoxodromicDistance(GeodeticPoint p1,
                                        GeodeticPoint p2)
                                 throws OrekitException
Loxodromic distance between P1 and P2.This is the distance of constant bearing (or along a line in Mercator). This method comes from libSpace.

Parameters:
p1 - Point 1
p2 - Point 2
Returns:
distance in meters along loxodromic
Throws:
OrekitException - if latitude of one point is not between -/+ 89.999 deg

computeMeridionalDistance

public final double computeMeridionalDistance(double geodeticLat)
Compute the distance from a given geodetic latitude to the equator, along a meridian.

Parameters:
geodeticLat - geodetic latitude must between : - PI/2 and PI/2
Returns:
meridionalDistance (in meters)

computeInverseMeridionalDistance

public final double computeInverseMeridionalDistance(double distance)
Compute the geodetic latitude, from a distance from the equator.

Parameters:
distance - distance from the equator
Returns:
geodetic latitude

computePointAlongLoxodrome

public final GeodeticPoint computePointAlongLoxodrome(GeodeticPoint p1,
                                                      double distance,
                                                      double azimuth)
                                               throws OrekitException
Compute the point coordinates from an origin point, an azimuth and a distance along the rhumb line (Loxodrome). The computation is done on the geoid associated to the geodetic point. The method is issue from Snyder, Map Projection, A working manuel, p46/47. The method comes from libSpace The precision is but is slower than the simplified method (about 20%)

Parameters:
p1 - initial point
distance - distance along the rhumb line
azimuth - Convention used : azimuth is angle from the north direction to the current direction in CLOCKWISE sense.
Returns:
the resulting geodetic point
Throws:
OrekitException - if computed latitudes are out of range
See Also:
https://pubs.er.usgs.gov/publication/pp1395

computeInverseRectifyingLatitude

public double computeInverseRectifyingLatitude(double rectifyingLat)
compute geodetic latitude at a given rectifying latitude. rectifying latitude -> giving sphere that has correct distances along the meridians

Parameters:
rectifyingLat - rectifying latitude
Returns:
geodetic latitude (rad)

computeOrthodromicDistance

public final double computeOrthodromicDistance(GeodeticPoint p1,
                                               GeodeticPoint p2)
Compute the orthodromic distance between two points. This code is issue from Vincenty's works. If points are equal it returns 0, else it calls the the Vincenty method, with more elementary parameters.

Parameters:
p1 - first point
p2 - second point
Returns:
orthodromic distance on ellipsoid.
See Also:
http://www.ngs.noaa.gov/PUBS_LIB/inverse.pdf

computeOrthodromicDistance

public final double computeOrthodromicDistance(double lat1,
                                               double lon1,
                                               double lat2,
                                               double lon2)
Compute the orthodromic distance. This code is issue from Vincenty's works.

Parameters:
lat1 - latitude point 1.
lon1 - longitude point 1.
lat2 - latitude point 2.
lon2 - longitude point 2.
Returns:
Orthodromic distance on ellipsoid.
See Also:
http://www.ngs.noaa.gov/PUBS_LIB/inverse.pdf

computePointAlongOrthodrome

public final GeodeticPoint computePointAlongOrthodrome(GeodeticPoint p1,
                                                       double distance,
                                                       double azimuthDirection)
Compute a geodetic point along orthodrome, from a point p1, at a distance d, in a direction defined from an azimuth. This is the direct geodetic problem. This code is issue from Vincenty's works.

Parameters:
p1 - Origin point.
distance - Distance to compute resulting point.
azimuthDirection - azimuth direction, convention used : azimuth is angle from the north direction to the current direction in CLOCKWISE sense.
Returns:
the geodetic point
See Also:
http://www.ngs.noaa.gov/PUBS_LIB/inverse.pdf

discretizeRhumbLine

public final List<GeodeticPoint> discretizeRhumbLine(GeodeticPoint from,
                                                     GeodeticPoint to,
                                                     double maxLength)
                                              throws OrekitException
Discretize a rhumb line into N segments, between two points. The result returned contains the first and the last point.

Parameters:
from - first geodetic point
to - ending geodetic point
maxLength - This distance is used when a discretization occurs : i.e : when the line property is not coherent with the projection ( EnumLineProperty). This parameter represent a distance expressed in meters. This will be the maximal distance between two points of the projected polygon. If you set the parameter to a value <=0 no discretization will be done.
Returns:
a list of geodetic points
Throws:
OrekitException - if points are too close from each other

discretizeGreatCircle

public final List<GeodeticPoint> discretizeGreatCircle(GeodeticPoint from,
                                                       GeodeticPoint to,
                                                       double maxLength)
Discretize a great circle into N segments, between two points. The result returned contains the first and the last point.

Parameters:
from - first geodetic point
to - ending geodetic point
maxLength - This distance is used when a discretization occurs : i.e : when the line property is not coherent with the projection ( EnumLineProperty). This parameter represent a distance expressed in meters. This will be the maximal distance between two points of the projected polygon. If you set the parameter to a value <=0, no discretization will be done.
Returns:
a list of geodetic points

getEccentricity

public double getEccentricity()
Get the eccentricity.

Returns:
the eccentricity

getSeries

public double[] getSeries()
Getter for series.

Returns:
the series


Copyright © 2016 CNES. All Rights Reserved.