org.deegree_impl.model.ct
Class CylindricalProjection

java.lang.Object
  extended byorg.deegree_impl.model.ct.AbstractMathTransform
      extended byorg.deegree_impl.model.ct.MapProjection
          extended byorg.deegree_impl.model.ct.CylindricalProjection
All Implemented Interfaces:
MathTransform, MathTransform2D
Direct Known Subclasses:
MercatorProjection, PlateCarreeProjection, TransverseMercatorProjection

abstract class CylindricalProjection
extends MapProjection

Classe de base des projections cartographiques cylindriques. Les projections cylindriques consistent à projeter la surface de la Terre sur un cylindre tangeant ou sécant à la Terre. Les parallèles et mes méridiens apparaissent habituellement comme des lignes droites. On peut trouver plus de détails sur les projections cylindriques à l'adresse http://everest.hunter.cuny.edu/mp/cylind.html.

 

Représentation d'une projection cylindrique

Version:
1.0
Author:
Martin Desruisseaux

Nested Class Summary
(package private) static class MapProjection.Provider
          Informations about a MapProjection.
 
Field Summary
protected  double a
          Longueur de l'axe majeur de la terre, en mètres.
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.
protected  double e
          Excentricité de l'ellipse.
(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.
(package private) static double TOL
          Marge de tolérance pour les calculs itératifs.
 
Constructor Summary
protected CylindricalProjection(Projection parameters)
          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.
abstract  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 abstract  java.awt.geom.Point2D inverseTransform(double x, double y, java.awt.geom.Point2D ptDst)
          Transforms the specified 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.
 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 abstract  java.awt.geom.Point2D transform(double x, double y, java.awt.geom.Point2D ptDst)
          Transforms the specified 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

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

CylindricalProjection

protected CylindricalProjection(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.
Method Detail

getName

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

Overrides:
getName in class AbstractMathTransform
Parameters:
locale - The desired locale, or null for a default locale.
Returns:
The transform name localized in the specified locale if possible, or null if no name is available in any locale.

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

protected abstract java.awt.geom.Point2D transform(double x,
                                                   double y,
                                                   java.awt.geom.Point2D ptDst)
                                            throws TransformException
Transforms the specified coordinate and stores the result in ptDst. This method is guaranteed to be invoked with values of x in the range [-PI..PI] and values of y in the range [-PI/2..PI/2].

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.

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

protected abstract java.awt.geom.Point2D inverseTransform(double x,
                                                          double y,
                                                          java.awt.geom.Point2D ptDst)
                                                   throws TransformException
Transforms the specified coordinate and stores the result in ptDst. This method shall returns x values in the range [-PI..PI] and y values in the range [-PI/2..PI/2]. It will be checked by the caller, so this method doesn't need to performs this check.

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.

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.

hashCode

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

Overrides:
hashCode in class AbstractMathTransform

equals

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

Overrides:
equals in class AbstractMathTransform

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

toString

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