PROJ.4简介

PROJ.4是开源GIS最著名的地图投影库,它专注于地图投影的表达,以及转换,许多GIS开源软件的投影都直接使用Proj.4的库文件。GDAL中的投影转换函数(类CoordinateTransformation中的函数)也是动态调用该库函数的。

Proj.4的功能主要有经纬度坐标与地理坐标的转换,坐标系的转换,包括基准变换等。地图投影的表达方式有多种,由于采用一种非常简单明了的投影表达--PROJ.4比其它的投影定义简单,很容易就能看到各种地理坐标系和地图投影的参数,同时它强大的投影转换功能,也是非常吸引人的。

PROJ.4 在 Window 的命令下有可运行的 EXE文件,其实它更主要的是一个类库!在 Linux下除了可以直接运行外,还可以作为库来进行更高功能的开发。可以用来开发一些批处理功能。

安装

Window下安装

从 PROJ.4 的网站下载,解压缩,并安装文件(bin压缩包)。 按照Readme说明用DOS命令将文件夹添加到系统环境变量, 之后可用示例数据测试经纬度与平面坐标的转换。(DOS命令不会的自行解决。)

PROJ.4的官方网站为 http://trac.osgeo.org/proj/

用DOS命令添加系统环境变量,当此次命令结束,系统环境变量即恢复原状,下次使用仍需要添加。 若在“我的电脑”属性里添加系统环境变量,则一次设置可多次使用。若进行开发的话,可以使用pyproj。

Debian/Ubuntu Linux下安装

在Debian Stretch中,可以在终端输入:

# apt-get install proj-bin python3-pyproj    

其中proj-bin为 PROJ.4 的命令行工具,实现了在Linux下的Shell环境中进行地图投影处理的功能; python3-pyproj则是在 Python 3中的实现。

pyproj在 Windows 和 Linux下都很好安装。 pyproj 原来托管在 Google Code,后来迁移到 GitHub https://github.com/jswhit/pyproj

Pyporj是 Python下的 proj。 可以很方便的对点进行地图投影转换。 同时还可以在它的基础上开发出更高级的应用。 Pyproj包里包括两个类, Proj 类和 Geod 类。

安装完成后,使用下面语句导入Proj类

In [1]:
from pyproj import Proj    

在导入 Pyproj后可以用其内部的 test() 函数进行运行,例如:运行 pyproj.test() ,会执行测试。

In [ ]:
 

pip安装

pip环境下的安装,使用如下:

pip install pyproj

在PROJ.4中了解基准面与椭球体

使用proj命令查看椭球体参数

proj 命令是对地球经纬度进行投影的,即将经纬度坐标转换为地理坐标。 当然也可以将地理坐标转换为经纬度坐标。即在终端下输入:

$ proj
Rel. 4.7.1, 23 September 2009
usage: proj [ -beEfiIlormsStTvVwW [args] ] [ +opts[=arg] ] [ files ]

会显示出 proj 程序的用法。包括参数设置,可选项,和输入文件。

显示参数

我们可以使用下边的命令来显示 proj 里内置的有关地图投影的参数。 显示投影类型:

$ proj -l | wc -l
126
$ proj -l
aea: Albers Equal Area
aeqd: Azimuthal Equidistant
... ... ...
wintri: Winkel Tripel

在 Debian Wheezy中,一共有投影类型126个,Debian Jessie中为132 个,在Debian Stretch中则为140个。 为缩减篇幅,只列出部分投影。其中第一个就是中国常用的阿尔波斯投影。

PROJ.4支持许多长度单位,可以通过参数 -lu,看到支持的单位:

$  proj -lu | wc -l
21
$ proj -lu
         km 1000.                Kilometer
          m 1.                   Meter
        ... ...                  ...
     ind-ch 20.11669506          Indian Chain

同样的,还有参数-le,显示支持的椭球体(ellipsoid)信息, 以及各个椭球体向WGS 84椭球体的转换参数。

$ proj -le | wc -l
42
$ proj -le
    MERIT a=6378137.0      rf=298.257       MERIT 1983
    SGS85 a=6378136.0      rf=298.257       Soviet Geodetic System 85
    ... ... ...
   sphere a=6370997.0      b=6370997.0      Normal Sphere (r=6370997)

注意:最后一个,是一个球,而不是椭球。

参数-ld, 显示Proj4支持的基准面(Datum)信息。

$proj -ld
__datum_id__ __ellipse___ __definition/comments______________________________
       WGS84 WGS84        towgs84=0,0,0
      GGRS87 GRS80        towgs84=-199.87,74.79,246.62
                          Greek_Geodetic_Reference_System_1987
      ... ... ...
      OSGB36 airy         towgs84=446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894
                          Airy 1830

可以看到,WGS84是目前最常用的椭球体,且其他椭球体的定义,都是相对WGS84的参数而定义的(towgs84)。

大地水准面与椭球体

地球是一个表面很复杂的球体, 人们以假想的平均静止的海水面形成的“大地体”为参照, 推求出近似的椭球体,并通过了理论和实践证明, 该椭球体以地球短轴为轴的椭圆而旋转的椭球面, 而且这个椭球面也可以用数学公式来进行表达。

