org.deegree_impl.model.ct
Class StereographicProjection

java.lang.Object
  extended byorg.deegree_impl.model.ct.AbstractMathTransform
      extended byorg.deegree_impl.model.ct.MapProjection
          extended byorg.deegree_impl.model.ct.PlanarProjection
              extended byorg.deegree_impl.model.ct.StereographicProjection
All Implemented Interfaces:
MathTransform, MathTransform2D

final class StereographicProjection
extends PlanarProjection

Projection stéréographique. Les directions à partir du point central sont vrais, mais les aires et les longueurs deviennent de plus en plus déformées à mesure que l'on s'éloigne du centre. Cette projection est utilisée pour représenter des régions polaires. Elle peut être appropriée pour d'autres régions ayant une forme circulaire.

Référence: John P. Snyder (Map Projections - A Working Manual, U.S. Geological Survey Professional Paper 1395, 1987)

Version:
1.0
Author:
André Gosselin, Martin Desruisseaux

Nested Class Summary
(package private) static class StereographicProjection.Provider
          Informations about a StereographicProjection.
 
Field Summary
protected  double a
          Longueur de l'axe majeur de la terre, en mètres.
private  double ak0
          Global scale factor.
protected  double b
          Longueur de l'axe mineur de la terre, en mètres.
protected  double centralLatitude
          Central latitude in radians.
protected  double centralMeridian
          Central longitude in radians.
private  double chi1
          Facteurs utilisés lors des projections obliques et equatorialles.
private  double cosChi1
          Facteurs utilisés lors des projections obliques et equatorialles.
private  double cosphi0
          Facteurs utilisés lors des projections obliques et equatorialles.
protected  double e
          Excentricité de l'ellipse.
private static int ELLIPSOIDAL_EQUATORIAL
          Projection mode for switch statement.
private static int ELLIPSOIDAL_NORTH
          Projection mode for switch statement.
private static int ELLIPSOIDAL_OBLIQUE
          Projection mode for switch statement.
private static int ELLIPSOIDAL_SOUTH
          Projection mode for switch statement.
(package private) static double EPS
          Marge de tolérance pour les comparaisons de nombre réels.
protected  double es
          Carré de l'excentricité de l'ellipse: e² = (a²-b²)/a².
protected  double false_easting
           
protected  double false_northing
           
protected  boolean isSpherical
          Indique si le modèle terrestre est sphérique.
private  double k0
          Global scale factor.
private  double latitudeTrueScale
          Latitude of true scale, in radians.
private static int MAX_ITER
          Nombre maximal d'itérations permises lors du calcul de la projection inverse.
private  int mode
          Projection mode.
private  double sinChi1
          Facteurs utilisés lors des projections obliques et equatorialles.
private  double sinphi0
          Facteurs utilisés lors des projections obliques et equatorialles.
private static int SPHERICAL_EQUATORIAL
          Projection mode for switch statement.
private static int SPHERICAL_NORTH
          Projection mode for switch statement.
private static int SPHERICAL_OBLIQUE
          Projection mode for switch statement.
private static int SPHERICAL_SOUTH
          Projection mode for switch statement.
(package private) static double TOL
          Marge de tolérance pour les calculs itératifs.
 
Constructor Summary
protected StereographicProjection(Projection parameters)
          Construct a new map projection from the suplied parameters.
private StereographicProjection(Projection parameters, boolean polar, boolean auto)
          Construct a new map projection from the suplied parameters.
 
Method Summary
(package private)  double cphi2(double ts)
          Iteratively solve equation (7-9) from Snyder.
 java.awt.Shape createTransformedShape(java.awt.Shape shape)
          Transforme la forme géométrique shape spécifiée.
 boolean equals(java.lang.Object object)
          Compares the specified object with this map projection for equality.
 int getDimSource()
          Gets the dimension of input points.
 int getDimTarget()
          Gets the dimension of output points.
 java.lang.String getName(java.util.Locale locale)
          Returns a human readable name localized for the specified locale.
 int hashCode()
          Returns a hash value for this map projection.
 MathTransform inverse()
          Returns the inverse of this map projection.
 void inverseTransform(double[] src, int srcOffset, double[] dest, int dstOffset, int numPts)
          Inverse transforms a list of coordinate point ordinal values.
