:author: `Liming Li <https://github.com/cugliming>`_, 周茂, 陈箫翰
:date: 2026-01-05

.. index:: ! mapproject
.. program:: mapproject

mapproject
====================

:官方文档: :doc:`gmt:mapproject`
:简介: 地图投影的正反变换、数据转换以及大地测量计算

**mapproject** 可完成如下计算功能：

#. 地图投影，读取经纬度数据，并使用指定的地图投影和比例尺计算投影坐标 (x,y)
#. 地图投影逆变换，读取 (x,y), 计算经纬度；此功能可以将已知投影类型的地图数字化，再将其变换为地理坐标
#. 坐标反算/大地主题反算，计算沿轨点列之间的距离与方位角，或到固定点的距离和方位角
#. 计算点到最近线段的距离
#. 基准转换，用于将某基准/椭球下的坐标转换为另一基准/椭球
#. 不同纬度之间的转换，包括大地纬度、地心纬度等
#. 大地坐标与空间直角坐标的转换
#. 确定地图范围/绘图范围

语法
----

**gmt mapproject**
[ *table* ]
[ :option:`-A`\ **b**\|\ **f**\|\ **o**\ [*lon0*/*lat0*][**+v**] ]
[ :option:`-C`\ [*dx*/*dy*][**+m**] ]
[ :option:`-D`\ **c**\|\ **i**\|\ **p** ]
[ :option:`-E`\ [*datum*] ]
[ :option:`-F`\ [**e**\|\ **f**\|\ **k**\|\ **M**\|\ **n**\|\ **u**\|\ **c**\|\ **i**\|\ **p**] ]
[ :option:`-G`\ [*lon0*/*lat0*][**+a**][**+i**][**+u**\ *unit*][**+v**] ]
[ :option:`-I` ]
[ :option:`-J`\ *parameters* ]
[ :option:`-L`\ *table*\ [**+p**][**+u**\ *unit*] ]
[ :option:`-N`\ [**a**\|\ **c**\|\ **g**\|\ **m**] ]
[ :option:`-Q`\ [**d**\|\ **e**] ]
[ :option:`-R`\ *region* ]
[ :option:`-S` ]
[ :option:`-T`\ [**h**]\ *from*\ [/*to*] ]
[ :option:`-V`\ [*level*] ]
[ :option:`-W`\ [**b**\|\ **B**\|\ **e**\|\ **E**\|\ **g**\|\ **h**\|\ **j**\|\ **m**\|\ **M**\|\ **n**\|\ **o**\|\ **O**\|\ **r**\|\ **R**\|\ **w**\|\ **s**\|\ **x**][**+n**\ [*nx*\ [/*ny*]]] ]
[ :option:`-Z`\ [*speed*][**+a**][**+i**][**+f**][**+t**\ *epoch*] ]
[ :option:`-bi`\ *binary* ]
[ :option:`-bo`\ *binary* ]
[ :option:`-d`\ *nodata*\ [**+c**\ *col*] ]
[ :option:`-e`\ *regexp* ]
[ :option:`-f`\ *flags* ]
[ :option:`-g`\ *gaps* ]
[ :option:`-h`\ *headers* ]
[ :option:`-i`\ *flags* ]
[ :option:`-j`\ *flags* ]
[ :option:`-o`\ *flags* ]
[ :option:`-p`\ *flags* ]
[ :option:`-q`\ *flags* ]
[ :option:`-s`\ *flags* ]
[ :option:`-:`\ [**i**\|\ **o**] ]
[ :doc:`--PAR=value </conf/overview>` ]

输入数据
----------------

.. include:: explain_intables.rst_

可选选项
--------

.. option:: -A

**-Ab**\|\ **f**\|\ **o**\ [*lon0*/*lat0*][**+v**]
    计算沿着某轨迹，或到某固定点 (lon0/lat0) 的方位角。

    - **-Af** 计算每个数据点的（前向）方位角
    - **-Ab** 计算数据点到固定点的反方位角
    - **-Ao** 可获得 (-90/90) 方向，而非方位角 (0/360)

    使用 :option:`-j`\ **e** 选项可在椭球体而非球面上计算方位角。
    如果没有给出固定点，则从上一个点开始计算方位角或反方位角。
    附加 **+v** 选项通过输入文件的第 3-4 列获取“可变”的第二个点 (*lon0*/*lat0*)。

    有关 :option:`-A` 如何影响输出记录，请参见 `输出顺序`_ 。
    如果指定了 :option:`-R` 和 :option:`-J` 选项，则先进行投影，然后再计算投影后笛卡尔坐标下的方位角。

.. option:: -C

**-C**\ [*dx*/*dy*][**+m**]
   将投影坐标的中心设置为地图投影中心 [默认为左下角]。
   也可以通过指定 *dx*/*dy* 来设置投影中心在东方向和北方向的偏移量。
   投影结果将加上该偏移量，详见 `示例`_ 中的高斯投影和 UTM 投影。
   如果和 :option:`-I` 选项 同时使用，则先减去该偏移量，然后再进行逆投影变换。
   偏移量的单位是有效的绘图距离单位（请参阅 :term:`PROJ_LENGTH_UNIT` ），
   但如果使用了 :option:`-F` 选项，则偏移量单位为米。
   对于 Mercator 投影，附加 **+m** 选项可将投影 *y* 坐标的原点设置为与标准纬线重合 [默认为赤道]。

.. option:: -D

**-Dc**\|\ **i**\|\ **p**
   临时覆盖 :term:`PROJ_LENGTH_UNIT`，并改用 **c** (cm)，**i** (inch) 或 **p** (points) 为单位。
   该选项不能与 :option:`-F` 一起使用。

.. option:: -E

**-E**\ [*datum*]
    将大地坐标 (lon,lat,height) 转换为以地球为中心的地球固定坐标 (ECEF) (x,y,z)，使用 :option:`-I` 选项
    可实现逆向转换。追加基准的 ID *datum* （见 :option:`-Q`\ **d** 选项）或者通过 *ellipsoid*:*dx*,\ *dy*,\ *dz*
    可指定基准，其中 *ellipsoid* 为椭球名称（见 :option:`-Q`\ **e**）。*ellipsoid* 除可用 :option:`-Q`\ **e** 列出
    的椭球外，还可使用 *a*\ [,\ *inv_f*] 的形式通过给定椭球长半轴和扁率的倒数来指定椭球，其中
    扁率的倒数默认为 0。不指定基准时，默认使用 WGS-84。

.. option:: -F

**-F**\ [**e**\|\ **f**\|\ **k**\|\ **M**\|\ **n**\|\ **u**\|\ **c**\|\ **i**\|\ **p**]
   强制使用 1:1 比例尺，即输出数据（或输入，参见 :option:`-I` ）为真实投影下的米数。
   如果要指定其他单位，请附加所需的单位（请参阅 :doc:`/basis/unit` ）。
   在不使用 :option:`-F` 且使用经典 :option:`-J` 语法时，
   输出（或输入，请参见 :option:`-I` ）使用 :term:`PROJ_LENGTH_UNIT` 指定的单位（或由 :option:`-D` 选项指定）。
   当在 :option:`-J` 中使用 PROJ4 语法或 EPSG 时，无论是否使用 :option:`-F`，单位都会变为米。

.. option:: -G

**-G**\ [*lon0*/*lat0*][**+a**][**+i**][**+u**\ *unit*][**+v**]
    计算沿某轨迹的距离，或到某固定点 *lon0*/*lat0* 的距离。
    如果没有给出固定点，默认将计算沿输入点定义的轨迹的累积距离。
    如果给出了固定点，则默认计算增量距离。可以附加以下选项改变默认计算方式：

    - **+a** ：计算累积距离。
    - **+i** ：计算增量距离。同时使用 **+a** 和 **+i** 可同时获得累积距离及增量距离。
    - **+u** ：指定单位及距离计算方式，参见 :doc:`/basis/unit` ，默认使用等面积半径的大圆路径。
      其中 *unit* 可以设置为 **c** 表示使用输入坐标的笛卡尔距离，
      设置为 **C** 表示使用投影坐标的笛卡尔距离。
      **C** 需要设置 :option:`-R` 和 :option:`-J` ，且所有输出坐标都将以投影坐标形式报告。
    - **+v** ：通过输入文件的第 3-4 列获取“可变”的第二个点 (*lon0*/*lat0*)。
      将针对每条记录更新固定点，因此默认计算方式将变为计算增量距离。

    关于 :option:`-G` 如何影响输出记录的信息，参见 `输出顺序`_

