# Kinematic datum shifting utilizing a deformation model¶

New in version 5.0.0.

Perform datum shifts means of a deformation/velocity model.

 Alias deformation Input type Cartesian coordinates (spatial), decimalyears (temporal). Output type Cartesian coordinates (spatial), decimalyears (temporal). Domain 4D Input type Geodetic coordinates Output type Geodetic coordinates

The deformation operation is used to adjust coordinates for intraplate deformations. Usually the transformation parameters for regional plate-fixed reference frames such as the ETRS89 does not take intraplate deformation into account. It is assumed that tectonic plate of the region is rigid. Often times this is true, but near the plate boundary and in areas with post-glacial uplift the assumption breaks. Intraplate deformations can be modelled and then applied to the coordinates so that they represent the physical world better. In PROJ this is done with the deformation operation.

Starting with PROJ 7.0, it is recommended to store both the horizontal and vertical velocities in a single GeoTIFF file (Geodetic TIFF grids (GTG)). Grid values are expected to be in units of mm/year. Using GDAL for construction of new grids is recommended. Prior to PROJ 7.0, the horizontal grid used to be stored in CTable2 format and the vertical grid in the GTX format. Both grids GDAL both reads and writes both file formats.

More complex deformations can be done with the Multi-component time-based deformation model transformation.

## Example¶

In coordinate transformation including a deformation model is described. The paper describes how coordinates from the global ITRFxx frames are transformed to the local Nordic realisations of ETRS89. Scandinavia is an area with significant post-glacial rebound. The deformations from the post-glacial uplift is not accounted for in the official ETRS89 transformations so in order to get accurate transformations in the Nordic countries it is necessary to apply the deformation model. The transformation from ITRF2008 to the Danish realisation of ETRS89 is in PROJ described as:

proj =  pipeline ellps = GRS80
# ITRF2008@t_obs -> ITRF2000@t_obs
step    init = ITRF2008:ITRF2000
# ITRF2000@t_obs -> ETRF2000@t_obs
step    proj=helmert t_epoch = 2000.0 convention=position_vector
x =  0.054  rx =  0.000891 drx =  8.1e-05
y =  0.051  ry =  0.00539  dry =  0.00049
z = -0.048  rz = -0.008712 drz = -0.000792
# ETRF2000@t_obs -> NKG_ETRF00@2000.0
step    proj = deformation t_epoch = 2000.0
grids = ./eur_nkg_nkgrf03vel_realigned.tif
inv
# NKG_ETRF@2000.0 -> ETRF92@2000.0
step    proj=helmert convention=position_vector s = -0.009420e
x = 0.03863 rx = 0.00617753
y = 0.147   ry = 5.064e-05
z = 0.02776 rz = 4.729e-05
# ETRF92@2000.0 -> ETRF92@1994.704
step    proj = deformation dt = -5.296
grids = ./eur_nkg_nkgrf03vel_realigned.tif

From this we can see that the transformation from ITRF2008 to the Danish realisation of ETRS89 is a combination of Helmert transformations and adjustments with a deformation model. The first use of the deformation operation is:

proj = deformation t_epoch = 2000.0 grids = ./eur_nkg_nkgrf03vel_realigned.tif

Here we set the central epoch of the transformation, 2000.0. The observation epoch is expected as part of the input coordinate tuple. The deformation model is described by a single grid, specified with +grids.

## Parameters¶

+grids=<list>

New in version 7.0.0.

Comma-separated list of grids to load. If a grid is prefixed by an @ the grid is considered optional and PROJ will the not complain if the grid is not available.

Grids should be in GeoTIFF format (Geodetic TIFF grids (GTG)) with the first 3 components being respectively the easting, northing and up velocities in mm/year. Setting the Description and Unit Type GDAL band metadata items is strongly recommended, so that gdalinfo reports:

Band 1 Block=... Type=Float32, ColorInterp=Gray
Description = east_velocity
Unit Type: mm/year
Band 2 Block=... Type=Float32, ColorInterp=Undefined
Description = north_velocity
Unit Type: mm/year
Band 3 Block=... Type=Float32, ColorInterp=Undefined
Description = up_velocity
Unit Type: mm/year

Note

+grids is mutually exclusive with +xy_grids and +z_grids

+t_epoch=<value>

Central epoch of transformation given in decimalyears. Will be used in conjunction with the observation time from the input coordinate to determine $$dt$$ as used in eq. (1) below.

Note

+t_epoch is mutually exclusive with +dt

+dt=<value>

New in version 6.0.0.

$$dt$$ as used in eq. (1) below. Is useful when no observation time is available in the input coordinate or when a deformation for a specific timespan needs to be applied in a transformation. $$dt$$ is given in units of decimalyears.

Note

+dt is mutually exclusive with +t_epoch

+xy_grids=<list>

Deprecated since version 7.0.

Comma-separated list of grids to load. If a grid is prefixed by an @ the grid is considered optional and PROJ will the not complain if the grid is not available.

Grids for the horizontal component of a deformation model is expected to be in CTable2 format.

Note

+xy_grids is mutually exclusive with +grids

+z_grids=<list>

Deprecated since version 7.0.

Comma-separated list of grids to load. If a grid is prefixed by an @ the grid is considered optional and PROJ will the not complain if the grid is not available.

Grids for the vertical component of a deformation model is expected to be in either GTX format.

Note

+z_grids is mutually exclusive with +grids

## Mathematical description¶

Mathematically speaking, application of a deformation model is simple. The deformation model is represented as a grid of velocities in three dimensions. Coordinate corrections are applied in cartesian space. For a given coordinate, $$(X, Y, Z)$$, velocities $$(V_X, V_Y, V_Z)$$ can be interpolated from the gridded model. The time span between $$t_{obs}$$ and $$t_c$$ determine the magnitude of the coordinate correction as seen in eq. (1) below.

(1)\begin{split}\begin{align} \begin{pmatrix} X \\ Y \\ Z \\ \end{pmatrix}_B = \begin{pmatrix} X \\ Y \\ Z \\ \end{pmatrix}_A + (t_{obs} - t_c) \begin{pmatrix} V_X \\ V_Y \\ V_Z \\ \end{pmatrix} \end{align}\end{split}

Corrections are done in cartesian space.

Coordinates of the gridded model are in ENU (east, north, up) space because it would otherwise require an enormous 3 dimensional grid to handle the corrections in cartesian space. Keeping the correction in lat/long space reduces the complexity of the grid significantly. Consequently though, the input coordinates needs to be converted to lat/long space when searching for corrections in the grid. This is done with the cart operation. The converted grid corrections can then be applied to the input coordinates in cartesian space. The conversion from ENU space to cartesian space is done in the following way:

(2)\begin{split}\begin{align} \begin{pmatrix} X \\ Y \\ Z \\ \end{pmatrix} = \begin{pmatrix} -\sin\phi \cos\lambda N - \sin\lambda E + \cos\phi \cos\lambda U \\ -\sin\phi \sin\lambda N + \sin\lambda E + \cos\phi \sin\lambda U \\ \cos\phi N + \sin\phi U \\ \end{pmatrix} \end{align}\end{split}

where $$\phi$$ and $$\lambda$$ are the latitude and longitude of the coordinate that is searched for in the grid. $$(E, N, U)$$ are the grid values in ENU-space and $$(X, Y, Z)$$ are the corrections converted to cartesian space.