Class Mercator.Spherical
java.lang.Object
org.apache.sis.io.wkt.FormattableObject
org.apache.sis.referencing.operation.transform.AbstractMathTransform
org.apache.sis.referencing.operation.transform.AbstractMathTransform2D
org.apache.sis.referencing.operation.projection.NormalizedProjection
org.apache.sis.referencing.operation.projection.ConformalProjection
org.apache.sis.referencing.operation.projection.Mercator
org.apache.sis.referencing.operation.projection.Mercator.Spherical
- All Implemented Interfaces:
Serializable
,Parameterized
,LenientComparable
,org.opengis.referencing.operation.MathTransform
,org.opengis.referencing.operation.MathTransform2D
- Enclosing class:
- Mercator
Provides the transform equations for the spherical case of the Mercator projection.
Implementation note:
this class contains an explicit check for latitude values at a pole. If floating point arithmetic had infinite
precision, such checks would not be necessary since the formulas lead naturally to infinite values at poles,
which is the correct answer. In practice the infinite value emerges by itself at only one pole, and the other
one produces a high value (approximately 1E+16). This is because there is no accurate representation of π/2,
and consequently
tan(π/2)
does not return the infinite value. We workaround this issue with an explicit
check for abs(φ) ≊ π/2. Note that:
- The arithmetic is not broken for values close to pole. We check π/2 because this is the result of converting 90°N to radians, and we presume that the user really wanted to said 90°N. But for most other values we could let the math do their "natural" work.
- For φ = -π/2 our arithmetic already produces negative infinity.
- Since:
- 0.6
- Version:
- 0.6
-
Nested Class Summary
Nested classes/interfaces inherited from class org.apache.sis.referencing.operation.projection.Mercator
Mercator.Spherical
Nested classes/interfaces inherited from class org.apache.sis.referencing.operation.projection.NormalizedProjection
NormalizedProjection.ParameterRole
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final long
For cross-version compatibility.Fields inherited from class org.apache.sis.referencing.operation.projection.ConformalProjection
ECCENTRICITY_THRESHOLD
Fields inherited from class org.apache.sis.referencing.operation.projection.NormalizedProjection
ANGULAR_TOLERANCE, context, eccentricity, eccentricitySquared, ITERATION_TOLERANCE, LARGE_LONGITUDE_LIMIT, MAXIMUM_ITERATIONS, POLAR_AREA_LIMIT
Fields inherited from class org.apache.sis.referencing.operation.transform.AbstractMathTransform2D
DIMENSION
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected void
inverseTransform
(double[] srcPts, int srcOff, double[] dstPts, int dstOff) Converts the specified (x,y) coordinates and stores the result indstPts
(angles in radians).org.opengis.referencing.operation.Matrix
transform
(double[] srcPts, int srcOff, double[] dstPts, int dstOff, boolean derivate) Projects the specified coordinates (implementation-specific units) and stores the result indstPts
.void
transform
(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts) Converts a list of coordinate tuples.Methods inherited from class org.apache.sis.referencing.operation.projection.Mercator
createMapProjection, getDomain, tryConcatenate
Methods inherited from class org.apache.sis.referencing.operation.projection.ConformalProjection
dy_dφ, expΨ, φ
Methods inherited from class org.apache.sis.referencing.operation.projection.NormalizedProjection
completeWithWraparound, computeHashCode, delegate, equals, getContextualParameters, getInternalParameterNames, getInternalParameterValues, getParameterDescriptors, getParameterValues, getWraparoundLongitude, inverse, tryConcatenate, variant
Methods inherited from class org.apache.sis.referencing.operation.transform.AbstractMathTransform2D
createTransformedShape, derivative, getSourceDimensions, getTargetDimensions, transform
Methods inherited from class org.apache.sis.referencing.operation.transform.AbstractMathTransform
derivative, equals, formatTo, hashCode, isIdentity, transform, transform, transform, transform
Methods inherited from class org.apache.sis.io.wkt.FormattableObject
print, toString, toString, toWKT
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.opengis.referencing.operation.MathTransform
derivative, isIdentity, toWKT, transform, transform, transform, transform
-
Field Details
-
serialVersionUID
private static final long serialVersionUIDFor cross-version compatibility.- See Also:
-
-
Constructor Details
-
Spherical
Spherical(Mercator other) Constructs a new map projection from the parameters of the given projection.- Parameters:
other
- the other projection (usually ellipsoidal) from which to copy the parameters.
-
-
Method Details
-
transform
public org.opengis.referencing.operation.Matrix transform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, boolean derivate) Projects the specified coordinates (implementation-specific units) and stores the result indstPts
. In addition, opportunistically computes the projection derivative ifderivate
istrue
. The results must be multiplied by the denormalization matrix before to get linear distances.- Overrides:
transform
in classMercator
- Parameters:
srcPts
- the array containing the source point coordinates, as (longitude, latitude) angles in radians.srcOff
- the offset of the single coordinate tuple to be converted in the source array.dstPts
- the array into which the converted coordinates is returned (may be the same thansrcPts
). Coordinates will be expressed in a dimensionless unit, as a linear distance on a unit sphere or ellipse.dstOff
- the offset of the location of the converted coordinates that is stored in the destination array.derivate
-true
for computing the derivative, orfalse
if not needed.- Returns:
- the matrix of the projection derivative at the given source position,
or
null
if thederivate
argument isfalse
. - See Also:
-
transform
public void transform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts) throws org.opengis.referencing.operation.TransformException Converts a list of coordinate tuples. This method performs the same calculation than aboveMercator.transform(double[], int, double[], int, boolean)
method, but is overridden for efficiency.Note: This method must be overridden because theMercator
class overrides theNormalizedProjection
default implementation.- Specified by:
transform
in interfaceorg.opengis.referencing.operation.MathTransform
- Overrides:
transform
in classMercator
- Parameters:
srcPts
- the array containing the source point coordinates.srcOff
- the offset to the first point to be transformed in the source array.dstPts
- the array into which the transformed point coordinates are returned. May be the same thansrcPts
.dstOff
- 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:
org.opengis.referencing.operation.TransformException
- if a point cannot be converted.
-
inverseTransform
protected void inverseTransform(double[] srcPts, int srcOff, double[] dstPts, int dstOff) Converts the specified (x,y) coordinates and stores the result indstPts
(angles in radians).- Overrides:
inverseTransform
in classMercator
- Parameters:
srcPts
- the array containing the source point coordinates, as linear distance on a unit sphere or ellipse.srcOff
- the offset of the point to be converted in the source array.dstPts
- the array into which the converted point coordinates is returned (may be the same thansrcPts
). Coordinates will be (longitude, latitude) angles in radians.dstOff
- the offset of the location of the converted point that is stored in the destination array.
-