.. option:: -I

**-I**
   进行逆变换，例如：从 (x,y) 数据获取经纬度。

.. include:: explain_-J.rst_

.. option:: -L

**-L**\ *table*\ [**+p**][**+u**\ *unit*\|\ *c*\|\ *C*]
    获取输入点到 ASCII 多段文件 *table* 中的线的最短距离。该距离和最近点的坐标将追加到输出的最后三列。

    - **+u** ：指定单位及距离计算方式，参见 :doc:`/basis/unit` ，默认使用等面积半径的大圆路径。
      其中 *unit* 可以设置为 **c** 表示使用输入坐标的笛卡尔距离，
      设置为 **C** 表示使用投影坐标的笛卡尔距离。
      **C** 需要设置 :option:`-R` 和 :option:`-J` ，且所有输出坐标都将以投影坐标形式报告。
    - **+p** ：报告线段 ID *seg* 和小数形式的最近点编号 *pnr*，不报告最近点的坐标。

    :option:`-L` 选项对输出记录的信息顺序的影响，请参见 `输出顺序`_ 。
    **注** ：对于地理坐标来说，距离的计算使用球面模型，因此本选项不能与 :option:`-j`\ **e** 选项同时使用。

.. option:: -N

**-N**\ [**a**\|\ **c**\|\ **g**\|\ **m**]
    从大地纬度（使用当前的椭球，参阅 :term:`PROJ_ELLIPSOID`）转换为其他辅助纬度，经度不受影响。

    - **a** - 转换为等面积纬度 (authalic latitudes)。
    - **c** - 转换为正形纬度 (conformal latitudes)。
    - **g** - 转换为地心纬度 (geocentric latitudes) [默认]。
    - **m** - 转换为子午线纬度 (meridional latitudes)。

    与 :option:`-I` 选项同时使用，可实现反向变换。