为此,人们从数学角度出发,选择了一个形状和大小与大地球体均极为相似的旋转椭球面来描述地球表层,这也被称为地球椭球面。

大地水准面

众所周知,地球是一个近似球体,其自然表面是一个极其复杂且不规则的曲面。

地球形状更为精确的定义,尤其在通过同一大地水准面准定的高度时。 这一过程相当复杂的物理计算由地球质量产生。 地球上从一个区域到另一区域会有不同的厚度,因此会有不同的重力,而这重力影响了地球的形状。 所以,大地水准面表现了地球的重力场。 看一下上图,我们会发现地球的形状实际上是“扭曲”了的。 为了避免数学上的复杂性,在GIS通常将地球的形状显示为椭球。

大地测量中用水准测量方法得到的地面上各点的高程是依据一个理想的水准面来确定的, 该水准面通常称为“大地基准面”。 大地水准面是假定海水处于“完全”静止状态,将海水面延伸到大陆之下形成包围整个地球的连续表面; 大地水准面所包围的球体称为大地球体。 由于大地水准面上任何一点的铅垂线都与大地水准面成正交, 而铅垂线的方向又受地球内部质量分布不均匀的影响而有微小变化, 导致大地水准而产生微小的起伏。 因此,大地球体仍然是一个表面起伏的不规则球体,还不能直接作为投影的依据。

大地水准面是对地球形状的一个抽象、简化的表达。

地球椭球体

大地水准面所包围的形体,叫大地球体。大地水准面形状十分复杂,但从整体来看,起伏是微小的,它是一个很接近于绕自转轴(短轴) 旋转的椭球体。为了描述和表达地球表面,必须选择一个与地球形状、大小相接近的椭球体来近似代替它。 所以在测量和制图中就用旋转椭球来代替大地球体,这个旋转球体通常称地球椭球体,称椭球体。

将地球简化为球体,不适合创建比例尺大于1:2百万的地图。 旋转椭球和其它椭球试着调整地球的复杂形状,尽可以准确地满足数学计算。 因此,两极到地心的距离小于赤道到地心的距离。

地球椭球的两个主要参数为长轴半径a、短轴半径b,以及三个派生参数:

地球椭球体是对为了方便数学、计算机处理,而对大地水准面的进一步抽象、简化, 是一个数学表达。正是有了地球椭球体, 才使得目前阶段计算机处理地理空间数据有了可能。 因此,我们在以后所探讨的,只有地球椭球体这个概念。

当然也不排除一种可能性:未来有一天,测量技术与计算机技术发展到更高级的层面, 人们可以根据测量成果,在计算机内直接对大地水准面,甚至地球形状进行直接建模。

常用的地球椭球体参数

一个多世纪以来,各国学者与工程人员对地球进行了众多研究与测量,并提出了多组地球椭球体参数, 由于不同的地方,变形规律的不同, 因此各个国家根据本国的具体位置采用适合本国的投影的椭球体。

椭球模型有一个适用范围,它能够给地球上不同区域以最优的结果。 总之,我们是能够得到一个用于局部定位的、足够准确的基础。

下表是国际上常用的椭球体参数以及适用的区域。

| 椭球 | 长半轴(米)| 短半轴(米) | 适用区域 | | ------- | ------ | ------- | | Bessel 1841 | 6377397 | 6356079 | 德国,智利,荷兰,瑞典,... | | Clarke 1880 | 6378249 | 6356515 | 非洲,法国 | | Hayford 1909 | 6378388 | 6356912 | 比利时,芬兰,意大利,西班牙,... | | WGS 1984 | 6378137 | 6356752 | 北美,全球 |

表: 国际上常用椭球的尺寸以及它们的适用区域

我国使用的地球椭球体参数列表:

  1. 海福特椭球(1910) 我国52年以前基准椭球
  • a = 6378388m
  • b = 6356911.9461279m
  • alpha = 0.33670033670
  1. 克拉索夫斯基椭球(1940 Krassovsky)  北京54坐标系基准椭球
  • a = 6378245m
  • b = 6356863.018773m
  • alpha = 0.33523298692
  1. 1975年I.U.G.G推荐椭球(国际大地测量协会1975)  西安80坐标系基准椭球
  • a = 6378140m
  • b = 6356755.2881575m
  • alpha = 0.0033528131778
  1. WGS-84椭球(GPS全球定位系统椭球、17届国际大地测量协会) WGS-84 GPS 基准椭球  
  • a = 6378137m
  • b = 6356752.3142451m
  • alpha = 0.00335281006247

注意

椭球体与基准面这两个概念是有区别的。 地图学上对地球上的抽象,第一次抽象为水准面(等重力面), 第二次抽象为椭球体(ellipsoid), 第三次抽象现在我认为是将椭球体进行定位之后, 所确定的具有明确的方向的椭球体, 它的要求能够很好的为当地区的地图制作服务,

在同一基准面上,基于数学公式的代数计算结果进行投影转换是可行的。 但是在不同基准面之间,是无法使用统一的数学公式计算来进行投影转换的。 基准面上空间位置的确定是测绘工作的成果, 不同基准面之间空间位置的对应关系转换必须由给定的点进行求算才可以。

In [ ]: