本文转自:http://ifelseif.blog.sohu.com/141043243.html
GDAL(Geospatial Data Abstraction Library) 是一个在 X/MIT 许可协议下的开源栅格空间数据转换库。该项目 由 Frank Warmerdam 教授于 1998 年发起。 它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。 OGR(OpenGIS Simple Features Reference Implementation) 是 GDAL 项目的一个子项目,提供对矢量数据的支持。一般把这两个库合称为 GDAL/OGR ,或者简称为 GDAL 。
由于 MIT 协议的开放性,任何人都可以基于 GDAL 库来编写自己的软件而不需要原作者的授权,所以有很多著名的 GIS 软件都使用了 GDAL/OGR 库,包括商业公司 ESRI 的 ArgGIS 9.2 , Google 的 Google Earth 和开源的 GRASS GIS 系统。 GDAL/OGR 支持多种操作系统,可以同时对 Linux 和 windows 下的地理空间数据管理系统提供百余种矢量和栅格文件类型的支持。
GDAL/OGR 使用面向对象的 C++ 语言编写,这令该库在支持百余种格式的同时,还具有很高的执行效率。 GDAL/OGR 同时还提供多种主流编程语言的绑定,除了 C 和 C++ 语言之外,用户还可以在 Perl 、 python 、 VB6 、 Ruby 、 Java 、 C# 等语言中调用 GDAL ,这令 GDAL 的应用变得非常广泛。但是目前 GDAL 的中文资料较少,本人在美国学习期间,主要参考了 GDAL 的官方网站 http://www.gdal.org/ 和 Utah State University 的 GDAL python 培训课程 http://www.gis.usu.edu/~chrisg/python/ 。
下面简要介绍 GDAL/OGR 的体系结构
1 . GDAL
GDAL 提供对多种栅格数据的支持,包括 Arc/Info ASCII Grid(asc) , GeoTiff (tiff) , Erdas Imagine Images(img) , ASCII DEM(dem) 等格式。
GDAL 使用抽象数据模型 (abstract data model) 来解析它所支持的数据格式,抽象数据模型包括数 据集 (dataset) ,坐标系统,仿射地理 坐标转换 (Affine Geo Transform) , 大地控制点 (GCPs) , 元数据 (Metadata) ,栅格波段 (Raster Band) ,颜色表 (Color Table) ,子数据集域 (Subdatasets Domain) ,图像结构域 (Image_Structure Domain) , XML 域 (XML:Domains) 。
GDAL 包括如下几个部分:
GDALMajorObject 类:带有元数据的对 象。
GDALDdataset 类:通常是从一个栅格文件中 提取的相关联的栅格波段集合和这些波段的元数据; GDALDdataset 也负责所有栅格波段的地理坐标转换 (georeferencing transform) 和坐标系定义。
GDALDriver 类:文件格式驱动类, GDAL 会为每一个所支持的文件格式创建一个该类的实体,来管理该文件格式。
GDALDriverManager 类:文件格式驱动 管理类,用来管理 GDALDriver 类。
2. OGR
OGR 提供对矢量数据格式的读写支持,它所支持的文件 格式包括: ESRI Shapefiles , S-57 , SDTS , PostGIS , Oracle Spatial , Mapinfo mid/mif , Mapinfo TAB 。
OGR 包括如下几部分:
Geometry :类 Geometry ( 包括 OGRGeometry 等类 ) 封装了 OpenGIS 的矢量数据模型,并提供了一些几何操作, WKB(Well Knows Binary) 和 WKT(Well Known Text) 格式之间的相互转换,以及空间参考系统 ( 投影 ) 。
Spatial Reference :类 OGRSpatialReference 封装了投影和基准面的定义。
Feature :类 OGRFeature 封装了一个完整 feature 的定义,一个完整的 feature 包括一个 geometry 和 geometry 的一系列属性。
Feature Definition :类 OGRFeatureDefn 里面封装了 feature 的属性,类型、名称及其默认的空间参考系统等。一个 OGRFeatureDefn 对象通常与一个层 (layer) 对应。
Layer :类 OGRLayer 是一个抽象基类,表示数据源类 OGRDataSource 里面的一层要素 (feature) 。
Data Source :类 OGRDataSource 是一个抽象基类,表示含有 OGRLayer 对象的一个文件或一个数据库。
Drivers :类 OGRSFDriver 对应于每一个所支持的矢量文件格式。类 OGRSFDriver 由类 OGRSFDriverRegistrar 来注册和管理。