.. option:: -Q

**-Q**\ [**d**\|\ **e**]
   列出所有投影参数。 **-Qd**，仅列出基准， **-Qe** 仅列出椭球。

.. include:: explain_-R.rst_
..

    UTM 投影比较特殊：如果使用 :option:`-C` 选项且未指定 :option:`-R` 范围，
    则将区域设置为给定的 UTM 区域，以保留完整的椭球解。

.. option:: -S

**-S**
   不转换区域之外的点

.. option:: -T

**-T**\ [**h**]\ *from*\ [/*to*]
   使用标准的 Molodensky 转换将基准从 *from* 转换到 *to*。
   如果使用 **-Th** ，则表明除坐标转换外，还进行大地高转换，若输入数据包含 3 列，
   则最后一列为高度，若不含第三列，则默认高度为 0，即点位于椭球面上。
   基准可通过基准 ID（参见 **-Qd**）指定或通过 *ellipsoid*:*dx*,\ *dy*,\ *dz*
   指定；其中 *ellipsoid* 为椭球，dx，dy，dz为椭球中心和地心在三个方向的差异。
   其中椭球可以是椭球ID（参见 **-Qe**），也可以指定为 *a*\ [,\ *inv_f*]，其中 a
   是椭球长半轴，inv_f 是椭球扁率的倒数，如果省略，则为 0）。若不指定转换后的
   基准，则假定为 WGS84。:option:`-T` 和 :option:`-R` 以及 :option:`-J` 同时使用时，会先做基准转换，然后
   投影。用户在使用时需注意 :term:`PROJ_ELLIPSOID` 设置的椭球是否正确。

.. include:: explain_-V.rst_

.. option:: -W

**-W**\ [**b**\|\ **B**\|\ **e**\|\ **E**\|\ **g**\|\ **h**\|\ **j**\|\ **m**\|\ **M**\|\ **n**\|\ **o**\|\ **O**\|\ **r**\|\ **R**\|\ **s**\|\ **w**\|\ **x**][**+n**\ [*nx*\ [/*ny*]]]
    报告以投影单位或地理单位表示的各种绘图尺寸或地图区域，不读取任何输入文件。
    在没有参数的情况下，将报告地图的宽度和高度。可以通过 :option:`-D` 更改报告绘图尺寸所采用的单位。
    可以使用以下附加选项：

    - **b** - 获取以经纬度表示的边界框。
    - **B** - 同上，但以 -Rw/e/s/n 字符串格式作为尾随文本返回结果。
    - **e** - 返回由 :option:`-R` 和 :option:`-J` 定义的非矩形区域覆盖的矩形区域坐标。
    - **E** - 同上，但以 -Rw/e/s/n 字符串格式作为尾随文本返回。
    - **g** - 输出附加地图点 *lon*/*lat* 的绘图坐标。
    - **h** - 仅输出地图的高度。
    - **j** - 输出参考点 *code* 的地图坐标，参考点 *code* 的定义请见 :doc:`/basis/anchor` 。
    - **n** - 同上，但参考点 *rx*/*ry* 以 0-1 范围内的归一化位置给出。
    - **o** - 如果通过 :option:`-R`\ *xmin/xmax/ymin/ymax*\ **+u**\ *unit* 设置了斜向定义域，
      则返回以度为单位的对角顶点坐标（顺序为 *llx urx lly ury*）。
    - **O** - 同上，但以等效的 -Rw/e/s/n 字符串格式作为尾随文本返回。
    - **m** - 改为获取投影绘图坐标下的矩形区域。
    - **M** - 同上，但以 -Rw/e/s/n 字符串格式作为尾随文本返回。
    - **r** - 输出由 :option:`-R` 和 :option:`-J` 定义的斜向区域覆盖的矩形范围。
    - **R** - 同上，但以 -Rw/e/s/n 字符串格式作为尾随文本返回结果。
    - **s** - 以 1:xxxxxx 的形式输出地图比例尺。
    - **w** - 以当前绘图单位输出地图的宽度。
    - **x** - 输出特定绘图参考点 *px*/*py* 的地图坐标。

    其中， **e** 或 **r** 选项后追加 **+n** 可设置斜向区域闭合多边形每条边上的点数 *nx*/*ny* [默认为 100]。
    输出所有点构成多边形，而不是只输出四个角点。

    .. gmtplot:: mapproject/GMT_obl_regions.sh
        :width: 80%
        :show-code: false

        倾斜投影区域（红框范围）和常规区域（黑框范围）。左图中红色区域为倾斜的，可以使用 :option:`-W`\ **r|R** 获取对应的整个范围的矩形经纬度范围。右图中黑色框是立体投影的范围，红色框为其对应的矩形范围，使用 :option:`-W`\ **e|E** 可获取红色框范围

.. option:: -Z

**-Z**\ [*speed*][**+a**][**+i**][**+f**][**+t**\ *epoch*]
    指定行进速度 *speed* ，计算沿 :option:`-G` 指定轨迹的行进时间，如果不指定速度，则会从
    第 3 列读取。速度为单位时间（单位由 :term:`TIME_UNIT` [m/s] 指定）内通过的距离。

    - **+i** ：输出每两个相邻点之间的行进时间。
    - **+a** ：输出累积的行进时间。同时使用则获取两种时间信息。
    - **+f** ：将累积的行进时间转换为 ISO 8601 规定格式。
      时间中秒的小数位数，默认使用 :term:`FORMAT_CLOCK_OUT` 设置的值。
    - **+t**：设置一个时间历元 *epoch* ，输出相邻点的绝对时间。
      由于上述操作需要点之间的距离，因此需要在 :option:`-G` 选项中使用 **+i** 。

    本选项对输出记录的信息顺序的影响，请参见 `输出顺序`_ 。

.. include:: explain_-bi.rst_

.. include:: explain_-bo.rst_

.. include:: explain_-d.rst_

.. include:: explain_-e.rst_

.. include:: explain_-f.rst_

.. include:: explain_-g.rst_

.. include:: explain_-h.rst_

.. include:: explain_-icols.rst_

.. include:: explain_distcalc.rst_

.. include:: explain_-ocols.rst_

.. include:: explain_perspective.rst_

.. include:: explain_-q.rst_

.. include:: explain_-s.rst_

.. include:: explain_colon.rst_

.. include:: explain_help.rst_

.. include:: explain_distunits.rst_

.. include:: explain_precision.rst_

存在的限制
----------

使用 :option:`-R` 指定的矩形区域在经过投影后，范围变成了非矩形。除非使用 :option:`-C`, 否则投影
后的网格的最左边的坐标将为 0，最下面的坐标也为 0。因此，在对地图数字化前，应该
使用 **mapproject** 对地图的几个角点的坐标极值进行一定的计算，以确定适合的比例尺
和地图左下角的坐标。在数字化时，使用这些值以保证正反算结果正确；或者，可以使用
类 Unix 系统中的 **awk** 命令将比例尺和偏移添加到坐标中。

对于某些投影，即使设置了参考椭球为某个椭球，仍然会使用球解法。一般只有 :option:`-R` 设置
范围超出椭球展开的有效范围时会出现这种情况。包括下面几种投影：

#. Lambert Conformal Comic (**-JN**) 和 Albers Equal-Area (**-JB**) 将会在地图比例尺
   超过 1.0E7 时使用球解法。
#. Transverse Mercator (**-JT**) 和 UTM (**-JU**) 当 :option:`-R` 指定的范围的东西边界
   超过中央子午线 10 度以上时，使用球解法；
#. Cassini (**-JC**) 与上面相同，但超过 4 度就使用球解法；
#. 所有的圆锥投影，在经度范围小于 90 度时，使用球解法。

椭球和球
--------

上述计算中，如果用户选择的椭球不为球，且基于椭球的公式已经实现，则 GMT 使用相应的
椭球公式，椭球选择见 :term:`PROJ_ELLIPSOID`。用户需要注意的一些隐患如下：

#. 对于某些投影，如横轴墨卡托投影，Albers，以及 Lambert 投影，当计算区域较小时，
   使用椭球公式，当计算区域较大时，则使用球面公式，同时将纬度替换为对应的辅助
   纬度；具体情况在 `存在的限制`_ 章节中已经介绍；
#. 当用户想检查一些历史数据时，可能会发现 GMT 给出的计算结果和历史数据有轻微的不同，
   其中一个原因是，早期的 GMT 计算使用的有效数字位数比较少，例如，Clarke 1866 椭球
   的扁率为 1/294.98，GMT 对扁率做平方后使用，值为 0.00676862818，但是早期的版本为
   0.00676866。这会导致十几个厘米的差异。如果用户需要复现以前的计算结果，则需要自己
   指定椭球扁率。另一个原因可能是，早期的数据使用了和现在不同的基准面，这可能会导致
   几十甚至几百米的差异。
#. :term:`PROJ_SCALE_FACTOR` 对于某些投影来说有特定的默认值，用户若想实现某些设置需
   手动设置该参数，见 `示例`_ 中的高斯投影。

输出顺序
--------

选项 :option:`-A`、:option:`-G`、:option:`-L` 和 :option:`-Z` 生成的数据一律按这几个选项的字母顺序排序。
因此，这些选项在命令中出现的顺序无关紧要。当然，输出顺序也可以用 :option:`-o` 选项调整。

示例
----

**Mercator 投影**

将经纬度坐标使用 Mercator 投影转换为平面坐标，1 度对应画布上 0.5 cm::

    gmt mapproject @waypoints.txt -R-180/180/-72/72 -Jm0.5c -:

**UTM 投影与高斯投影及其逆变换**

将经纬度坐标使用 UTM 投影转换为平面坐标，下面经纬度坐标位于 UTM 的 51 投影带，
投影中心的坐标为 (0,0)，投影后坐标单位为米::

    $ echo 121 32 | gmt mapproject -Ju51/1:1 -C -F
    311072.361931	3542183.49115

GMT 中并无高斯投影（Gauss-Kruger），但其与 UTM 投影都是横轴墨卡托投影的变种，因此
可用 UTM 投影经过一定的设置近似实现，其中
UTM 和高斯投影的主要不同在于带号和中央经线投影的比例因子，高斯投影为切椭圆柱投影，
因此其比例因子为 1， UTM 为割椭圆柱投影，其比例因子为 0.9996，因此上述经纬度的 6
度带高斯投影为::

    $ echo 121 32 | gmt mapproject -Ju51/1:1 -C -F --PROJ_SCALE_FACTOR=1
    310996.760635	3543600.93152

此外，可以使用横轴墨卡托投用实现 UTM 和高斯投影::

    $ echo 121 32 | gmt mapproject -Jt123/0/1:1 -C500000/0 -R120/126/30/40 -F --PROJ_SCALE_FACTOR=0.9996
    311072.361931	3542183.49115
    $ echo 121 32 | gmt mapproject -Jt123/0/1:1 -C500000/0 -R120/126/30/40 -F --PROJ_SCALE_FACTOR=1
    310996.760635	3543600.93152

需要注意的是，上述的代码均基于默认椭球（WGS-84），若需其他椭球，需手动设置，也可
通过 PROJ 的形式指定 EPSG 代码实现，详见 :doc:`/option/J`。

将平面坐标使用 UTM 投影逆变换转换为经纬度坐标，平面坐标单位为 m，对应的带号为 51 ::

    $ echo 311072.4 3542183.5 | gmt mapproject -Ju51/1:1 -C -F -I
    121.000000401   32.0000000858

    # 将高斯坐标转换为经纬度
    $ echo 310996.760635 3543600.93152 | gmt mapproject -Ju51/1:1 -C -F -I --PROJ_SCALE_FACTOR=1
    121 31.9999999997

**不同纬度的转换**

::

    # 将大地纬度转换为地心纬度
    $ echo 0 45 | gmt mapproject -Ng
    0	44.807576784

    # 将地心纬度转换为大地纬度
    $ echo 0 44.807576784 | gmt mapproject -Ng -I
    0	45

**笛卡尔坐标反算与大地主题反算**

假定一平面坐标（0,0），计算其与坐标 (1,1) 之间的距离和方位角::

    $ echo 0 0 | gmt mapproject -Ab1/1 -G1/1+uc
    0	0	45	1.41421356237

输出信息分别为横纵坐标，方位角以及距离；设置输出单位为 km，距离计算方式
(这里使用椭球面距离)，可计算两个经纬度坐标之间的方位角和距离::

    $ echo 0 0 | gmt mapproject -Ab1/1 -G1/1+uk -jg
    0	0	44.9956364553	156.898594962

**基准转换**

将点 (0,0) 从香港使用的 1924 年国际椭球转换为 WGS-84 椭球::

    $ echo 0 0 | gmt mapproject -T
    -0.00243433862099	-0.00170923972985

对于带有大地高的坐标 (0,0,0)，将其从 CGCS2000 椭球转换为 WGS-84 椭球，由于 GMT
中没有 CGCS2000 的 ID，因此需通过参数指定::

    $ echo 0 0 0 | gmt mapproject -Th6378137,298.257222101:0,0,0/219
    0 0 0

由于 CSCS2000 椭球与 WGS-84 椭球极为接近，因此其转换后的经纬度和大地高均未有
明显变化

**大地坐标和经纬度的转换**

::

    $ echo 10 10 10 | gmt mapproject -E219
    6186446.76449	1090837.4793	1100250.28422

    $ echo 6186446.76449	1090837.4793	1100250.28422 | gmt mapproject -E219 -I
    10	10	9.99999782909

**点到线段的距离**

计算 :file:`quakes.txt` 中的点到 :file:`coastline.txt` 中每段线的最短距离，
距离单位为 km ::

    gmt mapproject quakes.txt -Lcoastline.txt+uk > quake_dist.txt

**计算沿轨累计距离和时间**

假定船速度为 12 Knots，计算沿轨迹累计距离和航行时间::

    gmt mapproject track.txt -G+un+a+i -Z12+a --TIME_UNIT=h > elapsed_time.txt

**:option:`-W` 选项的使用**

1. 确定横轴墨卡托投影地图的中点的地图坐标::

    gmt mapproject -R-80/-70/20/40 -Jt-75/1:500000 -WjCM > mid_point.txt

2. 确定倾斜墨卡托投影覆盖的矩形区域::

    gmt mapproject -R270/20/305/25+r -JOc280/25.5/22/69/2c -WR

3. 确定矩形绘图范围对应的实际地图坐标范围::

    gmt mapproject -R-2800/2400/-570/630+uk -Joc190/25/266/68/1:1 -WO

4. 获取矩形绘图范围对应的实际地图范围的多边形，坐标为地理坐标::

    gmt mapproject -R-2800/2400/-570/630+uk -Joc190/25/266/68/1:1 -Wr+n > polygon.txt

5. 确定立体投影确定的非矩形区域对应的矩形范围::

    gmt mapproject -JS36/90/30c -R-15/60/68/90 -WE

参考文献
--------

Bomford, G., 1952, Geodesy, Oxford U. Press.

Snyder, J. P., 1987, Map Projections - A Working Manual, U.S. Geological
Survey Prof. Paper 1395.

Vanicek, P. and Krakiwsky, E, 1982, Geodesy - The Concepts,
North-Holland Publ., ISBN: 0 444 86149 1.

相关模块
--------

:doc:`project`,
:doc:`grdproject`
