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门户(请参阅如 图 14.1 所示)提供了一些使用API的示例:打开和读取图像、搜索元数据等。

图 14.1 gdal-api教程#
软件文档允许访问类和函数的描述。 对于Python开发人员来说,还有指定网页,如 图 14.2 所示。

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

图 14.3 Pgdal_translate命令#
上图中的摘要显示了此实用程序的一般用途:“在不同格式之间切换栅格数据”。 在实践中,选择的使用扩大了可能治疗的范围。 因此,该命令可以执行其他操作,例如裁剪、重新排序等。
概要,也称为“用法”,是最重要的部分。 它提供命令语法和所有可能的参数:
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 的兼容版本。 文档通常以一些应用程序示例结束如 图 14.4 、图 14.5 所示。

图 14.4 gdal_translate参数#

图 14.5 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 )上描述了其功能。