14.1. GDAL:栅格处理的瑞士军刀¶
14.1.1. GDAL的用途是什么?¶
地理空间数据抽象库(GDAL)是一个免费的数据库,致力于以栅格和矢量格式读写地理空间数据。 该项目由FrankWarmerdam于1998年发起,目前由开源地理空间基金会(OSGeo)维护。 该基金会旨在支持和构建开源地理空间软件,开发QGIS和GRASS GIS等众多应用程序。
GDAL在所有现代操作系统(类Unix操作系统、Windows)上运行。它支持32位和64位架构。 如今,已有近100个软件声称使用该组件。
14.1.2. 许可证¶
GDAL是一款免费开源软件(FOSS)。根据X11/MIT许可证的条款分发, 旨在无限制地赋予用户使用、复制、修改、合并、发布、分发、再许可和/或销售副本的权利。
由于某些模块(libpng、libjpeg、libtiff和libgeotif),GDAL 的一小部分条款略有不同。一些外部和可选库受到更严格的许可证, 因为它们通常与专有文件格式(增强压缩Wavelet“ECW”、多分辨率无缝图像数据库“MrSID”等)关联。
14.1.3. GDAL如何使用?¶
有几种解决方案使我们能够将GDAL 用于各种用途和技能。并非所有解决方案都提供相同的功能多样性,也不是相同的模块化。
GDAL API¶
GDAL通过其应用程序编程接口(API),可以从C++、Python、R等编程语言调用。 一组标准化的类和方法提供了对所有功能的访问。Web门户(请参阅图2.1)提供了一些使用API的示例: 打开和读取图像、搜索元数据等。

图2.1. GDAL API教程
软件文档允许访问类和函数的描述。对于Python开发人员来说,还有指定网页(见图2.2)。

图2.2. Python的GDAL 文档
GDAL实用程序¶
GDAL还提供通过终端在命令行中启动的实用程序(可执行文件和Python脚本)。 这些程序是为了满足用户的频繁需求而设计的,允许数据批处理。它们不需要编程技能。
每个实用程序都有可以通过终端或互联网访问的文档。它由三个主要部分组成:带有摘要的命令名、概要和描述。
为了正确理解如何阅读它,我们可以以图2.3中所示的 gdal_translate
命令为例。

