public class TLcdGeodeticDatum extends Object implements ILcdGeodeticDatum, ILcdCloneable
TLcdGeodeticDatum
is described by the position,
orientation and scale relationships of its ILcdEllipsoid
to an
earth centered earth fixed ILcdEllipsoid
. In other words, this
provides sufficient information to perform a linear transformation between
the geodetic datum and the global reference geodetic system based on 11
parameters: position shifts, angular rotations, a scale, a pivot point, and a prime meridian.
The simplest transformation is a 3-parameter transformation based on the two
ILcdEllipsoid
objects and the position shifts.
A more complex transformation is the Helmert 7-parameter transformation based on the two ILcdEllipsoid
objects
and the position shifts, angular rotations and scale. The pivot is (0,0,0) in this case.
The most complex transformation is the Molodensky-Badekas 10-parameter transformation. This transformation is the same as the Helmert 7-parameter transformation, but additionally it uses a non-zero pivot point.
This class is thread-safe for read-only access, provided that any custom ILcdEllipsoid set onto the current object is also thread-safe for read-only access.
Modifier and Type | Field and Description |
---|---|
static int |
COMPLEX
A geodetic datum is complex if it is not simple and not a reference geodetic datum.
|
static int |
REFERENCE
A geodetic datum is a reference geodetic datum if it is not defined with
respect to another geodetic datum, i.e., its
ILcdEllipsoid is
considered earth centered earth fixed. |
static int |
SIMPLE
A geodetic datum is simple if only position shifts are defined for the
datum conversion.
|
static int |
TEN_PARAMETER
This is used for geodetic daumts using the Molodensky-Badekas 10-parameter transformation.
|
Constructor and Description |
---|
TLcdGeodeticDatum()
Default constructor creates a reference geodetic datum (WGS84).
|
TLcdGeodeticDatum(double aX,
double aY,
double aZ,
double aRotX,
double aRotY,
double aRotZ,
double aScale,
double aPrimeMeridian,
ILcdEllipsoid aEllipsoid,
ILcdGeodeticDatum aRefDatum,
String aName)
Definition of a local complex datum.
|
TLcdGeodeticDatum(double aX,
double aY,
double aZ,
double aRotX,
double aRotY,
double aRotZ,
double aScale,
ILcdEllipsoid aEllipsoid,
ILcdGeodeticDatum aRefDatum,
String aName)
Definition of a local complex datum.
|
TLcdGeodeticDatum(double aX,
double aY,
double aZ,
ILcdEllipsoid aEllipsoid,
ILcdGeodeticDatum aReferenceDatum,
String aName)
Definition of a local simple geodetic datum.
|
TLcdGeodeticDatum(ILcdEllipsoid aEllipsoid,
String aName)
Definition of a global geodetic datum.
|
TLcdGeodeticDatum(TLcdGeodeticDatum aGeodeticDatum)
Definition of a local complex geodetic datum.
|
Modifier and Type | Method and Description |
---|---|
Object |
clone()
Clones this
ILcdGeodeticDatum . |
void |
datum2refGeocSFCT(ILcdPoint aXYZPoint,
ILcd3DEditablePoint aXYZOut)
Conversion of geocentric datum coordinate to geocentric reference datum
coordinate.
|
void |
datum2refLLHSFCT(ILcdPoint aLLHPoint,
ILcd3DEditablePoint aLLHOut)
Conversion of geodetic datum coordinate to geodetic reference datum
coordinate.
|
boolean |
equals(Object aObject)
Checks whether the two geodetic datums are exactly equal.
|
boolean |
equals2D(Object aObject)
Checks whether the horizontal datum parts of the two geodetic datums are exactly equal.
|
void |
geoc2llhSFCT(ILcdPoint aXYZGeocPoint,
ILcd3DEditablePoint aLLHPointSFCT)
Coordinate conversion between Earth Centered, Earth Fixed XYZ Cartesian
coordinate system and latitude-longitude-height for this geodetic datum.
|
ILcdEllipsoid |
getEllipsoid()
Returns the
ILcdEllipsoid of the subject geodetic datum. |
double |
getHeight(double aLon,
double aLat)
Returns the height of the vertical datum of this
ILcdGeodeticDatum
for the specified geodetic coordinates. |
String |
getName()
Gets the name of this
ILcdGeodeticDatum . |
double |
getPivotX()
Returns the x component of the pivot point
|
double |
getPivotY()
Returns the y component of the pivot point
|
double |
getPivotZ()
Returns the z component of the pivot point
|
double |
getPrimeMeridian()
Returns the prime meridian in degrees longitude.
|
ILcdGeodeticDatum |
getRefDatum()
Gets the reference geodetic datum.
|
double |
getRotX()
X rotation in radians (positive counterclockwise) with respect to reference
ILcdEllipsoid cartesian coordinate system. |
double |
getRotY()
Y rotation in radians (positive counterclockwise) with respect to reference
ILcdEllipsoid cartesian coordinate system. |
double |
getRotZ()
Z rotation in radians (positive counterclockwise) with respect to reference
ILcdEllipsoid cartesian coordinate system. |
double |
getScale()
Scale factor.
|
int |
getType()
Gives an indication of the complexity of computations when transforming to/from the
reference geodetic datum.
|
Optional<String> |
getVerticalDatumName()
Returns a vertical datum name, if this geodetic datum defines one.
|
double |
getX()
X coordinate of
ILcdEllipsoid origin with respect to reference
ILcdEllipsoid cartesian coordinate system. |
double |
getY()
Y coordinate of
ILcdEllipsoid origin with respect to reference
ILcdEllipsoid cartesian coordinate system. |
double |
getZ()
Z coordinate of
ILcdEllipsoid origin with respect to reference
ILcdEllipsoid cartesian coordinate system. |
int |
hashCode() |
boolean |
hasNonZeroHeights()
Returns whether the method
getHeight returns non zero height values. |
void |
initialize(double aX,
double aY,
double aZ,
double aRotX,
double aRotY,
double aRotZ,
double aScale,
double aPrimeMeridian,
ILcdEllipsoid aEllipsoid,
ILcdGeodeticDatum aRefDatum,
String aName)
Definition of a local complex geodetic datum.
|
void |
initialize(double aX,
double aY,
double aZ,
double aRotX,
double aRotY,
double aRotZ,
double aScale,
ILcdEllipsoid aEllipsoid,
ILcdGeodeticDatum aRefDatum,
String aName)
Deprecated.
use the method with 8 parameters, containing the prime meridian.
|
void |
llh2geocSFCT(ILcdPoint aLLHPoint,
ILcd3DEditablePoint aXYZGeocPointSFCT)
Coordinate conversion between latitude-longitude-height for this geodetic
datum and Earth Centered, Earth Fixed XYZ Cartesian coordinate system.
|
void |
ref2datumGeocSFCT(ILcdPoint aXYZPoint,
ILcd3DEditablePoint aXYZOut)
Conversion of geocentric reference datum coordinate to geocentric datum
coordinate.
|
void |
ref2datumLLHSFCT(ILcdPoint aLLHPoint,
ILcd3DEditablePoint aLLHOut)
Conversion of geodetic reference datum coordinate to geodetic datum
coordinate.
|
void |
setEllipsoid(ILcdEllipsoid aEllipsoid)
Sets the
ILcdEllipsoid of the subject geodetic datum. |
void |
setName(String aName)
Sets the name of this
ILcdGeodeticDatum . |
void |
setPivotX(double aPivotX)
Sets the x component of the pivot point that is used for the Molodensky-Badekas 10-parameter transformation.
|
void |
setPivotY(double aPivotY)
Sets the y component of the pivot point that is used for the Molodensky-Badekas 10-parameter transformation.
|
void |
setPivotZ(double aPivotZ)
Sets the z component of the pivot point that is used for the Molodensky-Badekas 10-parameter transformation.
|
void |
setPrimeMeridian(double aPrimeMeridian)
Sets the prime meridian in degrees longitude of this geodetic datum.
|
void |
setRefDatum(ILcdGeodeticDatum aRefDatum)
Sets the reference geodetic datum.
|
void |
setRotX(double aRotX)
Sets the X rotation in radians (positive counterclockwise) with respect to reference
ILcdEllipsoid cartesian coordinate system. |
void |
setRotY(double aRotY)
Sets the Y rotation in radians (positive counterclockwise) with respect to reference
ILcdEllipsoid cartesian coordinate system. |
void |
setRotZ(double aRotZ)
Sets the Z rotation in radians (positive counterclockwise) with respect to reference
ILcdEllipsoid cartesian coordinate system. |
void |
setScale(double aScale)
Sets the scale factor.
|
void |
setX(double aX)
Sets the X coordinate of
ILcdEllipsoid origin with respect to reference
ILcdEllipsoid cartesian coordinate system. |
void |
setY(double aY)
Sets the Y coordinate of
ILcdEllipsoid origin with respect to reference
ILcdEllipsoid cartesian coordinate system. |
void |
setZ(double aZ)
Sets the Z coordinate of
ILcdEllipsoid origin with respect to reference
ILcdEllipsoid cartesian coordinate system. |
String |
toString()
Returns a String representation of this
ILcdGeodeticDatum . |
public static final int REFERENCE
ILcdEllipsoid
is
considered earth centered earth fixed.
A reference geodetic datum has no translation, no rotation, scale equal to 1.0 and a prime meridian equal to 0.0.public static final int SIMPLE
public static final int COMPLEX
public static final int TEN_PARAMETER
public TLcdGeodeticDatum()
public TLcdGeodeticDatum(ILcdEllipsoid aEllipsoid, String aName)
aEllipsoid
- ellipsoid of the global geodetic datum.aName
- name of the global geodetic datum.public TLcdGeodeticDatum(double aX, double aY, double aZ, ILcdEllipsoid aEllipsoid, ILcdGeodeticDatum aReferenceDatum, String aName)
aX
- x-axis position shift w.r.t. reference datum.aY
- y-axis position shift w.r.t. reference datum.aZ
- z-axis position shift w.r.t. reference datum.aEllipsoid
- ellipsoid of the geodetic datum.aReferenceDatum
- reference geodetic datum.aName
- name of this geodetic datum.public TLcdGeodeticDatum(TLcdGeodeticDatum aGeodeticDatum)
aGeodeticDatum
- geodetic datum to clone.public TLcdGeodeticDatum(double aX, double aY, double aZ, double aRotX, double aRotY, double aRotZ, double aScale, ILcdEllipsoid aEllipsoid, ILcdGeodeticDatum aRefDatum, String aName)
aX
- x-axis position shift w.r.t. reference datum.aY
- y-axis position shift w.r.t. reference datum.aZ
- z-axis position shift w.r.t. reference datum.aRotX
- rotation around x-axis.aRotY
- rotation around y-axis.aRotZ
- rotation around z-axis.aScale
- scale factor.aEllipsoid
- ellipsoid of this geodetic datum.aRefDatum
- reference geodetic datum.aName
- name for this geodetic datum.getX()
,
getY()
,
getZ()
,
getRotX()
,
getRotY()
,
getRotZ()
,
getScale()
public TLcdGeodeticDatum(double aX, double aY, double aZ, double aRotX, double aRotY, double aRotZ, double aScale, double aPrimeMeridian, ILcdEllipsoid aEllipsoid, ILcdGeodeticDatum aRefDatum, String aName)
aX
- x-axis position shift w.r.t. reference datum.aY
- y-axis position shift w.r.t. reference datum.aZ
- z-axis position shift w.r.t. reference datum.aRotX
- rotation around x-axis.aRotY
- rotation around y-axis.aRotZ
- rotation around z-axis.aScale
- scale factor.aPrimeMeridian
- prime meridian.aEllipsoid
- ellipsoid of this geodetic datum.aRefDatum
- reference geodetic datum.aName
- name for this geodetic datum.getX()
,
getY()
,
getZ()
,
getRotX()
,
getRotY()
,
getRotZ()
,
getScale()
public void setX(double aX)
ILcdEllipsoid
origin with respect to reference
ILcdEllipsoid
cartesian coordinate system.aX
- the X coordinate of ILcdEllipsoid
origin with respect to reference
ILcdEllipsoid
cartesian coordinate system.getX()
public double getX()
ILcdEllipsoid
origin with respect to reference
ILcdEllipsoid
cartesian coordinate system.setX(double)
public void setY(double aY)
ILcdEllipsoid
origin with respect to reference
ILcdEllipsoid
cartesian coordinate system.aY
- the Y coordinate of ILcdEllipsoid
origin with respect to reference
ILcdEllipsoid
cartesian coordinate system.getY()
public double getY()
ILcdEllipsoid
origin with respect to reference
ILcdEllipsoid
cartesian coordinate system.setY(double)
public void setZ(double aZ)
ILcdEllipsoid
origin with respect to reference
ILcdEllipsoid
cartesian coordinate system.aZ
- the Z coordinate of ILcdEllipsoid
origin with respect to reference
ILcdEllipsoid
cartesian coordinate system.getZ()
public double getZ()
ILcdEllipsoid
origin with respect to reference
ILcdEllipsoid
cartesian coordinate system.setZ(double)
public void setRotX(double aRotX)
ILcdEllipsoid
cartesian coordinate system.aRotX
- the X rotation in radians (positive counterclockwise) with respect to reference
ILcdEllipsoid
cartesian coordinate system.getRotX()
public double getRotX()
ILcdEllipsoid
cartesian coordinate system.setRotX(double)
public void setRotY(double aRotY)
ILcdEllipsoid
cartesian coordinate system.aRotY
- the Y rotation in radians (positive counterclockwise) with respect to reference
ILcdEllipsoid
cartesian coordinate system.getRotY()
public double getRotY()
ILcdEllipsoid
cartesian coordinate system.setRotY(double)
public void setRotZ(double aRotZ)
ILcdEllipsoid
cartesian coordinate system.aRotZ
- the Z rotation in radians (positive counterclockwise) with respect to reference
ILcdEllipsoid
cartesian coordinate system.getRotZ()
public double getRotZ()
ILcdEllipsoid
cartesian coordinate system.setRotZ(double)
public void setScale(double aScale)
aScale
- the scale factor.getScale()
public double getScale()
setScale(double)
public void setPivotX(double aPivotX)
aPivotX
- the x component of the pivot pointpublic double getPivotX()
setPivotX(double)
public void setPivotY(double aPivotY)
aPivotY
- the y component of the pivot pointpublic double getPivotY()
setPivotY(double)
public void setPivotZ(double aPivotZ)
aPivotZ
- the z component of the pivot pointpublic double getPivotZ()
setPivotZ(double)
public void setEllipsoid(ILcdEllipsoid aEllipsoid)
ILcdEllipsoid
of the subject geodetic datum.aEllipsoid
- the ILcdEllipsoid
of the subject geodetic datum.getEllipsoid()
public ILcdEllipsoid getEllipsoid()
ILcdEllipsoid
of the subject geodetic datum.getEllipsoid
in interface ILcdGeodeticDatum
ILcdEllipsoid
of the subject geodetic datum.setEllipsoid(com.luciad.geodesy.ILcdEllipsoid)
public void setRefDatum(ILcdGeodeticDatum aRefDatum)
aRefDatum
- the reference geodetic datum.getRefDatum()
public ILcdGeodeticDatum getRefDatum()
setRefDatum(com.luciad.geodesy.ILcdGeodeticDatum)
public int getType()
public double getPrimeMeridian()
setPrimeMeridian(double)
public void setPrimeMeridian(double aPrimeMeridian)
aPrimeMeridian
- the prime meridian of the geodetic datum.getPrimeMeridian()
public void setName(String aName)
ILcdGeodeticDatum
.aName
- The new name value.getName()
public String getName()
ILcdGeodeticDatum
.getName
in interface ILcdGeodeticDatum
ILcdGeodeticDatum
.setName(java.lang.String)
public void initialize(double aX, double aY, double aZ, double aRotX, double aRotY, double aRotZ, double aScale, ILcdEllipsoid aEllipsoid, ILcdGeodeticDatum aRefDatum, String aName)
aX
- x-axis position shift w.r.t. reference datum.aY
- y-axis position shift w.r.t. reference datum.aZ
- z-axis position shift w.r.t. reference datum.aRotX
- rotation around x-axis.aRotY
- rotation around y-axis.aRotZ
- rotation around z-axis.aScale
- scale factor.aEllipsoid
- ellipsoid of this geodetic datum.aRefDatum
- reference geodetic datum.aName
- name for this geodetic datum.getX()
,
getY()
,
getZ()
,
getRotX()
,
getRotY()
,
getRotZ()
,
getScale()
public void initialize(double aX, double aY, double aZ, double aRotX, double aRotY, double aRotZ, double aScale, double aPrimeMeridian, ILcdEllipsoid aEllipsoid, ILcdGeodeticDatum aRefDatum, String aName)
aX
- x-axis position shift w.r.t. reference datum.aY
- y-axis position shift w.r.t. reference datum.aZ
- z-axis position shift w.r.t. reference datum.aRotX
- rotation around x-axis.aRotY
- rotation around y-axis.aRotZ
- rotation around z-axis.aScale
- scale factor.aPrimeMeridian
- the prime meridian of the geodetic datum.aEllipsoid
- ellipsoid of this geodetic datum.aRefDatum
- reference geodetic datum.aName
- name for this geodetic datum.getX()
,
getY()
,
getZ()
,
getRotX()
,
getRotY()
,
getRotZ()
,
getScale()
public void datum2refGeocSFCT(ILcdPoint aXYZPoint, ILcd3DEditablePoint aXYZOut)
datum2refGeocSFCT
in interface ILcdGeodeticDatum
aXYZPoint
- geocentric datum coordinate.aXYZOut
- geocentric reference datum coordinate as side effect.public void ref2datumGeocSFCT(ILcdPoint aXYZPoint, ILcd3DEditablePoint aXYZOut)
ref2datumGeocSFCT
in interface ILcdGeodeticDatum
aXYZPoint
- geocentric reference datum coordinate.aXYZOut
- geocentric datum coordinate as side effect.public void datum2refLLHSFCT(ILcdPoint aLLHPoint, ILcd3DEditablePoint aLLHOut)
datum2refLLHSFCT
in interface ILcdGeodeticDatum
aLLHPoint
- geodetic datum coordinate.aLLHOut
- geodetic reference datum coordinate as side effect.public void ref2datumLLHSFCT(ILcdPoint aLLHPoint, ILcd3DEditablePoint aLLHOut)
ref2datumLLHSFCT
in interface ILcdGeodeticDatum
aLLHPoint
- geodetic reference datum coordinate.aLLHOut
- geodetic datum coordinate as side effect.public void geoc2llhSFCT(ILcdPoint aXYZGeocPoint, ILcd3DEditablePoint aLLHPointSFCT)
ILcdGeodeticDatum
geoc2llhSFCT
in interface ILcdGeodeticDatum
aXYZGeocPoint
- geocentric 3D point.aLLHPointSFCT
- lonLatHeight coordinates to be set.public void llh2geocSFCT(ILcdPoint aLLHPoint, ILcd3DEditablePoint aXYZGeocPointSFCT)
ILcdGeodeticDatum
llh2geocSFCT
in interface ILcdGeodeticDatum
aLLHPoint
- lonLatHeight point.aXYZGeocPointSFCT
- Geocentric coordinates to be set.public String toString()
ILcdGeodeticDatum
.public boolean equals(Object aObject)
equals
in interface ILcdGeodeticDatum
equals
in class Object
aObject
- the object for equalityTLcdGeodeticDatum
and is exactly equal to this geodetic datum.public boolean equals2D(Object aObject)
equals2D
in interface ILcdGeodeticDatum
aObject
- the object for equalityTLcdGeodeticDatum
and its horizontal datum part is exactly equal to this object's horizontal datum.public Object clone()
ILcdGeodeticDatum
.clone
in interface ILcdGeodeticDatum
clone
in interface ILcdCloneable
clone
in class Object
ILcdGeodeticDatum
.Object.clone()
public boolean hasNonZeroHeights()
ILcdGeodeticDatum
getHeight
returns non zero height values.
The method getHeight
will always return 0
, if this method
returns false
hasNonZeroHeights
in interface ILcdGeodeticDatum
getHeight
returns non zero height
values, false otherwise.public Optional<String> getVerticalDatumName()
ILcdGeodeticDatum
getVerticalDatumName
in interface ILcdGeodeticDatum
Optional
if no vertical datum is present.public double getHeight(double aLon, double aLat)
ILcdGeodeticDatum
for the specified geodetic coordinates. These heights are expressed in meters with
respect to the ellipsoid of this ILcdGeodeticDatum
.
Note that, if the geodetic coordinates lie outside the bounds of
this instance, Double.NaN
will be returned.
getHeight
in interface ILcdGeodeticDatum
aLon
- the longitude coordinate.aLat
- the latitude coordinate.ILcdGeodeticDatum
for the specified geodetic coordinates.