protected  java.awt.geom.Point2D inverseTransform(double x, double y, java.awt.geom.Point2D ptDst)
          Transforms the specified (x,y) coordinate and stores the result in ptDst.
 void inverseTransform(float[] src, int srcOffset, float[] dest, int dstOffset, int numPts)
          Inverse transforms a list of coordinate point ordinal values.
 java.awt.geom.Point2D inverseTransform(java.awt.geom.Point2D ptSrc, java.awt.geom.Point2D ptDst)
          Inverse transforms the specified ptSrc and stores the result in ptDst.
 boolean isIdentity()
          Returns false since map projections are not identity transforms.
(package private) static double latitudeToRadians(double y, boolean edge)
          Convertit en radians une latitude exprimée en degrés.
(package private) static double longitudeToRadians(double x, boolean edge)
          Convertit en radians une longitude exprimée en degrés.
(package private)  double msfn(double s, double c)
          Compute function f(s,c,es) = c/sqrt(1 - s²*es) needed for the true scale latitude (Snyder, p. 47), where s and c are the sine and cosine of the true scale latitude, and MapProjection.es the eccentricity squared.
private  double ssfn(double phi, double sinphi)
          Compute part of function (3-1) from Snyder
 java.lang.String toString()
          Retourne une chaîne de caractères représentant cette projection cartographique.
(package private)  void toString(java.lang.StringBuffer buffer)
          Implémentation de la partie entre crochets de la chaîne retournée par MapProjection.toString().
 void transform(double[] src, int srcOffset, double[] dest, int dstOffset, int numPts)
          Transforms a list of coordinate point ordinal values.
protected  java.awt.geom.Point2D transform(double x, double y, java.awt.geom.Point2D ptDst)
          Transforms the specified (x,y) coordinate and stores the result in ptDst.
 void transform(float[] src, int srcOffset, float[] dest, int dstOffset, int numPts)
          Transforms a list of coordinate point ordinal values.
 java.awt.geom.Point2D transform(java.awt.geom.Point2D ptSrc, java.awt.geom.Point2D ptDst)
          Transforms the specified ptSrc and stores the result in ptDst.
(package private)  double tsfn(double phi, double sinphi)
          Compute function (15-9) from Snyder equivalent to negative of function (7-7).
 
Methods inherited from class org.deegree_impl.model.ct.AbstractMathTransform
addParameter, addParameter, createTransformedShape, derivative, derivative, paramMT, toOpenGIS, transform
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.deegree_impl.model.ct.MathTransform2D
derivative
 
Methods inherited from interface org.deegree_impl.model.ct.MathTransform
derivative, transform
 

Field Detail

MAX_ITER

private static final int MAX_ITER
Nombre maximal d'itérations permises lors du calcul de la projection inverse.

See Also:
Constant Field Values

SPHERICAL_NORTH

private static final int SPHERICAL_NORTH
Projection mode for switch statement.

See Also:
Constant Field Values

SPHERICAL_SOUTH

private static final int SPHERICAL_SOUTH
Projection mode for switch statement.

See Also:
Constant Field Values

ELLIPSOIDAL_SOUTH

private static final int ELLIPSOIDAL_SOUTH
Projection mode for switch statement.

See Also:
Constant Field Values

ELLIPSOIDAL_NORTH

private static final int ELLIPSOIDAL_NORTH
Projection mode for switch statement.

See Also:
Constant Field Values

SPHERICAL_OBLIQUE

private static final int SPHERICAL_OBLIQUE
Projection mode for switch statement.

See Also:
Constant Field Values

SPHERICAL_EQUATORIAL

private static final int SPHERICAL_EQUATORIAL
Projection mode for switch statement.

See Also:
Constant Field Values

ELLIPSOIDAL_EQUATORIAL

private static final int ELLIPSOIDAL_EQUATORIAL
Projection mode for switch statement.

See Also:
Constant Field Values

ELLIPSOIDAL_OBLIQUE

private static final int ELLIPSOIDAL_OBLIQUE
Projection mode for switch statement.

See Also:
Constant Field Values

mode

