Class InterpolatedMolodenskyTransform

  • All Implemented Interfaces:
    Serializable, Parameterized, Lenient­Comparable, Math­Transform

    public class InterpolatedMolodenskyTransform
    extends DatumShiftTransform
    Transforms between two geographic CRS by performing geocentric translations interpolated from a grid file, but using Molodensky approximation. This transformation is conceptually defined as a translation in geocentric coordinates as performed by Interpolated­Geocentric­Transform, but uses the Molodensy (non-abridged) approximation for performance reasons. Errors are less than 3 centimetres for the "France geocentric interpolation" (ESPG:9655). By comparison, the finest accuracy reported in the grid file for France is 5 centimetres.
    Algorithm
    This class transforms two- or three- dimensional coordinates from a geographic CRS to another geographic CRS. The changes between source and target coordinates are small (usually less than 400 metres), but vary for every position. Those changes are provided in a datum shift grid, usually loaded from one or two files.

    Many datum shift grids like NADCON and NTv2 apply the interpolated translations directly on geographic coordinates. This relatively simple case is handled by Interpolated­Transform. But in the Interpolated­Molodensky­Transform case, the interpolated translations are rather the (tX, tY, tZ) parameters of a Molodensky transformation.

    Since:
    0.7
    See Also:
    Interpolated­Geocentric­Transform, Serialized Form

    Defined in the sis-referencing module

    • Field Detail

      • tX

        protected final double tX
        Shift along the geocentric X axis (toward prime meridian) in units of the semi-major axis of the source ellipsoid.
        See Also:
        Bursa­Wolf­Parameters​.t­X
      • tY

        protected final double tY
        Shift along the geocentric Y axis (toward 90°E) in units of the semi-major axis of the source ellipsoid.
        See Also:
        Bursa­Wolf­Parameters​.t­Y
      • tZ

        protected final double tZ
        Shift along the geocentric Z axis (toward north pole) in units of the semi-major axis of the source ellipsoid.
        See Also:
        Bursa­Wolf­Parameters​.t­Z
      • semiMajor

        protected final double semiMajor
        Semi-major axis length (a) of the source ellipsoid.
      • eccentricitySquared

        protected final double eccentricitySquared
        The square of eccentricity of the source ellipsoid. This can be computed by ℯ² = (a²-b²)/a² where a is the semi-major axis length and b is the semi-minor axis length.
        See Also:
        Default­Ellipsoid​.get­Eccentricity­Squared()
    • Constructor Detail

      • InterpolatedMolodenskyTransform

        protected InterpolatedMolodenskyTransform​(Ellipsoid source,
                                                  boolean isSource3D,
                                                  Ellipsoid target,
                                                  boolean isTarget3D,
                                                  DatumShiftGrid<Angle,​Length> grid)
        Creates a transform from the specified parameters. This Interpolated­Molodensky­Transform class expects coordinate values in the following order and units:
        1. longitudes in radians relative to the prime meridian (usually Greenwich),
        2. latitudes in radians,
        3. optionally heights above the ellipsoid, in same units than the source ellipsoid axes.
        For converting geographic coordinates in degrees, Interpolated­Molodensky­Transform instances need to be concatenated with the following affine transforms:
        • Normalization before Interpolated­Molodensky­Transform:
          • Conversion of (λ,φ) from degrees to radians.
        • Denormalization after Interpolated­Molodensky­Transform:
          • Conversion of (λ,φ) from radians to degrees.
        After Interpolated­Molodensky­Transform construction, the full conversion chain including the above affine transforms can be created by Datum­Shift­Transform​.get­Contextual­Parameters().complete­Transform(factory, this)}.
        Parameters:
        source - the source ellipsoid.
        is­Source3D - true if the source coordinates have a height.
        target - the target ellipsoid.
        is­Target3D - true if the target coordinates have a height.
        grid - the grid of datum shifts from source to target datum. The Datum­Shift­Grid​.interpolate­In­Cell(…) method shall compute (ΔX, ΔY, ΔZ) translations from source to target in the unit of source ellipsoid axes.
        See Also:
        create­Geodetic­Transformation(Math­Transform­Factory, Ellipsoid, boolean, Ellipsoid, boolean, Datum­Shift­Grid)