2.1. GIS类库

2.1.1. GDAL Document

简单地说,GDAL是一个操作各种栅格地理数据格式的库。 包括读取、写入、转换、处理各种栅格数据格式(有些特定的格式对一些操作如写入等不支持)。 这个库的 Python版和其他的python库结合的很好。 最直接、明显的支持是使用Numeric库来进行数据读取和操作。各种矩阵魔术可以发挥得淋漓尽致(图像其实就是矩阵)。 而且按我的观点,python对矩阵的操作比其他的语言有明显的优势。写出来的东西比其他语言写出来的短小的多,而且好看得多。 并且python的弱类型在处理栅格数据格式类型的时候代码量比强类型的语言少了数倍(不用double,byte,short等等分开处理,这简直就是先天上的优势)。

Geospatial Data Abstraction Library (GDAL)是使用C/C++语言编写的用于读写空间数据的一套跨平台开源库。 现有的大部分GIS或者遥感平台,不论是商业软件ArcGIS,ENVI还是开源软件GRASS,QGIS,都使用了GDAL作为底层构建库。

GDAL库由OGR和GDAL项目合并而来,OGR主要用于空间要素矢量矢量数据的解析,GDAL主要用于空间栅格数据的读写。 此外,空间参考及其投影转换使用开源库 PROJ.4进行。

目前,GDAL主要提供了三大类数据的支持:栅格数据,矢量数据以及空间网络数据(Geographic Network Model)。

GDAL提供了C/C++借口,并且通过SWIG提供了Python,Java,C#等的调用借口。 当我们在Python中调用GDAL的API函数时,其实底层执行的是C/C++编译的二进制文件。

GDAL不但提供了API借口方便开发人员自定义自己的功能,而且还提供了一系列实用工具(Command Line Tools)可以实现方便快速的空间数据处理。 我们可以使用这些实用工具,结合Linux Shell脚本或者Windows批处理脚本进行大批量空间数据的批量处理。

GDAL 1.x版本以前,对于栅格和矢量数据的读写API借口设计是相对分离的,从2.x版本开始,栅格和矢量数据的API进行了集成,对开发者更加友好。

栅格数据组织

GDAL中使用dataset表示一个栅格数据(使用抽象类GDALDataset表示),一个dataset包含了对于栅格数据的波段,空间参考以及元数据等信息。 一张GeoTIFF遥感影像,一张DEM影像,或者一张土地利用图,在GDAL中都是一个GDALDataset。

# 坐标系统(使用OGC WKT格式表示的空间坐标系统或者投影系统) # 地理放射变换(使用放射变换表示图上坐标和地理坐标的关系) # GCPs(大地控制点记录了图上点及其大地坐标的关系,通过多个大地控制点可以重建图上坐标和地理坐标的关系) # 元数据(键值对的集合,用于记录和影像相关的元数据信息) # 栅格波段(使用GDALRasterBand类表示,真正用于存储影像栅格值,一个栅格数据可以有多个波段) # 颜色表(Color Table用于图像显示)

2.1.2. PROJ 介绍

PROJ是一个通用的坐标转换软件,它将地理空间坐标从一个坐标系转换为另一个坐标系。这包括地图投影和大地坐标变换。

PROJ包含命令行应用程序,可以方便地从文本文件或直接从用户输入转换坐标。 除了命令行实用程序之外,PROJ还提供了相关的API。API允许开发人员在自己的软件中使用PROJ的功能,而不必自己实现类似的功能。

PROJ最初是一个纯粹制图应用程序,允许用户使用许多不同的制图投影将大地坐标转换为投影坐标。 多年来,随着需求的日益增加,对数据转移的支持也逐渐进入PROJ。 今天,PROJ支持100多种不同的地图投影,可以用于除最晦涩的大地测量技术之外的所有基准面之间坐标转换。

关于EPSG

EPSG代码是与坐标系定义相关联的数字代码。如:EPSG:4326(EPSG:4326就是WGS84),你可以理解为EPSG文件对坐标系做了相关的归类整理。

详细资料可以看:http://www.epsg.org/

#在cmd中输入
cs2cs +init=epsg:4326 +to +init=epsg:25832
#在输入
56 12
#可以得到
6230195.91      1917547.45 0.00

#如果输入的纬度、经度为
55.2 12.2

#得到
6102577.99      1921733.77 0.00

#和输入:cs2cs +proj=latlon +lat_ts=56.5 +ellps=GRS80 +to +proj=utm +zone=32 得到的效果是一样的 #这段代码分为4部分

cs2cs 、+to 两部分不再解释
+init=epsg:4236 表示源投影定义
    可以查询资料看到,ESPG:4326 表示如下规则

    # Hu Tzu Shan 1950
    <4236> +proj=longlat +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +no_defs  <>
            +init=espg:25832 表示目标投影定义
                    可以查询资料看到,ESPG:25832 表示如下规则

    # ETRS89 / UTM zone 32N
    <25832> +proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>