private final int mode
Projection mode. It must be one of the following constants: SPHERICAL_NORTH, SPHERICAL_SOUTH, ELLIPSOIDAL_NORTH, ELLIPSOIDAL_SOUTH. SPHERICAL_OBLIQUE, SPHERICAL_EQUATORIAL, ELLIPSOIDAL_OBLIQUE or ELLIPSOIDAL_EQUATORIAL.


k0

private final double k0
Global scale factor. Value ak0 is equals to MapProjection.a*k0.


ak0

private final double ak0
Global scale factor. Value ak0 is equals to MapProjection.a*k0.


sinphi0

private final double sinphi0
Facteurs utilisés lors des projections obliques et equatorialles.


cosphi0

private final double cosphi0
Facteurs utilisés lors des projections obliques et equatorialles.


chi1

private final double chi1
Facteurs utilisés lors des projections obliques et equatorialles.


sinChi1

private final double sinChi1
Facteurs utilisés lors des projections obliques et equatorialles.


cosChi1

private final double cosChi1
Facteurs utilisés lors des projections obliques et equatorialles.


latitudeTrueScale

private final double latitudeTrueScale
Latitude of true scale, in radians. Used for toString(java.lang.StringBuffer) implementation.


EPS

static final double EPS
Marge de tolérance pour les comparaisons de nombre réels.

See Also:
Constant Field Values

TOL

static final double TOL
Marge de tolérance pour les calculs itératifs.

See Also:
Constant Field Values

isSpherical

protected final boolean isSpherical
Indique si le modèle terrestre est sphérique. La valeur true indique que le modèle est sphérique, c'est-à-dire que les champs MapProjection.a et MapProjection.b ont la même valeur.


e

protected final double e
Excentricité de l'ellipse. L'excentricité est 0 si l'ellipsoïde est sphérique, c'est-à-dire si MapProjection.isSpherical est true.


es

protected final double es
Carré de l'excentricité de l'ellipse: e² = (a²-b²)/a².


a

protected final double a
Longueur de l'axe majeur de la terre, en mètres. Sa valeur par défaut dépend de l'éllipsoïde par défaut (par exemple "WGS 1984").


b

protected final double b
Longueur de l'axe mineur de la terre, en mètres. Sa valeur par défaut dépend de l'éllipsoïde par défaut (par exemple "WGS 1984").


centralMeridian

protected double centralMeridian
Central longitude in radians. Default value is 0, the Greenwich meridian. Consider this field as final. It is not final only because TransverseMercatorProjection need to modify it at construction time.


centralLatitude

protected double centralLatitude
Central latitude in radians. Default value is 0, the equator. Consider this field as final. It is not final only because some class need to modify it at construction time.


false_easting

protected double false_easting

false_northing

protected double false_northing
Constructor Detail

StereographicProjection

protected StereographicProjection(Projection parameters)
                           throws MissingParameterException
Construct a new map projection from the suplied parameters.

Parameters:
parameters - The parameter values in standard units.
Throws:
MissingParameterException - if a mandatory parameter is missing.

StereographicProjection

private StereographicProjection(Projection parameters,
                                boolean polar,
                                boolean auto)
                         throws MissingParameterException
Construct a new map projection from the suplied parameters.

Parameters:
parameters - The parameter values in standard units.
polar - true for polar projection.
auto - true if projection (polar vs oblique) can be selected automatically.
Throws:
MissingParameterException - if a mandatory parameter is missing.
Method Detail

getName

public java.lang.String getName(java.util.Locale locale)
Returns a human readable name localized for the specified locale.

Specified by:
getName in class MapProjection

transform

protected java.awt.geom.Point2D transform(double x,
                                          double y,
                                          java.awt.geom.Point2D ptDst)
                                   throws TransformException
Transforms the specified (x,y) coordinate and stores the result in ptDst.

Specified by:
transform in class MapProjection
Parameters:
x - The longitude of the coordinate, in radians.
y - The latitude of the coordinate, in radians.
ptDst - the specified coordinate point that stores the result of transforming ptSrc, or null. Ordinates will be in metres.
Returns:
the coordinate point after transforming ptSrc and stroring the result in ptDst.
Throws:
TransformException - if the point can't be transformed.

inverseTransform

protected java.awt.geom.Point2D inverseTransform(double x,
                                                 double y,
                                                 java.awt.geom.Point2D ptDst)
                                          throws TransformException
Transforms the specified (x,y) coordinate and stores the result in ptDst.

Specified by:
inverseTransform in class MapProjection
Parameters:
x - The longitude of the coordinate, in metres.
y - The latitude of the coordinate, in metres.
ptDst - the specified coordinate point that stores the result of transforming ptSrc, or null. Ordinates will be in radians.
Returns:
the coordinate point after transforming ptSrc and stroring the result in ptDst.
Throws:
TransformException - if the point can't be transformed.

ssfn

private double ssfn(double phi,
                    double sinphi)
Compute part of function (3-1) from Snyder


hashCode

public int hashCode()
Returns a hash value for this map projection.

Overrides:
hashCode in class MapProjection

equals

public boolean equals(java.lang.Object object)
Compares the specified object with this map projection for equality.

Overrides:
equals in class MapProjection

toString

void toString(java.lang.StringBuffer buffer)
Implémentation de la partie entre crochets de la chaîne retournée par MapProjection.toString().

Overrides:
toString in class MapProjection

getDimSource

public final int getDimSource()
Gets the dimension of input points.

Specified by:
getDimSource in interface MathTransform
See Also:
CT_MathTransform.getDimSource()

getDimTarget

public final int getDimTarget()
Gets the dimension of output points.

Specified by:
getDimTarget in interface MathTransform
See Also:
CT_MathTransform.getDimTarget()

longitudeToRadians

static double longitudeToRadians(double x,
                                 boolean edge)
                          throws java.lang.IllegalArgumentException
Convertit en radians une longitude exprimée en degrés. Au passage, cette méthode vérifiera si la longitude est bien dans les limites permises (±180°). Cette méthode est utile pour vérifier la validité des paramètres de la projection, comme #setCentralLongitude.

Parameters:
x - Longitude à vérifier, en degrés.
edge - true pour accepter les longitudes de ±180°.
Returns:
Longitude en radians.
Throws:
java.lang.IllegalArgumentException - si la longitude est invalide.

latitudeToRadians

static double latitudeToRadians(double y,
                                boolean edge)
                         throws java.lang.IllegalArgumentException
Convertit en radians une latitude exprimée en degrés. Au passage, cette méthode vérifiera si la latitude est bien dans les limites permises (±90°). Cette méthode est utile pour vérifier la validité des paramètres de la projection, comme #setCentralLongitude.

Parameters:
y - Latitude à vérifier, en degrés.
edge - true pour accepter les latitudes de ±90°.
Returns:
Latitude en radians.
Throws:
java.lang.IllegalArgumentException - si la latitude est invalide.

transform

public final java.awt.geom.Point2D transform(java.awt.geom.Point2D ptSrc,
                                             java.awt.geom.Point2D ptDst)
                                      throws TransformException
Transforms the specified ptSrc and stores the result in ptDst.

Specified by:
transform in interface MathTransform2D
Overrides:
transform in class AbstractMathTransform
Parameters:
ptSrc - the specified coordinate point to be transformed. Ordinates must be in degrees.
ptDst - the specified coordinate point that stores the result of transforming ptSrc, or null. Ordinates will be in metres.
Returns:
the coordinate point after transforming ptSrc and stroring the result in ptDst.
Throws:
TransformException - if the point can't be transformed.
See Also:
MathTransform2D.transform(Point2D,Point2D)

transform

public final void transform(double[] src,
                            int srcOffset,
                            double[] dest,
                            int dstOffset,
                            int numPts)
                     throws TransformException
Transforms a list of coordinate point ordinal values. Ordinates must be (longitude,latitude) pairs in degrees.

Specified by:
transform in interface MathTransform
Parameters:
src - the array containing the source point coordinates.
srcOffset - the offset to the first point to be transformed in the source array.
dest - the array into which the transformed point coordinates are returned. May be the same than srcPts.
dstOffset - the offset to the location of the first transformed point that is stored in the destination array.
numPts - the number of point objects to be transformed.
Throws:
TransformException - if a point can't be transformed. This method try to transform every points even if some of them can't be transformed. Non-transformable points will have value Double.NaN. If more than one point can't be transformed, then this exception may be about an arbitrary point.

transform

public final void transform(float[] src,
                            int srcOffset,
                            float[] dest,
                            int dstOffset,
                            int numPts)
                     throws TransformException
Transforms a list of coordinate point ordinal values. Ordinates must be (longitude,latitude) pairs in degrees.

Specified by:
transform in interface MathTransform
Overrides:
transform in class AbstractMathTransform
Throws:
TransformException - if a point can't be transformed. This method try to transform every points even if some of them can't be transformed. Non-transformable points will have value Float.NaN. If more than one point can't be transformed, then this exception may be about an arbitrary point.

createTransformedShape

public final java.awt.Shape createTransformedShape(java.awt.Shape shape)
                                            throws TransformException
Transforme la forme géométrique shape spécifiée. Cette projection peut remplacer certaines lignes droites par des courbes. Tous les points de la forme géométrique seront copiés. Cette méthode n'est donc pas à conseiller si shape est volumineux, par exemple s'il représente une bathymétrie entière.

Specified by:
createTransformedShape in interface MathTransform2D
Overrides:
createTransformedShape in class AbstractMathTransform
Parameters:
shape - Forme géométrique à transformer. Les coordonnées des points de cette forme doivent être exprimées en degrés de latitudes et de longitudes.
Returns:
Forme géométrique transformée. Les coordonnées des points de cette forme seront exprimées en mètres.
Throws:
TransformException - si une transformation a échouée.
See Also:
MathTransform2D.createTransformedShape(Shape)

inverseTransform

public final java.awt.geom.Point2D inverseTransform(java.awt.geom.Point2D ptSrc,
                                                    java.awt.geom.Point2D ptDst)
                                             throws TransformException
Inverse transforms the specified ptSrc and stores the result in ptDst.

Parameters:
ptSrc - the specified coordinate point to be transformed. Ordinates must be in metres.
ptDst - the specified coordinate point that stores the result of transforming ptSrc, or null. Ordinates will be in degrees.
Returns:
the coordinate point after transforming ptSrc and stroring the result in ptDst.
Throws:
TransformException - if the point can't be transformed.

inverseTransform

public final void inverseTransform(double[] src,
                                   int srcOffset,
                                   double[] dest,
                                   int dstOffset,
                                   int numPts)
                            throws TransformException
Inverse transforms a list of coordinate point ordinal values. Ordinates must be (x,y) pairs in metres.

Throws:
TransformException - if a point can't be transformed. This method try to transform every points even if some of them can't be transformed. Non-transformable points will have value Double.NaN. If more than one point can't be transformed, then this exception may be about an arbitrary point.

inverseTransform

public final void inverseTransform(float[] src,
                                   int srcOffset,
                                   float[] dest,
                                   int dstOffset,
                                   int numPts)
                            throws TransformException
Inverse transforms a list of coordinate point ordinal values. Ordinates must be (x,y) pairs in metres.

Throws:
TransformException - if a point can't be transformed. This method try to transform every points even if some of them can't be transformed. Non-transformable points will have value Float.NaN. If more than one point can't be transformed, then this exception may be about an arbitrary point.

cphi2

final double cphi2(double ts)
            throws TransformException
Iteratively solve equation (7-9) from Snyder.

Throws:
TransformException

msfn

final double msfn(double s,
                  double c)
Compute function f(s,c,es) = c/sqrt(1 - s²*es) needed for the true scale latitude (Snyder, p. 47), where s and c are the sine and cosine of the true scale latitude, and MapProjection.es the eccentricity squared.


tsfn

final double tsfn(double phi,
                  double sinphi)
Compute function (15-9) from Snyder equivalent to negative of function (7-7).


inverse

public final MathTransform inverse()
Returns the inverse of this map projection.

Specified by:
inverse in interface MathTransform
Overrides:
inverse in class AbstractMathTransform

isIdentity

public final boolean isIdentity()
Returns false since map projections are not identity transforms.

Specified by:
isIdentity in interface MathTransform
Returns:
true if this MathTransform is an identity transform; false otherwise.

toString

public final java.lang.String toString()
Retourne une chaîne de caractères représentant cette projection cartographique. Cette chaîne de caractères contiendra entre autres le nom de la projection, les coordonnées du centre et celles de l'origine.

Overrides:
toString in class AbstractMathTransform