aboutsummaryrefslogtreecommitdiff
path: root/docs/source
diff options
context:
space:
mode:
authorKristian Evers <kristianevers@gmail.com>2020-12-13 15:30:47 +0100
committerKristian Evers <kristianevers@gmail.com>2020-12-13 15:30:47 +0100
commitc3efbd23a5bf26f1dfd5bc55ae3488d5665ace98 (patch)
treea204df79f7057d7d420bf7c5358791347617b9cd /docs/source
parent126445148d3b742c7f4e31f5f65857be59c48340 (diff)
parent6857d1a4a8eb6fcb7b88b0339413913ba2c3351a (diff)
downloadPROJ-c3efbd23a5bf26f1dfd5bc55ae3488d5665ace98.tar.gz
PROJ-c3efbd23a5bf26f1dfd5bc55ae3488d5665ace98.zip
Merge remote-tracking branch 'osgeo/master'
Diffstat (limited to 'docs/source')
-rw-r--r--docs/source/apps/cct.rst50
-rw-r--r--docs/source/apps/cs2cs.rst46
-rw-r--r--docs/source/apps/projinfo.rst14
-rw-r--r--docs/source/development/index.rst5
-rw-r--r--docs/source/development/reference/deprecated.rst270
-rw-r--r--docs/source/development/reference/functions.rst18
-rw-r--r--docs/source/development/reference/index.rst1
-rw-r--r--docs/source/news.rst156
-rw-r--r--docs/source/operations/conversions/images/ECEF_ENU_Longitude_Latitude_relationships.pngbin0 -> 30731 bytes
-rw-r--r--docs/source/operations/conversions/images/ECEF_ENU_Longitude_Latitude_relationships.svg348
-rw-r--r--docs/source/operations/conversions/index.rst1
-rw-r--r--docs/source/operations/conversions/topocentric.rst115
-rw-r--r--docs/source/operations/projections/isea.rst6
-rw-r--r--docs/source/operations/projections/merc.rst30
-rw-r--r--docs/source/operations/projections/utm.rst2
15 files changed, 697 insertions, 365 deletions
diff --git a/docs/source/apps/cct.rst b/docs/source/apps/cct.rst
index 1d2aef20..b8504b8d 100644
--- a/docs/source/apps/cct.rst
+++ b/docs/source/apps/cct.rst
@@ -15,6 +15,42 @@ Synopsis
**cct** [**-cIostvz** [args]] *+opt[=arg]* ... file ...
+or
+
+ **cct** [**-cIostvz** [args]] {object_definition} file ...
+
+Where {object_definition} is one of the possibilities accepted
+by :c:func:`proj_create`, provided it expresses a coordinate operation
+
+ - a proj-string,
+ - a WKT string,
+ - an object code (like "EPSG:1671" "urn:ogc:def:coordinateOperation:EPSG::1671"),
+ - an object name. e.g "ITRF2014 to ETRF2014 (1)". In that case as
+ uniqueness is not guaranteed, heuristics are applied to determine the appropriate best match.
+ - a OGC URN combining references for concatenated operations
+ (e.g. "urn:ogc:def:coordinateOperation,coordinateOperation:EPSG::3895,coordinateOperation:EPSG::1618")
+ - a PROJJSON string. The jsonschema is at https://proj.org/schemas/v0.2/projjson.schema.json
+
+ .. versionadded:: 8.0.0
+
+ .. note::
+
+ Before version 8.0.0 only proj-strings could be used to instantiate
+ operations in :program:`cct`.
+
+
+or
+
+ **cct** [**-cIostvz** [args]] {object_reference} file ...
+
+where {object_reference} is a filename preceded by the '@' character. The
+file referenced by the {object_reference} must contain a valid
+{object_definition}.
+
+ .. versionadded:: 8.0.0
+
+
+
Description
***********
@@ -158,6 +194,20 @@ Should give results comparable to the classic :program:`proj` command
$ echo 12 56 100 2018.0 auxiliary data | cct +proj=merc
1335833.8895 7522963.2411 100.0000 2018.0000 auxiliary data
+7. Coordinate operation referenced through its code
+
+.. code-block:: console
+
+ $ echo 3541657.3778 948984.2343 5201383.5231 2020.5 | cct EPSG:8366
+ 3541657.9112 948983.7503 5201383.2482 2020.5000
+
+8. Coordinate operation referenced through its name
+
+.. code-block:: console
+
+ $ echo 3541657.3778 948984.2343 5201383.5231 2020.5 | cct "ITRF2014 to ETRF2014 (1)"
+ 3541657.9112 948983.7503 5201383.2482 2020.5000
+
Background
**********
diff --git a/docs/source/apps/cs2cs.rst b/docs/source/apps/cs2cs.rst
index e214a5c0..7df8890f 100644
--- a/docs/source/apps/cs2cs.rst
+++ b/docs/source/apps/cs2cs.rst
@@ -11,11 +11,11 @@ cs2cs
Synopsis
********
- **cs2cs** [**-eEfIlrstvwW** [args]] [*+opt[=arg]* ...] [+to *+opt[=arg]* ...] file ...
-
-or
-
- **cs2cs** [**-eEfIlrstvwW** [args]] {source_crs} {target_crs} file ...
+ | **cs2cs** [**-eEfIlrstvwW** [args]]
+ | [[--area <name_or_code>] | [--bbox <west_long,south_lat,east_long,north_lat>]]
+ | [--authority <name>]
+ | ([*+opt[=arg]* ...] [+to *+opt[=arg]* ...] | {source_crs} {target_crs})
+ | file ...
where {source_crs} or {target_crs} is one of the possibilities accepted
by :c:func:`proj_create`, provided it expresses a CRS
@@ -144,6 +144,42 @@ The following control parameters can appear in any order:
Causes a listing of cartographic control parameters tested for and used by
the program to be printed prior to input data.
+.. option:: --area <name_or_code>
+
+ .. versionadded:: 8.0.0
+
+ Specify an area of interest to restrict the results when researching
+ coordinate operations between 2 CRS. The area of interest can be specified either
+ as a name (e.g "Denmark - onshore") or a AUTHORITY:CODE (EPSG:3237)
+
+ This option is mutually exclusive with :option:`--bbox`.
+
+.. option:: --bbox <west_long,south_lat,east_long,north_lat>
+
+ .. versionadded:: 8.0.0
+
+ Specify an area of interest to restrict the results when researching
+ coordinate operations between 2 CRS. The area of interest is specified as a
+ bounding box with geographic coordinates, expressed in degrees in a
+ unspecified geographic CRS.
+ `west_long` and `east_long` should be in the [-180,180] range, and
+ `south_lat` and `north_lat` in the [-90,90]. `west_long` is generally lower than
+ `east_long`, except in the case where the area of interest crosses the antimeridian.
+
+.. option:: --authority <name>
+
+ .. versionadded:: 8.0.0
+
+ This option can be used to restrict the authority of coordinate operations
+ looked up in the database. When not specified, coordinate
+ operations from any authority will be searched, with the restrictions set
+ in the ``authority_to_authority_preference`` database table related to the authority
+ of the source/target CRS themselves.
+ If authority is set to ``any``, then coordinate operations from any authority will be searched
+ If authority is a non-empty string different of ``any``, then coordinate operations
+ will be searched only in that authority namespace (e.g ``EPSG``).
+
+ This option is mutually exclusive with :option:`--bbox`.
.. only:: man
diff --git a/docs/source/apps/projinfo.rst b/docs/source/apps/projinfo.rst
index 05184ef9..803c0a65 100644
--- a/docs/source/apps/projinfo.rst
+++ b/docs/source/apps/projinfo.rst
@@ -16,13 +16,14 @@ Synopsis
********
| **projinfo**
- | [-o formats] [-k crs|operation|datum|ellipsoid] [--summary] [-q]
+ | [-o formats] [-k crs|operation|datum|ensemble|ellipsoid] [--summary] [-q]
| [[--area name_or_code] | [--bbox west_long,south_lat,east_long,north_lat]]
| [--spatial-test contains|intersects]
| [--crs-extent-use none|both|intersection|smallest]
| [--grid-check none|discard_missing|sort|known_available]
| [--pivot-crs always|if_no_direct_transformation|never|{auth:code[,auth:code]*}]
| [--show-superseded] [--hide-ballpark]
+ | [--allow-ellipsoidal-height-as-vertical-crs]
| [--boundcrs-to-wgs84]
| [--main-db-path path] [--aux-db-path path]*
| [--identify] [--3d]
@@ -86,7 +87,7 @@ The following control parameters can appear in any order:
.. note:: Before PROJ 6.3.0, WKT1:GDAL was implicitly calling --boundcrs-to-wgs84.
This is no longer the case.
-.. option:: -k crs|operation|datum|ellipsoid
+.. option:: -k crs|operation|datum|ensemble|ellipsoid
When used to query a single object with a AUTHORITY:CODE, determines the (k)ind of the object
in case there are CRS, coordinate operations or ellipsoids with the same CODE.
@@ -212,6 +213,15 @@ The following control parameters can appear in any order:
.. note:: only used for coordinate operation computation
+.. option:: --allow-ellipsoidal-height-as-vertical-crs
+
+ .. versionadded:: 8.0
+
+ Allow to export a geographic or projected 3D CRS as a compound CRS whose
+ vertical CRS represents the ellipsoidal height.
+
+ .. note:: only used for CRS, and with WKT1:GDAL output format
+
.. option:: --boundcrs-to-wgs84
When specified, this option researches a coordinate operation from the
diff --git a/docs/source/development/index.rst b/docs/source/development/index.rst
index 85c10c6d..f985279f 100644
--- a/docs/source/development/index.rst
+++ b/docs/source/development/index.rst
@@ -39,9 +39,8 @@ are maintained in a `separate git repository <https://github.com/OSGeo/proj-datu
.. attention::
The ``proj_api.h`` header and the functions related to it is
- considered deprecated from version 5.0.0 and onwards. The header will be
- removed from PROJ in version 7.0.0 scheduled for release March 1st
- 2020.
+ considered deprecated from version 5.0.0 and onwards. The header has been
+ removed in version 8.0.0 released March 1st 2021.
.. attention::
diff --git a/docs/source/development/reference/deprecated.rst b/docs/source/development/reference/deprecated.rst
deleted file mode 100644
index 19f43b41..00000000
--- a/docs/source/development/reference/deprecated.rst
+++ /dev/null
@@ -1,270 +0,0 @@
-.. _api:
-
-********************************************************************************
-Deprecated API
-********************************************************************************
-
-.. contents:: Contents
- :depth: 3
- :backlinks: none
-
-Introduction
-------------
-
-Procedure ``pj_init()`` selects and initializes a cartographic
-projection with its argument control parameters. ``argc`` is the number
-of elements in the array of control strings argv that each contain
-individual cartographic control keyword assignments (+ proj arguments).
-The list must contain at least the proj=projection and Earth’s radius or
-elliptical parameters. If the initialization of the projection is
-successful a valid address is returned otherwise a NULL value.
-
-The ``pj_init_plus()`` function operates similarly to ``pj_init()`` but
-takes a single string containing the definition, with each parameter
-prefixed with a plus sign. For example
-``+proj=utm +zone=11 +ellps=WGS84``.
-
-Once initialization is performed either forward or inverse projections
-can be performed with the returned value of ``pj_init()`` used as the
-argument proj. The argument structure projUV values u and v contain
-respective longitude and latitude or x and y. Latitude and longitude are
-in radians. If a projection operation fails, both elements of projUV are
-set to ``HUGE_VAL`` (defined in ``math.h``).
-
-Note: all projections have a forward mode, but some do not have an
-inverse projection. If the projection does not have an inverse the
-projPJ structure element inv will be ``NULL``.
-
-The ``pj_transform`` function may be used to transform points between
-the two provided coordinate systems. In addition to converting between
-cartographic projection coordinates and geographic coordinates, this
-function also takes care of datum shifts if possible between the source
-and destination coordinate system. Unlike ``pj_fwd()`` and ``pj_inv()``
-it is also allowable for the coordinate system definitions
-``(projPJ *)`` to be geographic coordinate systems (defined as
-``+proj=latlong``).
-The x, y and z arrays contain the input values of the points, and are replaced with the output values.
-The function returns zero on success, or the error number (also in ``pj_errno``)
-on failure.
-
-Memory associated with the projection may be freed with ``pj_free()``.
-
-Example
--------
-
-The following program reads latitude and longitude values in decimal
-degrees, performs Mercator projection with a Clarke 1866 ellipsoid and a
-33° latitude of true scale and prints the projected cartesian values in
-meters:
-
-.. code::
-
- #include <proj_api.h>
-
- main(int argc, char **argv) {
- projPJ pj_merc, pj_latlong;
- double x, y;
-
- if (!(pj_merc = pj_init_plus("+proj=merc +ellps=clrk66 +lat_ts=33")) )
- exit(1);
- if (!(pj_latlong = pj_init_plus("+proj=latlong +ellps=clrk66")) )
- exit(1);
- while (scanf("%lf %lf", &x, &y) == 2) {
- x *= DEG_TO_RAD;
- y *= DEG_TO_RAD;
- p = pj_transform(pj_latlong, pj_merc, 1, 1, &x, &y, NULL );
- printf("%.2f\t%.2f\n", x, y);
- }
- exit(0);
- }
-
-
-For this program, an input of ``-16 20.25`` would give a result of
-``-1495284.21 1920596.79``.
-
-API Functions
--------------
-
-pj_transform
-============
-
-::
-
- int pj_transform( projPJ srcdefn,
- projPJ dstdefn,
- long point_count,
- int point_offset,
- double *x,
- double *y,
- double *z );
-
-
-Transform the x/y/z points from the source coordinate system to the
-destination coordinate system.
-
-``srcdefn``: source (input) coordinate system.
-
-``dstdefn``: destination (output) coordinate system.
-
-``point_count``: the number of points to be processed (the size of the
-x/y/z arrays).
-
-``point_offset``: the step size from value to value (measured in
-doubles) within the x/y/z arrays - normally 1 for a packed array. May be
-used to operate on xyz interleaved point arrays.
-
-``x``/``y``/``z``: The array of X, Y and Z coordinate values passed as
-input, and modified in place for output. The Z may optionally be NULL.
-
-``return``: The return is zero on success, or a PROJ.4 error code.
-
-The ``pj_transform()`` function transforms the passed in list of points
-from the source coordinate system to the destination coordinate system.
-Note that geographic locations need to be passed in radians, not decimal
-degrees, and will be returned similarly. The ``z`` array may be passed
-as NULL if Z values are not available.
-
-If there is an overall failure, an error code will be returned from the
-function. If individual points fail to transform - for instance due to
-being over the horizon - then those x/y/z values will be set to
-``HUGE_VAL`` on return. Input values that are ``HUGE_VAL`` will not be
-transformed.
-
-
-pj_init_plus
-============
-
-::
-
- projPJ pj_init_plus(const char *definition);
-
-This function converts a string representation of a coordinate system
-definition into a projPJ object suitable for use with other API
-functions. On failure the function will return NULL and set pj_errno.
-The definition should be of the general form
-``+proj=tmerc +lon_0 +datum=WGS84``. Refer to PROJ.4 documentation and
-the :ref:`transformation` notes for additional detail.
-
-Coordinate system objects allocated with ``pj_init_plus()`` should be
-deallocated with ``pj_free()``.
-
-
-pj_free
-=======
-
-::
-
- void pj_free( projPJ pj );
-
-Frees all resources associated with pj.
-
-
-pj_is_latlong
-=============
-
-::
-
- int pj_is_latlong( projPJ pj );
-
-Returns TRUE if the passed coordinate system is geographic
-(``proj=latlong``).
-
-
-pj_is_geocent
-=============
-
-::
-
- int pj_is_geocent( projPJ pj );``
-
-Returns TRUE if the coordinate system is geocentric (``proj=geocent``).
-
-pj_get_def
-==========
-
-::
-
- char *pj_get_def( projPJ pj, int options);``
-
-Returns the PROJ.4 initialization string suitable for use with
-``pj_init_plus()`` that would produce this coordinate system, but with
-the definition expanded as much as possible (for instance ``+init=`` and
-``+datum=`` definitions).
-
-pj_latlong_from_proj
-====================
-
-::
-
- projPJ pj_latlong_from_proj( projPJ pj_in );``
-
-Returns a new coordinate system definition which is the geographic
-coordinate (lat/long) system underlying ``pj_in``.
-
-pj_set_finder
-==============
-
-::
-
- void pj_set_finder( const char *(*new_finder)(const char *) );``
-
-Install a custom function for finding init and grid shift files.
-
-pj_set_searchpath
-=================
-
-::
-
- void pj_set_searchpath ( int count, const char **path );``
-
-Set a list of directories to search for init and grid shift files.
-
-
-pj_deallocate_grids
-===================
-
-::
-
- void pj_deallocate_grids( void );``
-
-Frees all resources associated with loaded and cached datum shift grids.
-
-
-pj_strerrno
-===========
-
-::
-
- char *pj_strerrno( int );``
-
-Returns the error text associated with the passed in error code.
-
-pj_get_errno_ref
-================
-
-::
-
- int *pj_get_errno_ref( void );``
-
-Returns a pointer to the global pj\_errno error variable.
-
-pj_get_release
-==============
-
-::
-
- const char *pj_get_release( void );``
-
-Returns an internal string describing the release version.
-
-Obsolete Functions
-~~~~~~~~~~~~~~~~~~
-
-``XY pj_fwd( LP lp, PJ *P );``
-
-``LP pj_inv( XY xy, PJ *P );``
-
-``projPJ pj_init(int argc, char **argv);``
-
-.. _more info: pj_transform
-
diff --git a/docs/source/development/reference/functions.rst b/docs/source/development/reference/functions.rst
index cc29743c..b37eacdd 100644
--- a/docs/source/development/reference/functions.rst
+++ b/docs/source/development/reference/functions.rst
@@ -182,7 +182,19 @@ paragraph for more details.
This is the same as :c:func:`proj_create_crs_to_crs` except that the source and
target CRS are passed as PJ* objects which must of the CRS variety.
- :param `options`: should be set to NULL currently.
+ :param `options`: a list of NUL terminated options, or NULL.
+
+ The list of supported options is:
+
+ - AUTHORITY=name: to restrict the authority of coordinate operations
+ looked up in the database. When not specified, coordinate
+ ``operations from any authority`` will be searched, with the restrictions set
+ in the authority_to_authority_preference database table related to the authority
+ of the source/target CRS themselves.
+ If authority is set to "any", then coordinate operations from any authority will be searched
+ If authority is a non-empty string different of ``any``, then coordinate operations
+ will be searched only in that authority namespace (e.g ``EPSG``).
+
.. doxygenfunction:: proj_normalize_for_visualization
:project: doxygen_api
@@ -352,7 +364,7 @@ Coordinate transformation
-.. c:function:: size_t proj_trans_array(PJ *P, PJ_DIRECTION direction, size_t n, PJ_COORD *coord)
+.. c:function:: int proj_trans_array(PJ *P, PJ_DIRECTION direction, size_t n, PJ_COORD *coord)
Batch transform an array of :c:type:`PJ_COORD`.
@@ -362,7 +374,7 @@ Coordinate transformation
:type `direction`: PJ_DIRECTION
:param n: Number of coordinates in :c:data:`coord`
:type n: `size_t`
- :returns: :c:type:`size_t` 0 if all observations are transformed without error, otherwise returns error number
+ :returns: `int` 0 if all observations are transformed without error, otherwise returns error number
Error reporting
diff --git a/docs/source/development/reference/index.rst b/docs/source/development/reference/index.rst
index 1d39b1d0..caa893c3 100644
--- a/docs/source/development/reference/index.rst
+++ b/docs/source/development/reference/index.rst
@@ -10,4 +10,3 @@ Reference
datatypes
functions
cpp/index.rst
- deprecated
diff --git a/docs/source/news.rst b/docs/source/news.rst
index 4275dd11..65c027f1 100644
--- a/docs/source/news.rst
+++ b/docs/source/news.rst
@@ -13,72 +13,72 @@ Updates
+ **Command line tools**
* Add multi-line PROJ string export capability, and use it by default in
- :program:`projinfo` (unless ``--single-line`` is specified) (`#2381 <https://github.com/OSGeo/issues/2381>`_)
+ :program:`projinfo` (unless ``--single-line`` is specified) (`#2381 <https://github.com/OSGeo/PROJ/issues/2381>`_)
+ **Coordinate operations**
* :ref:`col_urban` projection, implementing a EPSG projection method
- used by a number of projected CRS in Colombia (`#2395 <https://github.com/OSGeo/issues/2395>`_)
+ used by a number of projected CRS in Colombia (`#2395 <https://github.com/OSGeo/PROJ/issues/2395>`_)
- * :ref:`tinshift` for triangulation-based transformations (`#2344 <https://github.com/OSGeo/issues/2344>`_)
+ * :ref:`tinshift` for triangulation-based transformations (`#2344 <https://github.com/OSGeo/PROJ/issues/2344>`_)
- * Added ellipsoidal formulation of :ref:`ortho` (`#2361 <https://github.com/OSGeo/issues/2361>`_)
+ * Added ellipsoidal formulation of :ref:`ortho` (`#2361 <https://github.com/OSGeo/PROJ/issues/2361>`_)
+ **Database**
* Update to EPSG 10.003 and make code base robust to dealing with
- WKT CRS with DatumEnsemble (`#2370 <https://github.com/OSGeo/issues/2370>`_)
+ WKT CRS with DatumEnsemble (`#2370 <https://github.com/OSGeo/PROJ/issues/2370>`_)
- * Added Finland tinshift operations (`#2392 <https://github.com/OSGeo/issues/2392>`_)
+ * Added Finland tinshift operations (`#2392 <https://github.com/OSGeo/PROJ/issues/2392>`_)
* Added transformation from JGD2011 Geographic 3D to JGD2011
- height using GSIGEO2011 (`#2393 <https://github.com/OSGeo/issues/2393>`_)
+ height using GSIGEO2011 (`#2393 <https://github.com/OSGeo/PROJ/issues/2393>`_)
* Improve CompoundCRS identification and name morphing in VerticalCRS
- with ESRI WKT1 (`#2386 <https://github.com/OSGeo/issues/2386>`_)
+ with ESRI WKT1 (`#2386 <https://github.com/OSGeo/PROJ/issues/2386>`_)
* Added OGC:CRS27 and OGC:CRS83 CRS entries for NAD27 and NAD83
- in longitude, latitude order (`#2350 <https://github.com/OSGeo/issues/2350>`_)
+ in longitude, latitude order (`#2350 <https://github.com/OSGeo/PROJ/issues/2350>`_)
+ **API**
- * Added temporal, engineering, and parametric datum :c:type:`PJ_TYPE` enumerations (`#2274 <https://github.com/OSGeo/issues/2274>`_)
+ * Added temporal, engineering, and parametric datum :c:type:`PJ_TYPE` enumerations (`#2274 <https://github.com/OSGeo/PROJ/issues/2274>`_)
* Various improvements to context handling (#2329, #2331)
* :c:func:`proj_create_vertical_crs_ex()`: add a ``ACCURACY`` option to provide
an explicit accuracy, or derive it from the grid name if it is
- known (`#2342 <https://github.com/OSGeo/issues/2342>`_)
+ known (`#2342 <https://github.com/OSGeo/PROJ/issues/2342>`_)
* :c:func:`proj_crs_create_bound_crs_to_WGS84()`: make it work on
verticalCRS/compoundCRS such as EPSG:4326+5773 and
- EPSG:4326+3855 (`#2365 <https://github.com/OSGeo/issues/2365>`_)
+ EPSG:4326+3855 (`#2365 <https://github.com/OSGeo/PROJ/issues/2365>`_)
- * :cpp:func:`promoteTo3D()`: add a remark with the original CRS identifier (`#2369 <https://github.com/OSGeo/issues/2369>`_)
+ * :cpp:func:`promoteTo3D()`: add a remark with the original CRS identifier (`#2369 <https://github.com/OSGeo/PROJ/issues/2369>`_)
- * Added :c:func:`proj_context_clone` (`#2383 <https://github.com/OSGeo/issues/2383>`_)
+ * Added :c:func:`proj_context_clone` (`#2383 <https://github.com/OSGeo/PROJ/issues/2383>`_)
Bug fixes
---------
-* Avoid core dumps when copying contexts in certain scenarios (`#2324 <https://github.com/OSGeo/issues/2324>`_)
+* Avoid core dumps when copying contexts in certain scenarios (`#2324 <https://github.com/OSGeo/PROJ/issues/2324>`_)
* :c:func:`proj_trans()`: reset errno before attemptying a retry with a new
- coordinate operation (`#2353 <https://github.com/OSGeo/issues/2353>`_)
+ coordinate operation (`#2353 <https://github.com/OSGeo/PROJ/issues/2353>`_)
* PROJJSON schema corrected to allow prime meridians values with
- explicitly stating a unit (degrees assumed) (`#2354 <https://github.com/OSGeo/issues/2354>`_)
+ explicitly stating a unit (degrees assumed) (`#2354 <https://github.com/OSGeo/PROJ/issues/2354>`_)
* Adjust :cpp:func:`createBoundCRSToWGS84IfPossible()` and operation filtering
- (for POSGAR 2007 to WGS84 issues) (`#2357 <https://github.com/OSGeo/issues/2357>`_)
+ (for POSGAR 2007 to WGS84 issues) (`#2357 <https://github.com/OSGeo/PROJ/issues/2357>`_)
-* :cpp:func:`createOperations()`: several fixes affecting NAD83 -> NAD83(2011) (`#2364 <https://github.com/OSGeo/issues/2364>`_)
+* :cpp:func:`createOperations()`: several fixes affecting NAD83 -> NAD83(2011) (`#2364 <https://github.com/OSGeo/PROJ/issues/2364>`_)
* WKT2:2019 import/export: handle DATUM (at top level object) with PRIMEM
-* WKT1_ESRI: fix import and export of CompoundCRS (`#2389 <https://github.com/OSGeo/issues/2389>`_)
+* WKT1_ESRI: fix import and export of CompoundCRS (`#2389 <https://github.com/OSGeo/PROJ/issues/2389>`_)
7.1.1 Release Notes
@@ -89,36 +89,36 @@ Bug fixes
Updates
-------
-* Added various Brazillian grids to the database (`#2277 <https://github.com/OSGeo/issues/2277>`_)
+* Added various Brazillian grids to the database (`#2277 <https://github.com/OSGeo/PROJ/issues/2277>`_)
-* Added geoid file for Canary Islands to the database (`#2312 <https://github.com/OSGeo/issues/2312>`_)
+* Added geoid file for Canary Islands to the database (`#2312 <https://github.com/OSGeo/PROJ/issues/2312>`_)
-* Updated EPSG database to version 9.8.15 (`#2310 <https://github.com/OSGeo/issues/2310>`_)
+* Updated EPSG database to version 9.8.15 (`#2310 <https://github.com/OSGeo/PROJ/issues/2310>`_)
Bug fixes
---------
* WKT parser: do not raise warning when parsing a WKT2:2015 TIMECRS
- whose TIMEUNIT is at the CS level, and not inside (`#2281 <https://github.com/OSGeo/issues/2281>`_)
+ whose TIMEUNIT is at the CS level, and not inside (`#2281 <https://github.com/OSGeo/PROJ/issues/2281>`_)
* Parse '+proj=something_not_latlong +vunits=' without +geoidgrids as a
- Projected3D CRS and not a compound CRS with a unknown datum (`#2289 <https://github.com/OSGeo/issues/2289>`_)
+ Projected3D CRS and not a compound CRS with a unknown datum (`#2289 <https://github.com/OSGeo/PROJ/issues/2289>`_)
-* C API: Avoid crashing due to missing SANITIZE_CTX() in entry points (`#2293 <https://github.com/OSGeo/issues/2293>`_)
+* C API: Avoid crashing due to missing SANITIZE_CTX() in entry points (`#2293 <https://github.com/OSGeo/PROJ/issues/2293>`_)
-* CMake build: Check "target_clones" before use (`#2297 <https://github.com/OSGeo/issues/2297>`_)
+* CMake build: Check "target_clones" before use (`#2297 <https://github.com/OSGeo/PROJ/issues/2297>`_)
-* PROJ string export of +proj=krovak +czech: make sure we export +czech… (`#2301 <https://github.com/OSGeo/issues/2301>`_)
+* PROJ string export of +proj=krovak +czech: make sure we export +czech… (`#2301 <https://github.com/OSGeo/PROJ/issues/2301>`_)
-* Helmert 2D: do not require a useless +convention= parameter (`#2305 <https://github.com/OSGeo/issues/2305>`_)
+* Helmert 2D: do not require a useless +convention= parameter (`#2305 <https://github.com/OSGeo/PROJ/issues/2305>`_)
-* Fix a few spelling errors ("vgridshit" vs. "vgridshift") (`#2307 <https://github.com/OSGeo/issues/2307>`_)
+* Fix a few spelling errors ("vgridshit" vs. "vgridshift") (`#2307 <https://github.com/OSGeo/PROJ/issues/2307>`_)
-* Fix ability to identify EPSG:2154 as a candidate for 'RGF93_Lambert_93' (`#2316 <https://github.com/OSGeo/issues/2316>`_)
+* Fix ability to identify EPSG:2154 as a candidate for 'RGF93_Lambert_93' (`#2316 <https://github.com/OSGeo/PROJ/issues/2316>`_)
-* WKT importer: tune for Oracle WKT and 'Lambert Conformal Conic' (`#2322 <https://github.com/OSGeo/issues/2322>`_)
+* WKT importer: tune for Oracle WKT and 'Lambert Conformal Conic' (`#2322 <https://github.com/OSGeo/PROJ/issues/2322>`_)
-* Revert compiler generated Fused Multiply Addition optimized routines (`#2328 <https://github.com/OSGeo/issues/2328>`_)
+* Revert compiler generated Fused Multiply Addition optimized routines (`#2328 <https://github.com/OSGeo/PROJ/issues/2328>`_)
@@ -135,7 +135,7 @@ Updates
+ **New projections**
- * Add square conformal projections from libproject (`#2148 <https://github.com/OSGeo/issues/2148>`_):
+ * Add square conformal projections from libproject (`#2148 <https://github.com/OSGeo/PROJ/issues/2148>`_):
- :ref:`adams_hemi`
@@ -148,117 +148,117 @@ Updates
- :ref:`peirce_q`
* Adams Square II: map ESRI WKT to PROJ string, and implement iterative
- inverse method (`#2157 <https://github.com/OSGeo/issues/2157>`_)
+ inverse method (`#2157 <https://github.com/OSGeo/PROJ/issues/2157>`_)
- * Added :ref:`igh_o` projection (`#2226 <https://github.com/OSGeo/issues/2226>`_)
+ * Added :ref:`igh_o` projection (`#2226 <https://github.com/OSGeo/PROJ/issues/2226>`_)
- * Add :ref:`wink2` inverse by generic inversion of forward method (`#2243 <https://github.com/OSGeo/issues/2243>`_)
+ * Add :ref:`wink2` inverse by generic inversion of forward method (`#2243 <https://github.com/OSGeo/PROJ/issues/2243>`_)
+ **Database**
* Update to EPSG 9.8.12, ESRI 10.8.1 and import scope and remarks for
- conversion (`#2238 <https://github.com/OSGeo/issues/2238>`_) (#2267)
+ conversion (`#2238 <https://github.com/OSGeo/PROJ/issues/2238>`_) (#2267)
- * Map the Behrman projection to ``cae`` when converting ESRI CRSes (`#1986 <https://github.com/OSGeo/issues/1986>`_)
+ * Map the Behrman projection to ``cae`` when converting ESRI CRSes (`#1986 <https://github.com/OSGeo/PROJ/issues/1986>`_)
- * Support conversion of Flat_Polar_Quartic projection method (`#1987 <https://github.com/OSGeo/issues/1987>`_)
+ * Support conversion of Flat_Polar_Quartic projection method (`#1987 <https://github.com/OSGeo/PROJ/issues/1987>`_)
* Register 4 new Austrian height grids (see https://github.com/OSGeo/PROJ-data/pull/13)
- and handle 'Vertical Offset by Grid Interpolation (BEV AT)' method (`#1989 <https://github.com/OSGeo/issues/1989>`_)
+ and handle 'Vertical Offset by Grid Interpolation (BEV AT)' method (`#1989 <https://github.com/OSGeo/PROJ/issues/1989>`_)
* Add ESRI projection method mappings for Mercator_Variant_A, Mercator_Variant_B
- and Transverse_Cylindrical_Equal_Area and various grid mappings (`#2020 <https://github.com/OSGeo/issues/2020>`_) (#2195)
+ and Transverse_Cylindrical_Equal_Area and various grid mappings (`#2020 <https://github.com/OSGeo/PROJ/issues/2020>`_) (#2195)
- * Map ESRI Transverse_Mercator_Complex to Transverse Mercator (`#2040 <https://github.com/OSGeo/issues/2040>`_)
+ * Map ESRI Transverse_Mercator_Complex to Transverse Mercator (`#2040 <https://github.com/OSGeo/PROJ/issues/2040>`_)
- * Register grids for New Caledonia (see https://github.com/OSGeo/PROJ-data/pull/16) (`#2051 <https://github.com/OSGeo/issues/2051>`_) (#2239)
+ * Register grids for New Caledonia (see https://github.com/OSGeo/PROJ-data/pull/16) (`#2051 <https://github.com/OSGeo/PROJ/issues/2051>`_) (#2239)
- * Register NZGD2000 -> ITRF96 transformation for NZGD2000 database (`#2248 <https://github.com/OSGeo/issues/2248>`_)
+ * Register NZGD2000 -> ITRF96 transformation for NZGD2000 database (`#2248 <https://github.com/OSGeo/PROJ/issues/2248>`_)
* Register geoid file for UK added
- (see https://github.com/OSGeo//PROJ-data/pull/25() (`#2250 <https://github.com/OSGeo/issues/2250>`_)
+ (see https://github.com/OSGeo//PROJ-data/pull/25() (`#2250 <https://github.com/OSGeo/PROJ/issues/2250>`_)
- * Register Slovakian geoid transformations with needed code changes (`#2259 <https://github.com/OSGeo/issues/2259>`_)
+ * Register Slovakian geoid transformations with needed code changes (`#2259 <https://github.com/OSGeo/PROJ/issues/2259>`_)
- * Register Spanish SPED2ETV2 grid for ED50->ETRS89 (`#2261 <https://github.com/OSGeo/issues/2261>`_)
+ * Register Spanish SPED2ETV2 grid for ED50->ETRS89 (`#2261 <https://github.com/OSGeo/PROJ/issues/2261>`_)
+ **API**
- * Add API function :c:func:`proj_get_units_from_database()` (`#2065 <https://github.com/OSGeo/issues/2065>`_)
+ * Add API function :c:func:`proj_get_units_from_database()` (`#2065 <https://github.com/OSGeo/PROJ/issues/2065>`_)
- * Add API function :c:func:`proj_get_suggested_operation()` (`#2068 <https://github.com/OSGeo/issues/2068>`_)
+ * Add API function :c:func:`proj_get_suggested_operation()` (`#2068 <https://github.com/OSGeo/PROJ/issues/2068>`_)
- * Add API functions :c:func:`proj_degree_input()` and :c:func:`proj_degree_output()` (`#2144 <https://github.com/OSGeo/issues/2144>`_)
+ * Add API functions :c:func:`proj_degree_input()` and :c:func:`proj_degree_output()` (`#2144 <https://github.com/OSGeo/PROJ/issues/2144>`_)
* Moved :c:func:`proj_context_get_url_endpoint()` & :c:func:`proj_context_get_user_writable_directory()`
- from ``proj_experimental.h`` to ``proj.h`` (`#2162 <https://github.com/OSGeo/issues/2162>`_)
+ from ``proj_experimental.h`` to ``proj.h`` (`#2162 <https://github.com/OSGeo/PROJ/issues/2162>`_)
* :c:func:`createFromUserInput()`: allow compound CRS with the 2 parts given by names,
- e.g. 'WGS 84 + EGM96 height' (`#2126 <https://github.com/OSGeo/issues/2126>`_)
+ e.g. 'WGS 84 + EGM96 height' (`#2126 <https://github.com/OSGeo/PROJ/issues/2126>`_)
* :c:func:`createOperations()`: when converting CompoundCRS<-->Geographic3DCrs, do not
use discard change of ellipsoidal height if a Helmert transformation is
- involved (`#2227 <https://github.com/OSGeo/issues/2227>`_)
+ involved (`#2227 <https://github.com/OSGeo/PROJ/issues/2227>`_)
+ **Optimizations**
- * ``tmerc/utm``: add a +algo=auto/evenden_snyder/poder_engsager parameter (`#2030 <https://github.com/OSGeo/issues/2030>`_)
+ * ``tmerc/utm``: add a +algo=auto/evenden_snyder/poder_engsager parameter (`#2030 <https://github.com/OSGeo/PROJ/issues/2030>`_)
- * Extended ``tmerc`` (Poder/Engsager): speed optimizations (`#2036 <https://github.com/OSGeo/issues/2036>`_)
+ * Extended ``tmerc`` (Poder/Engsager): speed optimizations (`#2036 <https://github.com/OSGeo/PROJ/issues/2036>`_)
- * Approximate ``tmerc`` (Snyder): speed optimizations (`#2039 <https://github.com/OSGeo/issues/2039>`_)
+ * Approximate ``tmerc`` (Snyder): speed optimizations (`#2039 <https://github.com/OSGeo/PROJ/issues/2039>`_)
- * :c:func:`pj_phi2()`: speed-up computation (and thus inverse ellipsoidal Mercator and LCC) (`#2052 <https://github.com/OSGeo/issues/2052>`_)
+ * :c:func:`pj_phi2()`: speed-up computation (and thus inverse ellipsoidal Mercator and LCC) (`#2052 <https://github.com/OSGeo/PROJ/issues/2052>`_)
- * Inverse ``cart``: speed-up computation by 33% (`#2145 <https://github.com/OSGeo/issues/2145>`_)
+ * Inverse ``cart``: speed-up computation by 33% (`#2145 <https://github.com/OSGeo/PROJ/issues/2145>`_)
- * Extended ``tmerc``: speed-up forward path by ~5% (`#2147 <https://github.com/OSGeo/issues/2147>`_)
+ * Extended ``tmerc``: speed-up forward path by ~5% (`#2147 <https://github.com/OSGeo/PROJ/issues/2147>`_)
+ **Various**
- * Follow PDAL's CMake RPATH strategy (`#2009 <https://github.com/OSGeo/issues/2009>`_)
+ * Follow PDAL's CMake RPATH strategy (`#2009 <https://github.com/OSGeo/PROJ/issues/2009>`_)
- * WKT import/export: add support for WKT1_ESRI VERTCS synta (`#2024 <https://github.com/OSGeo/issues/2024>`_)
+ * WKT import/export: add support for WKT1_ESRI VERTCS synta (`#2024 <https://github.com/OSGeo/PROJ/issues/2024>`_)
- * :program:`projinfo`: add a ``--hide-ballpark`` option (`#2127 <https://github.com/OSGeo/issues/2127>`_)
+ * :program:`projinfo`: add a ``--hide-ballpark`` option (`#2127 <https://github.com/OSGeo/PROJ/issues/2127>`_)
- * :program:`gie`: implement a strict mode with ``<gie-strict> </gie-strict>`` (`#2168 <https://github.com/OSGeo/issues/2168>`_)
+ * :program:`gie`: implement a strict mode with ``<gie-strict> </gie-strict>`` (`#2168 <https://github.com/OSGeo/PROJ/issues/2168>`_)
- * Allow importing WKT1 COMPD_CS with a VERT_DATUM[Ellipsoid,2002] (`#2229 <https://github.com/OSGeo/issues/2229>`_)
+ * Allow importing WKT1 COMPD_CS with a VERT_DATUM[Ellipsoid,2002] (`#2229 <https://github.com/OSGeo/PROJ/issues/2229>`_)
- * Add runtime checking that sqlite3 is >= 3.11 (`#2235 <https://github.com/OSGeo/issues/2235>`_)
+ * Add runtime checking that sqlite3 is >= 3.11 (`#2235 <https://github.com/OSGeo/PROJ/issues/2235>`_)
Bug fixes
---------
* :cpp:func:`createOperations()`: do not remove ballpark transformation if there are only grid
- based operations, even if they cover the whole area of use (`#2155 <https://github.com/OSGeo/issues/2155>`_)
+ based operations, even if they cover the whole area of use (`#2155 <https://github.com/OSGeo/PROJ/issues/2155>`_)
* :cpp:func:`createFromProjString()`: handle default parameters of '+krovak +type=crs', and
- handle ``+czech`` correctly (`#2200 <https://github.com/OSGeo/issues/2200>`_)
+ handle ``+czech`` correctly (`#2200 <https://github.com/OSGeo/PROJ/issues/2200>`_)
-* :cpp:func:`ProjectedCRS::identify()`: fix identification of EPSG:3059 (`#2215 <https://github.com/OSGeo/issues/2215>`_)
+* :cpp:func:`ProjectedCRS::identify()`: fix identification of EPSG:3059 (`#2215 <https://github.com/OSGeo/PROJ/issues/2215>`_)
-* Database: add a 'WGS84' alias for the EPSG:4326 CRS (`#2218 <https://github.com/OSGeo/issues/2218>`_)
+* Database: add a 'WGS84' alias for the EPSG:4326 CRS (`#2218 <https://github.com/OSGeo/PROJ/issues/2218>`_)
-* Fixes related to CompoundCRS and BoundCRS (`#2222 <https://github.com/OSGeo/issues/2222>`_)
+* Fixes related to CompoundCRS and BoundCRS (`#2222 <https://github.com/OSGeo/PROJ/issues/2222>`_)
-* Avoid 2 warnings about missing database indices (`#2223 <https://github.com/OSGeo/issues/2223>`_)
+* Avoid 2 warnings about missing database indices (`#2223 <https://github.com/OSGeo/PROJ/issues/2223>`_)
-* Make ``projinfo --3d --boundcrs-to-wgs84`` work better (`#2224 <https://github.com/OSGeo/issues/2224>`_)
+* Make ``projinfo --3d --boundcrs-to-wgs84`` work better (`#2224 <https://github.com/OSGeo/PROJ/issues/2224>`_)
* Many fixes regarding BoundCRS, CompoundCRS, Geographic3D CRS with
- non-metre units (`#2234 <https://github.com/OSGeo/issues/2234>`_)
+ non-metre units (`#2234 <https://github.com/OSGeo/PROJ/issues/2234>`_)
-* Fix identification of (one of the) ESRI WKT formulations of EPSG:3035 (`#2240 <https://github.com/OSGeo/issues/2240>`_)
+* Fix identification of (one of the) ESRI WKT formulations of EPSG:3035 (`#2240 <https://github.com/OSGeo/PROJ/issues/2240>`_)
-* Avoid using deprecated and removed Windows API function with Mingw32 (`#2246 <https://github.com/OSGeo/issues/2246>`_)
+* Avoid using deprecated and removed Windows API function with Mingw32 (`#2246 <https://github.com/OSGeo/PROJ/issues/2246>`_)
* :cpp:func:`normalizeForVisualization()`: make it switch axis for EPSG:5482
- (RSRGD2000 / RSPS2000) (`#2256 <https://github.com/OSGeo/issues/2256>`_)
+ (RSRGD2000 / RSPS2000) (`#2256 <https://github.com/OSGeo/PROJ/issues/2256>`_)
-* Fix access violation in :c:func:`proj_context_get_database_metadata()` (`#2260 <https://github.com/OSGeo/issues/2260>`_)
+* Fix access violation in :c:func:`proj_context_get_database_metadata()` (`#2260 <https://github.com/OSGeo/PROJ/issues/2260>`_)
7.0.1 Release Notes
diff --git a/docs/source/operations/conversions/images/ECEF_ENU_Longitude_Latitude_relationships.png b/docs/source/operations/conversions/images/ECEF_ENU_Longitude_Latitude_relationships.png
new file mode 100644
index 00000000..224ff738
--- /dev/null
+++ b/docs/source/operations/conversions/images/ECEF_ENU_Longitude_Latitude_relationships.png
Binary files differ
diff --git a/docs/source/operations/conversions/images/ECEF_ENU_Longitude_Latitude_relationships.svg b/docs/source/operations/conversions/images/ECEF_ENU_Longitude_Latitude_relationships.svg
new file mode 100644
index 00000000..c97ca181
--- /dev/null
+++ b/docs/source/operations/conversions/images/ECEF_ENU_Longitude_Latitude_relationships.svg
@@ -0,0 +1,348 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.1"
+ width="520"
+ height="500"
+ id="svg2"
+ xml:space="preserve"><defs
+ id="defs6"><marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Mend"
+ style="overflow:visible"><path
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)"
+ id="path3759"
+ style="font-size:12px;fill:#0d6299;fill-rule:evenodd;stroke:#0d6299;stroke-width:0.625;stroke-linejoin:round" /></marker><marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow1Mstart"
+ style="overflow:visible"><path
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ transform="matrix(0.4,0,0,0.4,4,0)"
+ id="path3738"
+ style="fill:#00b800;fill-rule:evenodd;stroke:#00b800;stroke-width:1pt;marker-start:none" /></marker><marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow1Mend"
+ style="overflow:visible"><path
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ id="path3741"
+ style="fill:#00b800;fill-rule:evenodd;stroke:#00b800;stroke-width:1pt;marker-start:none" /></marker><marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Mstart"
+ style="overflow:visible"><path
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(0.6,0.6)"
+ id="path3756"
+ style="font-size:12px;fill:#0d6299;fill-rule:evenodd;stroke:#0d6299;stroke-width:0.625;stroke-linejoin:round" /></marker><marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow1Lstart"
+ style="overflow:visible"><path
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ transform="matrix(0.8,0,0,0.8,10,0)"
+ id="path3732"
+ style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;marker-start:none" /></marker><marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow1Lend"
+ style="overflow:visible"><path
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)"
+ id="path3735"
+ style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;marker-start:none" /></marker></defs><g
+ transform="matrix(1.25,0,0,-1.25,-136.61316,788.09803)"
+ id="g12"><g
+ transform="matrix(0,1,-1,0,718.75,123.67)"
+ id="g18"
+ style="stroke:#808080;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4, 8;stroke-dashoffset:0"><path
+ d="m 283.32,265.39 1.08,0 0.96,0.36 1.08,0.48 0.96,0.72 0.96,0.84 0.96,1.08 1.08,1.32 0.96,1.44 0.96,1.68 0.96,1.8 0.96,2.04 0.84,2.28 0.96,2.4 0.96,2.64 0.84,2.76 0.84,2.88 0.84,3.12 0.84,3.24 0.84,3.48 0.84,3.48 0.72,3.84 0.72,3.84 0.72,4.08 0.72,4.08 0.72,4.32 0.6,4.44 0.6,4.56 0.6,4.68 0.6,4.8 0.6,4.93 0.48,5.03 0.48,5.16 0.48,5.16 0.36,5.28 0.36,5.4 0.36,5.4 0.36,5.52 0.24,5.52 0.24,5.64 0.24,5.64 0.24,5.76 0.12,5.76 0.12,5.76 0.12,5.76 0,5.76 0,5.88 0,5.76 0,5.76 -0.12,5.76 -0.12,5.88 -0.12,5.64 -0.24,5.77 -0.24,5.63 -0.24,5.64 -0.24,5.52 -0.36,5.52 -0.36,5.4 -0.36,5.4 -0.36,5.28 -0.48,5.16 -0.48,5.16 -0.48,5.04 -0.6,4.92 -0.6,4.8 -0.6,4.68 -0.6,4.56 -0.6,4.44 -0.72,4.32 -0.72,4.08 -0.72,4.08 -0.72,3.96 -0.72,3.72 -0.84,3.6 -0.84,3.36 -0.84,3.24 -0.84,3.12 -0.84,3 -0.84,2.76 -0.96,2.52 -0.96,2.4 -0.84,2.28 -0.96,2.04 -0.96,1.8 -0.96,1.68 -0.96,1.44 -1.08,1.32 -0.96,1.08 -0.96,0.84 -0.96,0.72 -1.08,0.49 -0.96,0.35 -1.08,0"
+ id="path20"
+ style="fill:none;stroke:#808080;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4, 8;stroke-dashoffset:0" /></g><g
+ transform="matrix(0,1,-1,0,718.75,123.67)"
+ id="g22"
+ style="stroke:#808080;stroke-width:1.60000002;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"><path
+ d="m 283.32,605.35 -0.96,0 -0.96,-0.35 -1.08,-0.49 -0.96,-0.72 -0.96,-0.84 -1.08,-1.08 -0.96,-1.32 -0.96,-1.44 -0.96,-1.68 -0.96,-1.8 -0.96,-2.04 -0.96,-2.28 -0.84,-2.4 -0.96,-2.52 -0.84,-2.76 -0.84,-3 -0.96,-3.12 -0.72,-3.24 -0.84,-3.36 -0.84,-3.6 -0.72,-3.72 -0.84,-3.96 -0.72,-4.08 -0.6,-4.08 -0.72,-4.32 -0.6,-4.44 -0.72,-4.56 -0.6,-4.68 -0.48,-4.8 -0.6,-4.92 -0.48,-5.04 -0.48,-5.16 -0.48,-5.16 -0.36,-5.28 -0.36,-5.4 -0.36,-5.4 -0.36,-5.52 -0.24,-5.52 -0.36,-5.64 -0.12,-5.63 -0.24,-5.77 -0.12,-5.64 -0.12,-5.88 -0.12,-5.76 0,-5.76 -0.12,-5.76 0.12,-5.88 0,-5.76 0.12,-5.76 0.12,-5.76 0.12,-5.76 0.24,-5.76 0.12,-5.64 0.36,-5.64 0.24,-5.52 0.36,-5.52 0.36,-5.4 0.36,-5.4 0.36,-5.28 0.48,-5.16 0.48,-5.16 0.48,-5.03 0.6,-4.93 0.48,-4.8 0.6,-4.68 0.72,-4.56 0.6,-4.44 0.72,-4.32 0.6,-4.08 0.72,-4.08 0.84,-3.84 0.72,-3.84 0.84,-3.48 0.84,-3.48 0.72,-3.24 0.96,-3.12 0.84,-2.88 0.84,-2.76 0.96,-2.64 0.84,-2.4 0.96,-2.28 0.96,-2.04 0.96,-1.8 0.96,-1.68 0.96,-1.44 0.96,-1.32 1.08,-1.08 0.96,-0.84 0.96,-0.72 1.08,-0.48 0.96,-0.36 0.96,0"
+ id="path24"
+ style="fill:none;stroke:#808080;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g><g
+ transform="matrix(0,1,-1,0,718.75,123.67)"
+ id="g26"
+ style="stroke:#808080;stroke-width:1.60000002;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"><path
+ d="m 283.32,605.35 -8.88,-0.12 -8.88,-0.72 -8.76,-1.2 -8.76,-1.56 -8.64,-2.16 -8.52,-2.52 -8.4,-3 -8.28,-3.36 -8.04,-3.84 -7.8,-4.2 -7.56,-4.67 -7.32,-5.05 -7.08,-5.4 -6.84,-5.76 -6.36,-6.24 -6.24,-6.36 -5.76,-6.84 -5.4,-7.08 -5.04,-7.32 -4.68,-7.56 -4.2,-7.8 -3.84,-8.04 -3.36,-8.28 -3,-8.4 -2.52,-8.52 -2.16,-8.64 -1.56,-8.76 -1.2,-8.76 -0.72,-8.88 -0.12,-8.88 0.12,-9 0.72,-8.88 1.2,-8.76 1.56,-8.76 2.16,-8.64 2.52,-8.52 3,-8.4 3.36,-8.28 3.84,-8.04 4.2,-7.8 4.68,-7.56 5.04,-7.32 5.4,-7.08 5.76,-6.84 6.24,-6.36 6.36,-6.12 6.84,-5.88 7.08,-5.4 7.32,-5.04 7.56,-4.68 7.8,-4.2 8.04,-3.84 8.28,-3.36 8.4,-3 8.52,-2.52 8.64,-2.04 8.76,-1.68 8.76,-1.2 8.88,-0.6 8.88,-0.24"
+ id="path28"
+ style="fill:none;stroke:#808080;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g><g
+ transform="matrix(0,1,-1,0,718.75,123.67)"
+ id="g30"
+ style="stroke:#808080;stroke-width:1.60000002;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"><path
+ d="m 453.36,435.43 0,0.96 -0.36,0.96 -0.48,1.08 -0.72,0.96 -0.84,0.96 -1.08,1.08 -1.32,0.96 -1.44,0.96 -1.68,0.96 -1.92,0.96 -2.04,0.96 -2.16,0.96 -2.52,0.84 -2.52,0.97 -2.76,0.83 -3,0.96 -3.12,0.84 -3.24,0.84 -3.48,0.84 -3.6,0.72 -3.72,0.84 -3.96,0.72 -3.96,0.72 -4.2,0.72 -4.32,0.6 -4.56,0.72 -4.56,0.6 -4.68,0.6 -4.8,0.6 -4.92,0.48 -5.04,0.48 -5.16,0.48 -5.16,0.48 -5.28,0.48 -5.4,0.36 -5.52,0.36 -5.52,0.24 -5.52,0.36 -5.64,0.24 -5.64,0.24 -5.76,0.12 -5.76,0.12 -5.76,0.12 -5.88,0.12 -5.76,0.12 -5.76,0 -5.88,-0.12 -5.76,0 -5.88,-0.12 -5.76,-0.12 -5.76,-0.12"
+ id="path32"
+ style="fill:none;stroke:#808080;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g><g
+ transform="matrix(0,1,-1,0,718.75,123.67)"
+ id="g46"
+ style="stroke:#ff9900;stroke-width:1.60000002;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"><path
+ d="m 270.6,392.35 -0.24,3.48 -0.36,3.6 -0.24,3.6 -0.24,3.72 -0.24,3.72 -0.24,3.84 -0.12,3.96 -0.12,3.84 -0.12,3.96 0,3.96 -0.12,4.08 0,3.96 0.12,3.96 0,3.97 0.12,3.95"
+ id="path48"
+ style="fill:none;stroke:#ff9900;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g><path
+ d="m 481.68,406.99 -198.36,0 -33.84,-34.44"
+ id="path16"
+ style="fill:none;stroke:#0d6299;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow2Mstart);marker-end:url(#Arrow2Mend)" /><g
+ transform="matrix(0,1,-1,0,718.75,123.67)"
+ id="g34"
+ style="stroke:#ff9900;stroke-width:1.60000002;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"><path
+ d="m 363,358.51 -79.68,76.92"
+ id="path36"
+ style="fill:none;stroke:#ff9900;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g><g
+ transform="matrix(0,1,-1,0,718.75,123.67)"
+ id="g38"
+ style="stroke:#808080;stroke-width:1.60000002;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"><path
+ d="m 453.36,435.43 -0.12,-3.96 -0.48,-3.96 -0.96,-3.96 -1.2,-3.84 -1.56,-3.84 -1.92,-3.84 -2.16,-3.84 -2.64,-3.72 -2.88,-3.6 -3.24,-3.6 -3.48,-3.48 -3.84,-3.48 -4.08,-3.24 -4.44,-3.24 -4.68,-3.12 -5.04,-3 -5.16,-2.88 -5.52,-2.88 -5.76,-2.64 -5.88,-2.4 -6.24,-2.4 -6.36,-2.28 -6.48,-2.04 -6.84,-1.92 -6.84,-1.68 -7.08,-1.68 -7.2,-1.44 -7.2,-1.2 -7.44,-1.08 -7.44,-0.96 -7.56,-0.72 -7.68,-0.6 -7.68,-0.36 -7.68,-0.24 -7.68,0 -7.68,0.12 -7.68,0.36 -7.68,0.48"
+ id="path40"
+ style="fill:none;stroke:#808080;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g><g
+ transform="matrix(0,1,-1,0,718.75,123.67)"
+ id="g42"
+ style="stroke:#ff9900;stroke-width:1.60000002;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"><path
+ d="m 257.88,349.27 25.44,86.16"
+ id="path44"
+ style="fill:none;stroke:#ff9900;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g><g
+ transform="matrix(0,1,-1,0,718.75,123.67)"
+ id="g50"
+ style="stroke:#ff9900;stroke-width:1.60000002;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"><path
+ d="m 274.92,406.63 4.44,-0.24 4.56,0 4.44,0.12 4.56,0.24 4.32,0.48 4.44,0.72 4.2,0.84 4.08,0.96"
+ id="path52"
+ style="fill:none;stroke:#ff9900;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g><g
+ transform="matrix(0,1,-1,0,718.75,123.67)"
+ id="g58"><path
+ d="m 337.92,327.31 0,48.72 50.16,13.56 0,-48.72 -50.16,-13.56 z"
+ id="path60"
+ style="fill:none;stroke:#00b800;stroke-width:0.72000003;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" /></g><path
+ d="m 342.72,461.59 -13.56,50.16 48.72,0 13.56,-50.16 -48.72,0 z"
+ id="path72"
+ style="fill:#ffffff;fill-opacity:1;stroke:#00b800;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" /><g
+ transform="matrix(0,1,-1,0,718.75,123.67)"
+ id="g74"
+ style="fill:none;stroke:#808080;stroke-width:1.60000002;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"><path
+ d="m 283.32,265.39 9,0.24 8.88,0.6 8.76,1.2 8.76,1.68 8.64,2.04 8.52,2.52 8.4,3 8.28,3.36 8.04,3.84 7.8,4.2 7.56,4.68 7.32,5.04 7.08,5.4 6.84,5.88 6.36,6.12 6.12,6.36 5.88,6.84 5.4,7.08 5.04,7.32 4.68,7.56 4.2,7.8 3.84,8.04 3.36,8.28 3,8.4 2.52,8.52 2.04,8.64 1.68,8.76 1.2,8.76 0.6,8.88 0.24,9 -0.24,8.88 -0.6,8.88 -1.2,8.76 -1.68,8.76 -2.04,8.64 -2.52,8.52 -3,8.4 -3.36,8.28 -3.84,8.04 -4.2,7.8 -4.68,7.56 -5.04,7.32 -5.4,7.08 -5.88,6.84 -6.12,6.36 -6.36,6.24 -6.84,5.76 -7.08,5.4 -7.32,5.05 -7.56,4.67 -7.8,4.2 -8.04,3.84 -8.28,3.36 -8.4,3 -8.52,2.52 -8.64,2.16 -8.76,1.56 -8.76,1.2 -8.88,0.72 -9,0.12"
+ id="path76"
+ style="fill:none;stroke:#808080;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g><path
+ d="m 283.32,406.99 0,198.36"
+ id="path56"
+ style="fill:none;stroke:#0d6299;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-mid:none;marker-end:url(#Arrow2Mend)" /><path
+ d="m 360.24,486.67 97.44,0"
+ id="path68"
+ style="fill:none;stroke:#00b800;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow1Mend)" /><path
+ d="M 411.6,539.71 360.24,486.67 333.12,586.75"
+ id="path64"
+ style="fill:none;stroke:#00b800;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow1Mstart);marker-mid:none;marker-end:url(#Arrow1Mend)" /><text
+ x="277.50943"
+ y="-613.04358"
+ transform="scale(1,-1)"
+ id="text3721"
+ xml:space="preserve"
+ style="font-size:19.20000076px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif"><tspan
+ x="277.50943"
+ y="-613.04358"
+ id="tspan3727">Z</tspan></text>
+
+
+
+
+
+
+<text
+ x="488.21332"
+ y="-399.92703"
+ transform="scale(1,-1)"
+ id="text3721-4"
+ xml:space="preserve"
+ style="font-size:19.20000076px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif"><tspan
+ x="488.21332"
+ y="-399.92703"
+ id="tspan4386">Y</tspan></text>
+
+
+
+
+
+
+<text
+ x="238.70586"
+ y="-350.1015"
+ transform="scale(1,-1)"
+ id="text3721-4-9"
+ xml:space="preserve"
+ style="font-size:19.20000076px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif"><tspan
+ x="238.70586"
+ y="-350.1015"
+ id="tspan4386-4">X</tspan></text>
+
+
+
+
+
+
+<text
+ x="341.8902"
+ y="-575.89331"
+ transform="scale(1,-1)"
+ id="text3721-8"
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif"><tspan
+ x="341.8902"
+ y="-575.89331"
+ id="tspan3727-8">North</tspan></text>
+
+
+
+
+
+
+<text
+ x="435.72714"
+ y="-491.9921"
+ transform="scale(1,-1)"
+ id="text3721-8-2"
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif"><tspan
+ x="435.72714"
+ y="-491.9921"
+ id="tspan3727-8-4">East</tspan></text>
+
+
+
+
+
+
+<text
+ x="414.17657"
+ y="-527.3114"
+ transform="scale(1,-1)"
+ id="text3721-8-2-5"
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif"><tspan
+ x="414.17657"
+ y="-527.3114"
+ id="tspan3727-8-4-5">Up</tspan></text>
+
+
+
+
+
+
+<text
+ x="290.61334"
+ y="-612.47876"
+ transform="scale(1,-1)"
+ id="text3721-0"
+ xml:space="preserve"
+ style="font-size:19.20000076px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif"><tspan
+ x="290.61334"
+ y="-612.47876"
+ id="tspan3727-9"
+ style="font-size:11.19999981px">ecef</tspan></text>
+
+
+<text
+ x="501.1416"
+ y="-400.26947"
+ transform="scale(1,-1)"
+ id="text3721-0-4"
+ xml:space="preserve"
+ style="font-size:19.20000076px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif"><tspan
+ x="501.1416"
+ y="-400.26947"
+ id="tspan3727-9-8"
+ style="font-size:11.19999981px">ecef</tspan></text>
+
+
+<text
+ x="253.27524"
+ y="-351.07462"
+ transform="scale(1,-1)"
+ id="text3721-0-2"
+ xml:space="preserve"
+ style="font-size:19.20000076px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif"><tspan
+ x="253.27524"
+ y="-351.07462"
+ id="tspan3727-9-4"
+ style="font-size:11.19999981px">ecef</tspan></text>
+
+
+<g
+ transform="matrix(-1,0,0,1,314.12527,7.5684393)"
+ id="text4066"
+ style="font-size:32px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif"><path
+ d="m 63.106132,443.21212 11.436928,0.6089 -0.229685,4.3142 c -0.04044,0.75933 -0.107718,1.3373 -0.201842,1.73391 -0.123533,0.55671 -0.326725,1.01791 -0.609576,1.38361 -0.282873,0.36568 -0.667108,0.65164 -1.152709,0.8579 -0.485618,0.20623 -1.011876,0.29427 -1.578773,0.26409 -0.972587,-0.0518 -1.779164,-0.40506 -2.419733,-1.05983 -0.64058,-0.65478 -0.917809,-1.79091 -0.83169,-3.40841 l 0.156169,-2.93334 -4.649665,-0.24755 z m 5.91874,1.83288 -0.157415,2.95675 c -0.05206,0.97778 0.09301,1.6818 0.435204,2.11206 0.342187,0.43025 0.843544,0.66297 1.504074,0.69814 0.478481,0.0255 0.894495,-0.0737 1.248042,-0.29735 0.35353,-0.22372 0.595432,-0.5303 0.725706,-0.91975 0.08117,-0.25125 0.140036,-0.72014 0.176596,-1.40666 l 0.155754,-2.92555 z"
+ id="path5083"
+ style="font-size:16px" /><path
+ d="m 62.494207,453.68612 8.288312,0.37685 -0.05748,1.26431 -1.256515,-0.0571 c 0.57326,0.34932 0.947337,0.66481 1.122232,0.94648 0.174879,0.28167 0.254871,0.5864 0.239976,0.91419 -0.02154,0.47347 -0.194303,0.94788 -0.518304,1.42324 l -1.28134,-0.54313 c 0.218521,-0.33418 0.335592,-0.67296 0.351212,-1.01635 0.01395,-0.30698 -0.06587,-0.58693 -0.239444,-0.83987 -0.173593,-0.25294 -0.421914,-0.43889 -0.744963,-0.55785 -0.492393,-0.1788 -1.035154,-0.28168 -1.628287,-0.30865 l -4.339267,-0.19729 z"
+ id="path5085"
+ style="font-size:16px" /><path
+ d="m 72.064046,459.64751 1.614176,0.0987 -0.08579,1.40363 -1.614175,-0.0987 z m -9.817616,-0.60005 8.281421,0.50616 -0.08579,1.40363 -8.281421,-0.50616 z"
+ id="path5087"
+ style="font-size:16px" /><path
+ d="m 62.072234,462.59865 8.273028,0.62861 -0.0953,1.25419 -1.160717,-0.0882 c 0.385345,0.29044 0.684987,0.66056 0.898927,1.11036 0.213925,0.44979 0.299977,0.94993 0.258157,1.50043 -0.04657,0.61282 -0.211986,1.1056 -0.496246,1.47837 -0.284275,0.37276 -0.661032,0.62228 -1.130274,0.74855 0.916238,0.72776 1.334505,1.61616 1.254803,2.66523 -0.06235,0.82054 -0.337508,1.43427 -0.825462,1.84119 -0.487967,0.4069 -1.204542,0.57444 -2.149729,0.50264 l -5.678943,-0.4315 0.105951,-1.39442 5.211541,0.39598 c 0.560878,0.0426 0.968114,0.0279 1.22171,-0.0443 0.253584,-0.0721 0.464759,-0.22195 0.633524,-0.44939 0.168753,-0.22746 0.265366,-0.50218 0.289837,-0.82416 0.04419,-0.58166 -0.112565,-1.07934 -0.470263,-1.49304 -0.357711,-0.41372 -0.962419,-0.65293 -1.814125,-0.71763 l -4.806458,-0.36521 0.106543,-1.40221 5.375131,0.40842 c 0.623198,0.0473 1.099282,-0.0314 1.428252,-0.23622 0.328958,-0.20484 0.51317,-0.56692 0.552637,-1.08625 0.02998,-0.3947 -0.04616,-0.76743 -0.228439,-1.11818 -0.182289,-0.35076 -0.467653,-0.61664 -0.856092,-0.79762 -0.388451,-0.181 -0.959192,-0.3001 -1.712225,-0.35732 l -4.292315,-0.32614 z"
+ id="path5089"
+ style="font-size:16px" /><path
+ d="m 63.112413,481.79967 -0.313505,1.43024 c -0.824084,-0.30683 -1.44079,-0.7905 -1.850119,-1.45104 -0.409329,-0.66055 -0.569371,-1.47052 -0.480128,-2.42991 0.1124,-1.20833 0.573615,-2.13182 1.383645,-2.77048 0.81003,-0.63866 1.886624,-0.89551 3.229786,-0.77057 1.389828,0.12928 2.435218,0.58745 3.136173,1.37451 0.700941,0.78705 0.998351,1.75103 0.89223,2.89194 -0.102759,1.1046 -0.562677,1.97198 -1.379756,2.60215 -0.817092,0.63014 -1.907586,0.88178 -3.271484,0.75492 -0.08298,-0.008 -0.2072,-0.0219 -0.372665,-0.0425 l 0.573093,-6.1609 c -0.912368,-0.0326 -1.631162,0.15949 -2.156387,0.57618 -0.525227,0.41669 -0.81992,0.96989 -0.884079,1.65963 -0.04776,0.5134 0.04631,0.96416 0.282215,1.35226 0.2359,0.3881 0.63956,0.71596 1.210981,0.98358 z m 2.691313,-4.38677 -0.429095,4.6129 c 0.7007,0.002 1.238289,-0.12544 1.612767,-0.38353 0.580818,-0.39582 0.904275,-0.94897 0.97037,-1.65944 0.05981,-0.64306 -0.105115,-1.20372 -0.494779,-1.68196 -0.389676,-0.47826 -0.942763,-0.77425 -1.659263,-0.88797 z"
+ id="path5091"
+ style="font-size:16px" /><path
+ d="m 59.792635,489.32216 11.383842,1.25786 -0.250542,2.26745 -8.358053,1.80391 c -0.778099,0.16554 -1.359804,0.28467 -1.745119,0.35738 0.399845,0.17517 0.985813,0.44428 1.757906,0.80732 l 7.61938,3.60078 -0.223944,2.02673 -11.383842,-1.25786 0.16045,-1.4521 9.52795,1.0528 -9.162433,-4.36079 0.150154,-1.35892 10.05482,-2.22165 -9.691019,-1.07081 z"
+ id="path5093"
+ style="font-size:16px" /><path
+ d="m 60.144362,508.42535 -0.370341,1.41658 c -0.811182,-0.33947 -1.40809,-0.84738 -1.790728,-1.52372 -0.382638,-0.67637 -0.510223,-1.49208 -0.382757,-2.44715 0.16054,-1.20288 0.658247,-2.10722 1.493124,-2.71304 0.834875,-0.60581 1.920864,-0.81949 3.257969,-0.64104 1.38356,0.18465 2.409829,0.68418 3.078811,1.49859 0.668967,0.8144 0.927664,1.78949 0.77609,2.92526 -0.146767,1.09961 -0.64094,1.94794 -1.48252,2.54499 -0.841592,0.59703 -1.941261,0.80495 -3.29901,0.62374 -0.0826,-0.011 -0.20616,-0.0301 -0.37067,-0.0573 l 0.818543,-6.13312 c -0.91034,-0.0689 -1.636228,0.0943 -2.177666,0.48966 -0.54144,0.39539 -0.857979,0.93639 -0.949617,1.62302 -0.06821,0.51108 0.0078,0.96523 0.228016,1.36245 0.220221,0.3972 0.610473,0.74091 1.170756,1.03113 z m 2.864264,-4.27586 -0.612874,4.5921 c 0.700046,0.0304 1.242309,-0.0759 1.62679,-0.31885 0.596155,-0.37233 0.941432,-0.91212 1.035833,-1.61939 0.08543,-0.64016 -0.05699,-1.20695 -0.427251,-1.70037 -0.370277,-0.49343 -0.911109,-0.81126 -1.622498,-0.95349 z"
+ id="path5095"
+ style="font-size:16px" /><path
+ d="m 57.017756,511.24663 8.203227,1.24307 -0.18962,1.25134 -1.243615,-0.18845 c 0.533511,0.40744 0.872478,0.76039 1.016902,1.05883 0.144409,0.29844 0.192036,0.60987 0.142884,0.9343 -0.07102,0.4686 -0.292535,0.92231 -0.664552,1.36111 l -1.217391,-0.67438 c 0.252328,-0.30944 0.404246,-0.63409 0.455754,-0.97396 0.04603,-0.30383 -0.004,-0.5906 -0.150142,-0.86033 -0.146139,-0.26973 -0.373613,-0.48067 -0.682422,-0.63282 -0.470952,-0.2294 -0.999949,-0.38858 -1.586992,-0.47754 l -4.294722,-0.65079 z"
+ id="path5097"
+ style="font-size:16px" /><path
+ d="m 65.979482,517.99715 1.599793,0.23656 -0.2057,1.39112 -1.599793,-0.23655 z m -9.730141,-1.43875 8.207633,1.21362 -0.2057,1.39113 -8.207633,-1.21363 z"
+ id="path5099"
+ style="font-size:16px" /><path
+ d="m 54.756351,525.36962 1.030675,0.18346 c -0.717999,-0.66212 -0.987553,-1.49569 -0.808664,-2.50072 0.115914,-0.65123 0.401943,-1.21795 0.858087,-1.70016 0.456144,-0.48221 1.032678,-0.81604 1.729604,-1.00146 0.696922,-0.18543 1.463294,-0.20376 2.299118,-0.055 0.815306,0.14512 1.530795,0.41266 2.14647,0.80263 0.615662,0.38996 1.052029,0.8882 1.309104,1.49472 0.25706,0.60651 0.325811,1.24564 0.206255,1.91738 -0.08763,0.49225 -0.2695,0.91219 -0.545619,1.25982 -0.276133,0.34761 -0.602296,0.61225 -0.97849,0.79394 l 4.045786,0.72012 -0.245061,1.3768 -11.275898,-2.00704 z m 4.855545,-3.65092 c -1.046061,-0.1862 -1.867287,-0.10489 -2.463679,0.24391 -0.596395,0.3488 -0.947985,0.82318 -1.054771,1.42313 -0.107699,0.60506 0.04821,1.16316 0.467744,1.67428 0.419528,0.51111 1.136938,0.85702 2.152232,1.03774 1.117843,0.19896 1.976614,0.12963 2.576315,-0.20799 0.599691,-0.33765 0.95567,-0.82182 1.067939,-1.45252 0.109518,-0.61534 -0.05024,-1.17412 -0.479282,-1.67634 -0.429051,-0.50223 -1.18455,-0.84963 -2.266498,-1.04221 z"
+ id="path5101"
+ style="font-size:16px" /><path
+ d="m 63.779537,530.73494 1.587034,0.31084 -0.270294,1.38003 -1.587034,-0.31084 z m -9.652536,-1.89055 8.142171,1.59473 -0.270294,1.38003 -8.142171,-1.59474 z"
+ id="path5103"
+ style="font-size:16px" /><path
+ d="m 53.252402,537.8338 c -0.320697,-0.60367 -0.518405,-1.16033 -0.593125,-1.66998 -0.07472,-0.50966 -0.05287,-1.03411 0.06554,-1.57334 0.19549,-0.89025 0.563212,-1.52671 1.103167,-1.90939 0.539954,-0.38268 1.148225,-0.49974 1.824814,-0.35116 0.396794,0.0871 0.739423,0.25702 1.027889,0.50966 0.28846,0.25265 0.499774,0.54701 0.633944,0.88308 0.134161,0.33608 0.211901,0.69842 0.233217,1.08704 0.01201,0.28525 -0.0087,0.7073 -0.06207,1.26615 -0.111262,1.13803 -0.132853,1.98915 -0.06477,2.55334 0.187103,0.0464 0.306091,0.0752 0.356967,0.0864 0.559579,0.12287 0.982317,0.0797 1.268214,-0.12945 0.387387,-0.28287 0.657045,-0.77023 0.808974,-1.46207 0.141864,-0.64607 0.133401,-1.14785 -0.02539,-1.50532 -0.1588,-0.35749 -0.509421,-0.67311 -1.051865,-0.94686 l 0.478046,-1.30279 c 0.548029,0.24832 0.968104,0.5512 1.260227,0.90863 0.292108,0.35742 0.475461,0.82161 0.550059,1.39257 0.07458,0.57095 0.03536,1.20489 -0.117674,1.90183 -0.15193,0.69184 -0.356761,1.2361 -0.614495,1.63276 -0.257746,0.39666 -0.53232,0.66964 -0.823723,0.81895 -0.291415,0.1493 -0.634279,0.22332 -1.028595,0.22206 -0.244066,-0.006 -0.671324,-0.0754 -1.281775,-0.20948 l -1.831366,-0.40215 c -1.276869,-0.28039 -2.090873,-0.42848 -2.442014,-0.44426 -0.351139,-0.0158 -0.700857,0.0287 -1.049154,0.13356 l 0.315017,-1.43457 c 0.316159,-0.0799 0.669473,-0.0983 1.059943,-0.0552 z m 3.092672,0.55914 c -0.09401,-0.54323 -0.102764,-1.32902 -0.02625,-2.35737 0.0426,-0.58254 0.03872,-1.00199 -0.01163,-1.25834 -0.05036,-0.25635 -0.159502,-0.46962 -0.327427,-0.6398 -0.167929,-0.17019 -0.37144,-0.28153 -0.610533,-0.33403 -0.366275,-0.0804 -0.701942,-0.009 -1.007004,0.2148 -0.305064,0.22362 -0.516242,0.60251 -0.633535,1.13666 -0.116177,0.52906 -0.103775,1.02503 0.03721,1.48792 0.14098,0.46288 0.391187,0.8351 0.750622,1.11667 0.277918,0.21566 0.719561,0.38996 1.324931,0.5229 z"
+ id="path5105"
+ style="font-size:16px" /><path
+ d="m 51.49594,541.02374 8.010721,2.16021 -0.329523,1.22197 -1.139001,-0.30714 c 0.721357,0.82566 0.932194,1.79416 0.632512,2.90551 -0.130189,0.48275 -0.336606,0.90314 -0.619253,1.26118 -0.282659,0.35801 -0.59191,0.59963 -0.927754,0.72485 -0.335855,0.1252 -0.708232,0.17582 -1.117135,0.15187 -0.264999,-0.0175 -0.711791,-0.11103 -1.340375,-0.28053 l -4.925613,-1.32826 0.366137,-1.35775 4.872811,1.31402 c 0.553154,0.14916 0.981002,0.20789 1.283548,0.17621 0.302537,-0.0317 0.571798,-0.16004 0.807785,-0.385 0.235977,-0.22497 0.402786,-0.51848 0.500428,-0.88054 0.155941,-0.57831 0.106983,-1.1269 -0.146876,-1.64579 -0.253869,-0.51889 -0.893728,-0.91665 -1.919578,-1.19328 l -4.37497,-1.17978 z"
+ id="path5107"
+ style="font-size:16px" /></g>
+<text
+ x="315.86932"
+ y="-413.14511"
+ transform="scale(1,-1)"
+ id="text3721-8-2-5-1"
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif"><tspan
+ x="315.86932"
+ y="-413.14511"
+ id="tspan3727-8-4-5-7">φ</tspan></text>
+
+<text
+ x="292.20465"
+ y="-379.30618"
+ transform="scale(1,-1)"
+ id="text3721-8-2-5-1-1"
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif"><tspan
+ x="292.20465"
+ y="-379.30618"
+ id="tspan3727-8-4-5-7-1">λ</tspan></text>
+
+</g></svg> \ No newline at end of file
diff --git a/docs/source/operations/conversions/index.rst b/docs/source/operations/conversions/index.rst
index b0bd0d37..b335c2ac 100644
--- a/docs/source/operations/conversions/index.rst
+++ b/docs/source/operations/conversions/index.rst
@@ -19,4 +19,5 @@ conversions.
pop
push
set
+ topocentric
unitconvert
diff --git a/docs/source/operations/conversions/topocentric.rst b/docs/source/operations/conversions/topocentric.rst
new file mode 100644
index 00000000..828ef4e0
--- /dev/null
+++ b/docs/source/operations/conversions/topocentric.rst
@@ -0,0 +1,115 @@
+.. _topocentric:
+
+================================================================================
+Geocentric to topocentric conversion
+================================================================================
+
+.. versionadded:: 8.0.0
+
+Convert geocentric coordinates to topocentric coordinates (in the forward path).
+
++---------------------+--------------------------------------------------------+
+| **Alias** | topocentric |
++---------------------+--------------------------------------------------------+
+| **Domain** | 3D |
++---------------------+--------------------------------------------------------+
+| **Input type** | Geocentric cartesian coordinates |
++---------------------+--------------------------------------------------------+
+| **Output type** | Topocentric cartesian coordinates |
++---------------------+--------------------------------------------------------+
+
+This operation converts geocentric coordinate values (X, Y, Z) to topocentric
+(E/East, N/North, U/Up) values. This is also sometimes known as the ECEF (Earth
+Centered Earth Fixed) to ENU conversion.
+
+Topocentric coordinates are expressed in a frame whose East and North axis form
+a local tangent plane to the Earth's ellipsoidal surface fixed to a specific
+location (the topocentric origin), and the Up axis points upwards along the
+normal to that plane.
+
+.. image:: ./images/ECEF_ENU_Longitude_Latitude_relationships.png
+ :align: center
+ :scale: 100%
+ :alt: ENU coordinate frame
+
+..
+ Source : https://en.wikipedia.org/wiki/Local_tangent_plane_coordinates#/media/File:ECEF_ENU_Longitude_Latitude_relationships.svg
+ Public domain
+..
+
+The topocentric origin is a required parameter of the conversion, and can be
+expressed either as geocentric coordinates (``X_0``, ``Y_0`` and ``Z_0``) or
+as geographic coordinates (``lat_0``, ``lon_0``, ``h_0``).
+
+When conversion between geographic and topocentric coordinates is desired, the
+topocentric conversion must be preceded by the :ref:`cart` conversion to
+perform the initial geographic to geocentric coordinates conversion.
+
+The formulas used come from the "Geocentric/topocentric conversions" paragraph
+of :cite:`IOGP2018`
+
+Usage
+################################################################################
+
+Convert geocentric coordinates to topocentric coordinates, with the topocentric
+origin specified in geocentric coordinates::
+
+ echo 3771793.968 140253.342 5124304.349 2020 | \
+ cct -d 3 +proj=topocentric +ellps=WGS84 +X_0=3652755.3058 +Y_0=319574.6799 +Z_0=5201547.3536
+
+ -189013.869 -128642.040 -4220.171 2020.0000
+
+Convert geographic coordinates to topocentric coordinates, with the topocentric
+origin specified in geographic coordinates::
+
+ echo 2.12955 53.80939444 73 2020 | cct -d 3 +proj=pipeline \
+ +step +proj=cart +ellps=WGS84 \
+ +step +proj=topocentric +ellps=WGS84 +lon_0=5 +lat_0=55 +h_0=200
+
+ -189013.869 -128642.040 -4220.171 2020.0000
+
+
+Parameters
+################################################################################
+
+.. include:: ../options/ellps.rst
+
+Topocentric origin described as geocentric coordinates
+------------------------------------------------------
+
+.. note::
+
+ The below options are mutually exclusive with the ones to express the origin as geographic coordinates.
+
+.. option:: +X_0=<value>
+
+ Geocentric X value of the topocentric origin (in metre)
+
+.. option:: +Y_0=<value>
+
+ Geocentric Y value of the topocentric origin (in metre)
+
+.. option:: +Z_0=<value>
+
+ Geocentric Z value of the topocentric origin (in metre)
+
+Topocentric origin described as geographic coordinates
+------------------------------------------------------
+
+.. note::
+
+ The below options are mutually exclusive with the ones to express the origin as geocentric coordinates.
+
+.. option:: +lat_0=<value>
+
+ Latitude of topocentric origin (in degree)
+
+.. option:: +lon_0=<value>
+
+ Longitude of topocentric origin (in degree)
+
+.. option:: +h_0=<value>
+
+ Ellipsoidal height of topocentric origin (in metre)
+
+ *Defaults to 0.0.*
diff --git a/docs/source/operations/projections/isea.rst b/docs/source/operations/projections/isea.rst
index adb703a1..73f0af7a 100644
--- a/docs/source/operations/projections/isea.rst
+++ b/docs/source/operations/projections/isea.rst
@@ -43,7 +43,9 @@ Parameters
.. option:: +orient=<string>
- Can be set to either ``isea`` or ``pole``.
+ Can be set to either ``isea`` or ``pole``. See Snyder's Figure 12 for pole orientation :cite:`Snyder1992`.
+
+ *Defaults to isea*
.. option:: +azi=<value>
@@ -62,6 +64,8 @@ Parameters
.. option:: +mode=<string>
Can be either ``plane``, ``di``, ``dd`` or ``hex``.
+
+ *Defaults to plane*
.. include:: ../options/lon_0.rst
diff --git a/docs/source/operations/projections/merc.rst b/docs/source/operations/projections/merc.rst
index 7b6e13da..2107b7b2 100644
--- a/docs/source/operations/projections/merc.rst
+++ b/docs/source/operations/projections/merc.rst
@@ -158,7 +158,35 @@ Inverse projection
\lambda = \frac{x}{k_0 a}; \quad \psi = \frac{y}{k_0 a}
The latitude :math:`\phi` is found by inverting the equation for
-:math:`\psi` iteratively.
+:math:`\psi`. This follows the method given by :cite:`Karney2011tm`.
+Start by introducing the conformal latitude
+
+.. math::
+ \chi = \tan^{-1}\sinh\psi
+
+The tangents of the latitudes :math:`\tau = \tan\phi` and :math:`\tau' =
+\tan\chi = \sinh\psi` are related by
+
+.. math::
+ \tau' = \tau \sqrt{1 + \sigma^2} - \sigma \sqrt{1 + \tau^2}
+
+where
+
+.. math::
+ \sigma = \sinh\bigl(e \tanh^{-1}(e \tau/\sqrt{1 + \tau^2}) \bigr)
+
+This is obtained by taking the :math:`\sinh` of the equation for
+:math:`\psi` and using the multiple argument formula. The equation for
+:math:`\tau'` can be solved to give :math:`\tau` using Newton's method
+using :math:`\tau = \tau'/(1 - e^2)` as an initial guess and with the
+needed derivative given by
+
+..math::
+ \frac{d\tau'}{d\tau} = \frac{1 - e^2}{1 + (1 - e^2)\tau^2}
+ \sqrt{1 + \tau'^2} \sqrt{1 + \tau^2}
+
+This converges after no more than 2 iterations. Finally set
+:math:`\phi=\tan^{-1}\tau`.
Further reading
###############
diff --git a/docs/source/operations/projections/utm.rst b/docs/source/operations/projections/utm.rst
index 82715a02..cbbda09d 100644
--- a/docs/source/operations/projections/utm.rst
+++ b/docs/source/operations/projections/utm.rst
@@ -6,7 +6,7 @@ Universal Transverse Mercator (UTM)
The Universal Transverse Mercator is a system of map projections divided into
sixty zones across the globe, with each zone corresponding to 6 degrees of
-longigude.
+longitude.
+---------------------+----------------------------------------------------------+
| **Classification** | Transverse cylindrical, conformal |