图2.3. gdal_translate命令的概述
图2.3中的摘要显示了此实用程序的一般用途:“在不同格式之间切换栅格数据”。 在实践中,选择的使用扩大了可能治疗的范围。因此,该命令可以执行其他操作,例如裁剪、重新排序等。
概要,也称为“用法”,是最重要的部分。它提供命令语法和所有可能的参数:
gdal_translate
: 命令从逻辑上以名称开头;[option]: 在
gdal_translate
之后,可以添加一个参数来修改命令的工作方式。方括号[…]之间的参数是可选的。 在GDAL 中,每个参数都由一个短划线(-)引入,例如 -ot 可以修改图像编码:一个选项可以有一个或多个值,例如:
[-stats] 不需要任何值;
[-mask band] 要求指示波段索引;
[-tr xres yres] 需要指示x(xres)和y(yres)的像素分辨率;
[-ot {Byte/Int16/UInt16/…CFloat64}] 要求指示大括号之间的预定义列表中的值;
后面跟着星号的选项可以调用多次,例如:i) [-b band]*;
最后一个参数
src_dataset
和dst_dataset
不在括号之间,因此是强制性的。 它们指定输入(src_dataset) 和输出 (dst_dataset) 数据路径。
描述部分显示每个参数及其功能、默认值和GDAL 的兼容版本。文档通常以一些应用程序示例结束(见图2.4)。
图2.4. gdal_translate
参数和应用示例描述
GDAL和其他软件¶
近100种软件使用GDAL ,其中一些软件(例如QGIS)提供了在后台启动命令的界面。 然而,开发人员限制了对各种选项的访问,主要是出于经济原因。
14.1.4. GDAL如何在QGIS中工作¶
GDAL库首先是QGIS的基本组件(软件依赖性)。它使我们能够正确管理不同的格式及其元数据。 当用户在QGIS中打开图像并查阅其属性时,他正在不知情地操作GDAL API的各种机制。
QGIS还提供对大多数GDAL 实用程序的访问权限,使用户能够处理、分析和修改栅格文件: 卫星图像、航空照片、数字地形模型等。这些工具可以通过两种方式调用, 要么使用默认集成在QGIS Raster菜单中的GdalTools扩展名,要么使用 ProcessingToolbox 。
优点和局限性¶
长期以来,GDAL 一直是一款面向习惯于命令行甚至编程的用户的工具。它与QGIS的集成促进了它通过专用接口的使用来启动 算法并与其他软件组件交互。例如,用户可以调用层面板中存在的数据并直接查看地图画布中的结果。虽然GdalTools扩展主要 是一个编辑器,用于一次在一张图像上启动一次性命令,但 Processing Toolbox 使您可以使用批处理、根据不同的库设计和 共享工作流(如有必要)。这两种工具还具有组织相似标题(投影、转化、提取、分析、杂项)的治疗的优势。然而,它们的共存也有一些缺点。
出于各种原因,GDalTools扩展和处理收件箱无法集成GDAL 中提供的所有实用程序(见表2.1)。
GDAL和QGIS的演变是同步的,软件开发人员认为没有必要为某些实用程序创建农业用户界面。
例如, gdalmove
和 gdal_panshrief.py
等命令在QGIS中不可访问,
而 gdallocationinfo
或 gdal_calc.py
等其他命令只能从 Processing Toolbox 中访问。
最后,对于GDAL 实用程序,QGMS中可能有多个条目。
例如,三个GDalTools - Assign Projecting
、 Translate
和 Clipper
-调用单个命令:
gdal_Translate
。此外,相同的处理(例如GdalTools和 Processing Toolbox 中都存在的“Polyonize”)
并不总是提供相同的收件箱选项。然而,GdalTools允许编辑命令行以手动添加缺失的选项。
GDAL 命令
gdalinfo
gdal_translate
gdaladdo
gdalwarp
gdaltindex
gdalbuildvrt
gdal_contour
gdaldem
rgb2pct.py
pct2rgb.py
gdal_merge.py
gdal2tiles.py*
gdal_rasterize
gdaltransform*
nearblack
gdal_retile.py*
gdal_grid
gdal_proximity.py
gdal_polygonize.py
gdal_sieve.py
gdal_fillnodata.py
gdallocationinfo
gdalsrsinfo
gdalmove.py*
gdal_edit.py*
gdal_calc.py
gdal_pansharpen.py**
gdal-config*
gdalmanage*
gdalcompare.py*
QGIS-GDAL Tools
Heading
Miscellaneous
Projections
Conversion
Extraction
Miscellaneous
Projections
Miscellaneous
Miscellaneous
Extraction
Analysis
Conversion
Conversion
Miscellaneous
Conversion
Analysis
Analysis
Analysis
Conversion
Analysis
Analysis
Projections
工具名称
Information
Assign projection
Translate#. Clipper
Build overviews
Warp#. Tile index
Build virtual raster
Contour#. DEM #. RGB to PCT
PCT to RGB
Merge
Rasterize
Near black
Grid
Proximity
Polygonize
Sieve
Fill nodata
Extract projection
QGIS-处理
工具名称
信息按扩展剪辑栅格转换格式构建概述按掩模层剪辑栅格Warp Tile索引构建虚拟栅格彩色浮雕 reliefAmmon TIP(地形位置指数) HillshadeSlopeRoughnessTRI(地形坚固性指数)RB到PCTPCT到RGBMergeRasbitt(矢量到栅格)栅格化 (覆盖现有栅格)近黑网格(与电源的距离倒数)网格(数据指标)网格(移动平均) 网格(最近的邻居)接近度(网格距离)多边形筛填充nodatagdal 2 xyz提取投影栅格计算器
这些应用程序在QGIS中没有接口。GDAL 网站( http://gdal.org/gdal_utilities.html )上描述了其功能。
表2.1. GDAL 命令与GDalTools和Processing Toolbox的对应