Class GeodesicsOnEllipsoid
Charles F. F. Karney, 2013. Algorithms for geodesics, SRI International.The following symbols are used with the same meaning than in Karney's article, except λ₁₂ which is represented by ∆λ:
- a: equatorial radius of the ellipsoid of revolution.
- b: polar semi-axis of the ellipsoid of revolution.
- ℯ: first eccentricity: ℯ = √[(a²-b²)/a²].
- ℯ′: second eccentricity: ℯ′ = √[(a²-b²)/b²].
- n: third flattening: n = (a-b)/(a+b).
- E: the point at which the geodesic crosses the equator in the northward direction.
- P: the start point (P₁) or end point (P₂).
- ∆λ: longitude difference between start point and end point (λ₁₂ in Karney).
- β: reduced latitude, related to φ geodetic latitude on the ellipsoid.
- ω: spherical longitude, related to λ geodetic longitude on the ellipsoid.
- σ: spherical arc length, related to distance s on the ellipsoid.
Limitations
Current implementation is still unable to compute the geodesics in some cases. In particular, calculation may fail for antipodal points. See SIS-467.If the following cases where more than one geodesics exist, current implementation returns an arbitrary one:
- Coincident points (distance is zero but azimuths can be anything).
- Starting point and ending points are at opposite poles (there are infinitely many geodesics).
- φ₁ = -φ₂ and ∆λ is close to 180° (two geodesics may exist).
- ∆λ = ±180° (two geodesics may exist).
- Since:
- 1.0
- Version:
- 1.0
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate doubleCoefficients in series expansion of the form A × (σ + ∑Cₓ⋅sin(…⋅σ)).private doubleCoefficients in series expansion of the form A × (σ + ∑Cₓ⋅sin(…⋅σ)).private doubleCoefficients in series expansion of the form A × (σ + ∑Cₓ⋅sin(…⋅σ)).(package private) final doubleRation between the semi-minor and semi-major axis b/a.private doubleCoefficients in series expansion of the form A × (σ + ∑Cₓ⋅sin(…⋅σ)).private doubleCoefficients in series expansion of the form A × (σ + ∑Cₓ⋅sin(…⋅σ)).private doubleCoefficients in series expansion of the form A × (σ + ∑Cₓ⋅sin(…⋅σ)).private doubleCoefficients in series expansion of the form A × (σ + ∑Cₓ⋅sin(…⋅σ)).private doubleCoefficients in series expansion of the form A × (σ + ∑Cₓ⋅sin(…⋅σ)).private doubleThe α value computed from the starting point and starting azimuth.(package private) final doubleThe square of eccentricity: ℯ² = (a²-b²)/a² where ℯ is the eccentricity, a is the semi-major axis length and b is the semi-minor axis length.private doubleEllipsoidal arc length s₁/b computed from the spherical arc length σ₁.(package private) static final doubleAccuracy threshold for iterative computations, in radians.private static final doubleDifference between ending point and antipode of starting point for considering them as nearly antipodal.private final doubleCoefficients for Rhumb line calculation from Bennett (1996) equation 2, modified with Clenshaw summation.private final doubleCoefficients for Rhumb line calculation from Bennett (1996) equation 2, modified with Clenshaw summation.private final doubleCoefficients for Rhumb line calculation from Bennett (1996) equation 2, modified with Clenshaw summation.private final doubleCoefficients for Rhumb line calculation from Bennett (1996) equation 2, modified with Clenshaw summation.(package private) final doubleThe square of the second eccentricity: ℯ′² = (a²-b²)/b².private doubleThe α value computed from the starting point and starting azimuth.(package private) static final booleanWhether to include code used for JUnit tests only.(package private) final doubleThird flattening of the ellipsoid: n = (a-b)/(a+b).private doubleThe term to be raised to powers (ε⁰, ε¹, ε², ε³, …) in series expansions.private doubleLongitude angle from the equatorial point E to starting point P₁ on the ellipsoid.Fields inherited from class org.apache.sis.referencing.GeodeticCalculator
COEFFICIENTS_FOR_START_POINT, ellipsoid, END_POINT, ENDING_AZIMUTH, GEODESIC_DISTANCE, geodesicDistance, LATITUDE_THRESHOLD, mcosα1, mcosα2, msinα1, msinα2, RHUMBLINE_LENGTH, rhumblineAzimuth, rhumblineLength, semiMajorAxis, START_POINT, STARTING_AZIMUTH, λ1, λ2, φ1, φ2 -
Constructor Summary
ConstructorsConstructorDescriptionGeodesicsOnEllipsoid(org.opengis.referencing.crs.CoordinateReferenceSystem crs, org.opengis.referencing.datum.Ellipsoid ellipsoid) Constructs a new geodetic calculator expecting coordinates in the supplied CRS. -
Method Summary
Modifier and TypeMethodDescription(package private) final voidComputes the geodesic distance and azimuths from the start point and end point.(package private) doublecomputedToGiven(double α1) Replaces a computed value by the value given in Karney table.(package private) final voidComputes the end point from the start point, the azimuth and the geodesic distance.(package private) final voidComputes rhumb line using series expansion.private doubleComputes series expansions coefficients.(package private) doubledφ_dy(double φ) Computes (∂y/∂φ)⁻¹ at the given latitude on an ellipsoid with semi-major axis length of 1.private doubleellipsoidalToSphericalAngle(double τ) Computes the spherical arc length σ from the an ellipsoidal arc length s.(package private) final StringThe operation method to use for creating a map projection.private doublem(double φ, double sinφ) Computes Bennett (1996) equation 2 modified with Clenshaw summation.private doubleLength of semi-minor axis.(package private) final voidsnapshot()Takes a snapshot of the current fields in this class.private doublesphericalToEllipsoidalAngle(double σ, boolean minusI2) Computes a term in calculation of ellipsoidal arc length s from the given spherical arc length σ.private doublesphericalToGeodeticLongitude(double ω, double σ) Computes the longitude angle λ from the equatorial point E to a point on the ellipsoid specified by the ω longitude on auxiliary sphere.(package private) voidStores the value of a local variable or a field.private voidα0(double sinα1, double cosα1, double sinβ1, double cosβ1) private static doubleμ(double x2, double y2) Computes the positive root of quartic equation for estimation of α₁ in nearly antipodal case.Methods inherited from class org.apache.sis.referencing.GeodeticCalculator
canComputeDistance, canComputeEndPoint, create, createGeodesicCircle2D, createGeodesicPath2D, createProjectionAroundStart, getConstantAzimuth, getDistanceUnit, getEndingAzimuth, getEndPoint, getGeodesicDistance, getGeographicCRS, getPositionCRS, getRhumblineLength, getStartingAzimuth, getStartPoint, isInvalid, moveToEndPoint, setEndGeographicPoint, setEndPoint, setGeodesicDistance, setStartGeographicPoint, setStartingAzimuth, setStartPoint, setValid, toString
-
Field Details
-
STORE_LOCAL_VARIABLES
static final boolean STORE_LOCAL_VARIABLESWhether to include code used for JUnit tests only. This field should be set totrueduring development and tofalsein releases.- See Also:
-
ITERATION_TOLERANCE
static final double ITERATION_TOLERANCEAccuracy threshold for iterative computations, in radians. This accuracy must be at least 8.999280057595393E-8 degrees (converted to radians) for conformance with the accuracy reported inGeodeticCalculatorclass javadoc. Actually we take a finer accuracy than above value in order to met the accuracy of numbers published in Karney (2013), but this extra accuracy is not guaranteed because it is hard to achieve in all cases.Note: when the iteration loop detects that it reached this requested accuracy, the loop completes the iteration step which was in progress. Consequently, the final accuracy is one iteration better than the accuracy computed from this value.
Maintenance
If this value is modified, the effect can be verified by executing theGeodesicsOnEllipsoidTestmethods that compare computed values against Karney's tables. TheGeodeticCalculatorjavadoc may need to be edited accordingly.- See Also:
-
NEARLY_ANTIPODAL_Δλ
private static final double NEARLY_ANTIPODAL_ΔλDifference between ending point and antipode of starting point for considering them as nearly antipodal. This is used only for finding an approximate position before to start iteration using Newton's method, so it is okay if the antipodal approximation has some inaccuracy.- See Also:
-
eccentricitySquared
final double eccentricitySquaredThe square of eccentricity: ℯ² = (a²-b²)/a² where ℯ is the eccentricity, a is the semi-major axis length and b is the semi-minor axis length. -
secondEccentricitySquared
final double secondEccentricitySquaredThe square of the second eccentricity: ℯ′² = (a²-b²)/b². -
thirdFlattening
final double thirdFlatteningThird flattening of the ellipsoid: n = (a-b)/(a+b). Not to be confused with the third eccentricity squared ℯ″² = (a²-b²)/(a²+b²) which is not used in this class. -
axisRatio
final double axisRatioRation between the semi-minor and semi-major axis b/a. This is related to flattening f = 1 - b/a. -
sinα0
private double sinα0The α value computed from the starting point and starting azimuth. We use the sine and cosine instead of the angles because those components are more frequently used than angles. Those values can be kept constant when computing many end points and end azimuths at different geodesic distances. TheGeodeticCalculator.COEFFICIENTS_FOR_START_POINTflag specifies whether those fields need to be recomputed. -
cosα0
private double cosα0The α value computed from the starting point and starting azimuth. We use the sine and cosine instead of the angles because those components are more frequently used than angles. Those values can be kept constant when computing many end points and end azimuths at different geodesic distances. TheGeodeticCalculator.COEFFICIENTS_FOR_START_POINTflag specifies whether those fields need to be recomputed. -
λ1E
private double λ1ELongitude angle from the equatorial point E to starting point P₁ on the ellipsoid. This longitude is computed from the ω₁ longitude on auxiliary sphere, which is itself computed from α₀, α₁, β₁ and ω₁ values computed from the starting point and starting azimuth. TheGeodeticCalculator.COEFFICIENTS_FOR_START_POINTflag specifies whether this field needs to be recomputed. -
I1_σ1
private double I1_σ1Ellipsoidal arc length s₁/b computed from the spherical arc length σ₁. The σ₁ value is an arc length on the auxiliary sphere between equatorial point E (the point on equator with forward direction toward azimuth α₀) and starting point P₁. This is computed by I₁(σ₁) in Karney equation 15 and is saved for reuse when the starting point and azimuth do not change. TheGeodeticCalculator.COEFFICIENTS_FOR_START_POINTflag specifies whether this field needs to be recomputed. -
ε
private double εThe term to be raised to powers (ε⁰, ε¹, ε², ε³, …) in series expansions. Defined in Karney equation 16 as ε = (√[k²+1] - 1) / (√[k²+1] + 1) where k² = ℯ′²⋅cos²α₀ (Karney 9). TheGeodeticCalculator.COEFFICIENTS_FOR_START_POINTflag specifies whether this field needs to be recomputed. -
A1
private double A1Coefficients in series expansion of the form A × (σ + ∑Cₓ⋅sin(…⋅σ)). There is 3 series expansions used in this class:- A₁ and C₁ₓ (Karney 15) are used for arc length conversions from auxiliary sphere to ellipsoid.
- A₂ and C₂ₓ (Karney 41) are used in calculation of reduced length.
- A₃ and C₃ₓ (Karney 23) are used for calculation of geodetic longitude from spherical angles.
sinα0andcosα0. Note that the C coefficients differ from the ones published by Karney because they have been combined using Clenshaw summation.All those coefficients must be recomputed when the starting point or starting azimuth change. The
GeodeticCalculator.COEFFICIENTS_FOR_START_POINTflag specifies whether those fields need to be recomputed.- See Also:
-
A2
private double A2Coefficients in series expansion of the form A × (σ + ∑Cₓ⋅sin(…⋅σ)). There is 3 series expansions used in this class:- A₁ and C₁ₓ (Karney 15) are used for arc length conversions from auxiliary sphere to ellipsoid.
- A₂ and C₂ₓ (Karney 41) are used in calculation of reduced length.
- A₃ and C₃ₓ (Karney 23) are used for calculation of geodetic longitude from spherical angles.
sinα0andcosα0. Note that the C coefficients differ from the ones published by Karney because they have been combined using Clenshaw summation.All those coefficients must be recomputed when the starting point or starting azimuth change. The
GeodeticCalculator.COEFFICIENTS_FOR_START_POINTflag specifies whether those fields need to be recomputed.- See Also:
-
A3
private double A3Coefficients in series expansion of the form A × (σ + ∑Cₓ⋅sin(…⋅σ)). There is 3 series expansions used in this class:- A₁ and C₁ₓ (Karney 15) are used for arc length conversions from auxiliary sphere to ellipsoid.
- A₂ and C₂ₓ (Karney 41) are used in calculation of reduced length.
- A₃ and C₃ₓ (Karney 23) are used for calculation of geodetic longitude from spherical angles.
sinα0andcosα0. Note that the C coefficients differ from the ones published by Karney because they have been combined using Clenshaw summation.All those coefficients must be recomputed when the starting point or starting azimuth change. The
GeodeticCalculator.COEFFICIENTS_FOR_START_POINTflag specifies whether those fields need to be recomputed.- See Also:
-
C31
private double C31Coefficients in series expansion of the form A × (σ + ∑Cₓ⋅sin(…⋅σ)). There is 3 series expansions used in this class:- A₁ and C₁ₓ (Karney 15) are used for arc length conversions from auxiliary sphere to ellipsoid.
- A₂ and C₂ₓ (Karney 41) are used in calculation of reduced length.
- A₃ and C₃ₓ (Karney 23) are used for calculation of geodetic longitude from spherical angles.
sinα0andcosα0. Note that the C coefficients differ from the ones published by Karney because they have been combined using Clenshaw summation.All those coefficients must be recomputed when the starting point or starting azimuth change. The
GeodeticCalculator.COEFFICIENTS_FOR_START_POINTflag specifies whether those fields need to be recomputed.- See Also:
-
C32
private double C32Coefficients in series expansion of the form A × (σ + ∑Cₓ⋅sin(…⋅σ)). There is 3 series expansions used in this class:- A₁ and C₁ₓ (Karney 15) are used for arc length conversions from auxiliary sphere to ellipsoid.
- A₂ and C₂ₓ (Karney 41) are used in calculation of reduced length.
- A₃ and C₃ₓ (Karney 23) are used for calculation of geodetic longitude from spherical angles.
sinα0andcosα0. Note that the C coefficients differ from the ones published by Karney because they have been combined using Clenshaw summation.All those coefficients must be recomputed when the starting point or starting azimuth change. The
GeodeticCalculator.COEFFICIENTS_FOR_START_POINTflag specifies whether those fields need to be recomputed.- See Also:
-
C33
private double C33Coefficients in series expansion of the form A × (σ + ∑Cₓ⋅sin(…⋅σ)). There is 3 series expansions used in this class:- A₁ and C₁ₓ (Karney 15) are used for arc length conversions from auxiliary sphere to ellipsoid.
- A₂ and C₂ₓ (Karney 41) are used in calculation of reduced length.
- A₃ and C₃ₓ (Karney 23) are used for calculation of geodetic longitude from spherical angles.
sinα0andcosα0. Note that the C coefficients differ from the ones published by Karney because they have been combined using Clenshaw summation.All those coefficients must be recomputed when the starting point or starting azimuth change. The
GeodeticCalculator.COEFFICIENTS_FOR_START_POINTflag specifies whether those fields need to be recomputed.- See Also:
-
C34
private double C34Coefficients in series expansion of the form A × (σ + ∑Cₓ⋅sin(…⋅σ)). There is 3 series expansions used in this class:- A₁ and C₁ₓ (Karney 15) are used for arc length conversions from auxiliary sphere to ellipsoid.
- A₂ and C₂ₓ (Karney 41) are used in calculation of reduced length.
- A₃ and C₃ₓ (Karney 23) are used for calculation of geodetic longitude from spherical angles.
sinα0andcosα0. Note that the C coefficients differ from the ones published by Karney because they have been combined using Clenshaw summation.All those coefficients must be recomputed when the starting point or starting azimuth change. The
GeodeticCalculator.COEFFICIENTS_FOR_START_POINTflag specifies whether those fields need to be recomputed.- See Also:
-
C35
private double C35Coefficients in series expansion of the form A × (σ + ∑Cₓ⋅sin(…⋅σ)). There is 3 series expansions used in this class:- A₁ and C₁ₓ (Karney 15) are used for arc length conversions from auxiliary sphere to ellipsoid.
- A₂ and C₂ₓ (Karney 41) are used in calculation of reduced length.
- A₃ and C₃ₓ (Karney 23) are used for calculation of geodetic longitude from spherical angles.
sinα0andcosα0. Note that the C coefficients differ from the ones published by Karney because they have been combined using Clenshaw summation.All those coefficients must be recomputed when the starting point or starting azimuth change. The
GeodeticCalculator.COEFFICIENTS_FOR_START_POINTflag specifies whether those fields need to be recomputed.- See Also:
-
R0
private final double R0Coefficients for Rhumb line calculation from Bennett (1996) equation 2, modified with Clenshaw summation. -
R2
private final double R2Coefficients for Rhumb line calculation from Bennett (1996) equation 2, modified with Clenshaw summation. -
R4
private final double R4Coefficients for Rhumb line calculation from Bennett (1996) equation 2, modified with Clenshaw summation. -
R6
private final double R6Coefficients for Rhumb line calculation from Bennett (1996) equation 2, modified with Clenshaw summation.
-
-
Constructor Details
-
GeodesicsOnEllipsoid
GeodesicsOnEllipsoid(org.opengis.referencing.crs.CoordinateReferenceSystem crs, org.opengis.referencing.datum.Ellipsoid ellipsoid) Constructs a new geodetic calculator expecting coordinates in the supplied CRS.- Parameters:
crs- the referencing system for thePositionarguments and return values.ellipsoid- ellipsoid associated to the geodetic component of given CRS.
-
-
Method Details
-
semiMinorAxis
private double semiMinorAxis()Length of semi-minor axis.- See Also:
-
Ellipsoid.getSemiMinorAxis()
-
computeSeriesExpansionCoefficients
private double computeSeriesExpansionCoefficients()Computes series expansions coefficients.Preconditions: The
sinα0andcosα0fields shall be set before to invoke this method. It is caller's responsibility to ensure that sin(α₀)² + cos(α₀)² ≈ 1 (this is verified in assertion).Post-conditions: this method sets the
It is caller's responsibility to invokeε,A1,A2,A3,C31,C32,C33,C34,C35fields.setValid(COEFFICIENTS_FOR_START_POINT)after it has updatedλ1EandI1_σ1.- Returns:
- k² = ℯ′²⋅cos²α₀ term (Karney 9).
-
sphericalToEllipsoidalAngle
private double sphericalToEllipsoidalAngle(double σ, boolean minusI2) Computes a term in calculation of ellipsoidal arc length s from the given spherical arc length σ. The σ value is an arc length on the auxiliary sphere between equatorial point E (the point on equator with forward direction toward azimuth α₀) and another point.If the
minusI2argument isfalse, then this method computes the ellipsoidal arc length s from the given spherical arc length σ. This value is computed by Karney's equation 7:s/b = I₁(σ)
If theminusI2argument istrue, then this method is modified for computing Karney's equation 40 instead (a term in calculation of reduced length m):J(σ) = I₁(σ) - I₂(σ)
Precondition:
computeSeriesExpansionCoefficients()must have been invoked before this method.- Parameters:
\u03c3- arc length on the auxiliary sphere since equatorial point E.minusI2- whether to subtract I₂(σ) after calculation of I₁(σ).- Returns:
- I₁(σ) if
minusI2is false, or J(σ) ifminusI2is true.
-
ellipsoidalToSphericalAngle
private double ellipsoidalToSphericalAngle(double τ) Computes the spherical arc length σ from the an ellipsoidal arc length s. This method is the converse ofsphericalToEllipsoidalAngle(double, boolean). Input is τ = s/(b⋅A₁).Precondition:
computeSeriesExpansionCoefficients()must have been invoked before this method.- Parameters:
\u03c4- arc length on the ellipsoid since equatorial point E divided byA1.- Returns:
- arc length σ on the auxiliary sphere.
- See Also:
-
sphericalToGeodeticLongitude
private double sphericalToGeodeticLongitude(double ω, double σ) Computes the longitude angle λ from the equatorial point E to a point on the ellipsoid specified by the ω longitude on auxiliary sphere.Precondition:
computeSeriesExpansionCoefficients()must have been invoked before this method.- Parameters:
\u03c9- longitude on the auxiliary sphere.\u03c3- spherical arc length from equatorial point E to point on auxiliary sphere along a geodesic with azimuth α₀ at equator.- Returns:
- geodetic longitude λ from the equatorial point E to the point.
-
α0
private void α0(double sinα1, double cosα1, double sinβ1, double cosβ1) Sets thesinα0andcosα0terms. Note that theGeodeticCalculator.msinα2field is always set to thesinα0value in this class. But those two fields may nevertheless have different values ifmsinα2has been set independently, for example byGeodeticCalculator.createGeodesicPath2D(double). -
computeEndPoint
final void computeEndPoint()Computes the end point from the start point, the azimuth and the geodesic distance. This method should be invoked if the end point or ending azimuth is requested whileGeodeticCalculator.END_POINTvalidity flag is not set.This implementation computes
GeodeticCalculator.φ2,GeodeticCalculator.λ2and azimuths using the method described in Karney (2013) Algorithms for geodesics. The coefficients of Fourier and Taylor series expansions are given by equations 15 and 17.- Overrides:
computeEndPointin classGeodeticCalculator- Throws:
IllegalStateException- if the start point, azimuth or distance has not been set.
-
computeDistance
final void computeDistance()Computes the geodesic distance and azimuths from the start point and end point. This method should be invoked if the distance or an azimuth is requested whileGeodeticCalculator.STARTING_AZIMUTH,GeodeticCalculator.ENDING_AZIMUTHorGeodeticCalculator.GEODESIC_DISTANCEvalidity flag is not set.Reminder: given P₁ the starting point and E the intersection of the geodesic with equator:
- α₁ is the azimuth (0° oriented North) of the geodesic from E to P₁.
- σ₁ is the spherical arc length (in radians) between E and P₁.
- ω₁ is the spherical longitude (in radians) on the auxiliary sphere at P₁. Spherical longitude is the angle formed by the meridian of E and the meridian of P₁.
- Overrides:
computeDistancein classGeodeticCalculator- Throws:
IllegalStateException- if the distance or azimuth has not been set.GeodeticException- if an azimuth or the distance cannot be computed.
-
μ
private static double μ(double x2, double y2) Computes the positive root of quartic equation for estimation of α₁ in nearly antipodal case. Formula is given in appendix B of C.F.F Karney (2011) given x and y the coordinates on a plane coordinate system centered on the antipodal point: The results should have only one positive root (μ > 0).Condition on y value
This method is indeterminate when y → 0 (it returnsDouble.NaN). For values too close to zero, the result may be non-significative because of rounding errors. For choosing a threshold value for y,GeodesicsOnEllipsoidTest.Calculatorcompares the value computed by this method against the value computed byMathFunctions.polynomialRoots(double...). If the values differ too much, we presume that they are mostly noise caused by a y value too low.- Parameters:
x2- the square of x.y2- the square of y.
-
dφ_dy
double dφ_dy(double φ) Computes (∂y/∂φ)⁻¹ at the given latitude on an ellipsoid with semi-major axis length of 1. This derivative is close to cos(φ) for a slightly flattened sphere.- Overrides:
dφ_dyin classGeodeticCalculator- Returns:
- the northing derivative of a Mercator projection at the given latitude on an ellipsoid with a=1.
- See Also:
-
snapshot
final void snapshot()Takes a snapshot of the current fields in this class. This is used for JUnit tests only. During development phases,STORE_LOCAL_VARIABLESshould betruefor allowingGeodesicsOnEllipsoidTestto verify the values of a large range of local variables. But when the storage of locale variables is disabled, this method allowsGeodesicsOnEllipsoidTestto still verify a few variables. -
store
Stores the value of a local variable or a field. This is used in JUnit tests only.- Parameters:
name- name of the local variable.value- value of the local variable.
-
computedToGiven
double computedToGiven(double α1) Replaces a computed value by the value given in Karney table. This is used when the result published in Karney table 4 is used as input for Karney table 5. We need to truncate the value to the same numbers of digits than Karney, otherwise computation results will differ. -
computeRhumbLine
final void computeRhumbLine()Computes rhumb line using series expansion.Source: G.G. Bennett, 1996. Practical Rhumb Line Calculations on the Spheroid. J. Navigation 49(1), 112-119.
- Overrides:
computeRhumbLinein classGeodeticCalculator- See Also:
-
m
private double m(double φ, double sinφ) Computes Bennett (1996) equation 2 modified with Clenshaw summation. -
getProjectionMethod
The operation method to use for creating a map projection. For the ellipsoidal case we use EPSG::9832. According EPSG documentation the precision is acceptable withing 800 km of projection natural origin.- Overrides:
getProjectionMethodin classGeodeticCalculator
-