目录

GDAL-简介

GDAL 简介

前言

GDAL 是一个用于转换处理栅格和矢量地理空间数据格式的库,其基于MIT开源许可。

1. GDAL 简介

GDAL 英文全称Geospatial Data Abstraction Library,也就是地理空间数据抽象库。

GDAL 由开源地理空间基金会发布。作为一个库,它向调用应用程序提供了一个单一的光栅抽象数据模型和一个单一矢量抽象数据模型,用于所有支持的格式。并且还具有各种用于数据转换和处理的命令行程序。

GDAL 主要使用面向对象编程语言C++编写,具有较高的执行效率。并且支持大量编程语言调用程序,如C、C++、Java、Python等。它还具有广泛的数据格式支持,达到上百种之多。

由于其强大的数据处理能力,作为GIS领域事实上的标准底层库,被誉为地理空间数据的“瑞士军刀”https://i-blog.csdnimg.cn/img_convert/373e012f32e6572ed731ca77bf11572f.png

2. GDAL 的发展历史

GDAL诞生于1998年,最初由Frank Warmerdam教授个人发起并开发。当时,Frank 在处理各种不同格式的栅格数据时,深感缺乏一个统一的抽象库来简化读写操作。他的目标是创建一个能够为多种栅格数据格式提供统一抽象数据模型的 C++ 库,这也就是GDAL库的起源。

在当时,GDAL的名字其实是"GRASS Data Abstraction Library“的缩写,因为其早期开发与GRASS GIS有关。后来,它的范围就扩展到了 GRASS 之外,名称被重新定义为现在的 “Geospatial Data Abstraction Library”,但缩写得以保留。

值得注意的是,因为那时的GDAL只专注于处理栅格数据,缺少对矢量数据的支持,而矢量数据在GIS开发中的地位与栅格数据同等重要,所以Frank教授启动了OGR项目,并且作为GDAL的兄弟库进行管理。

由于GDAL的稳定性与强大的功能,从诞生之初开始就被被众多开源和商业 GIS 软件(如 GRASS GIS, QGIS, ArcGIS, FME 等)选为底层数据支持库,确立了其行业基石的地位。

到了2006年,GDAL/OGR 项目与其他多个重要的开源地理空间项目(如 MapServer、PostGIS 等)共同发起成立了开源地理空间基金会(OSGeo),也就是Open Source Geospatial Foundation。GDAL/OGR 作为基金会的创始项目之一,被确立为地理空间开源软件的核心数据互操作基石。这一地位极大地提升了其知名度和影响力,获得了更多的资金、代码和文档贡献,从而进入了发展的快车道。https://i-blog.csdnimg.cn/img_convert/66281ecf6b4f9d7d29773163ae608e21.png

以下是GDAL发展阶段事件。

时间阶段核心事件主要推动者特点
1998年前个人项目起源Frank Warmerdam雏形诞生,解决特定需求
1998-2006开源传播Frank 和早期社区功能扩充,被广泛采用,成为行业标准
2006-2013OSGeo 孵化OSGeo 社区 & PMC项目治理规范化,质量全面提升
2013-2020现代化改造Even Rouault性能优化,支持云计算和大数据
2020至今商业化资助与创新Even Rouault & 赞助商可持续发展,重大功能更新(坐标系、多维数据)

3. GDAL 支持数据格式

矢量数据格式

统计了一下,当前的稳定版本支持矢量数据多达84种。

栅格数据格式

栅格数据的格式种类则更多,当前的稳定版本支持栅格数据高达155种。

4. GDAL 对 OGC 的支持情况

GDAL/OGR 不仅是 OGC 标准的重要支持者和实现者,其本身也深度参与了标准的制定和验证过程。

4.1. 核心数据格式标准的支持

这是 GDAL/OGR 对 OGC 支持最成熟、最彻底的部分。

  • GML (Geography Markup Language)

全面支持读写。作为 OGC 的基础XML编码标准,GDAL 提供了完整的驱动程序(GML driver)来解析和生成 GML 文件,支持多种版本的 GML 应用模式(Application Schema)。

  • KML (Keyhole Markup Language) & KMZ

全面支持读写。虽然最初由 Keyhole 公司开发(后被Google收购),但 KML 已成为 OGC 标准。GDAL 的 LIBKML 驱动程序提供了对 KML 文件及其样式、模型等元素的深度支持。

  • GPX (GPS Exchange Format)

全面支持读写。GPX 是用于交换GPS数据的XML格式,也是一个OGC标准。OGR 的 GPX 驱动程序可以处理路径、航点和轨迹。

  • GeoPackage

旗舰级支持。GeoPackage 是一个基于 SQLite 的、现代的、功能强大的 OGC 矢量与栅格数据容器标准

  • GeoJSON & JSON-FG

全面支持。虽然 GeoJSON 最初是一个社区标准(由 IETF 标准化为 RFC 7946),但它与 OGC 生态系统紧密相关,并被广泛视为事实上的Web标准。GDAL 的 GeoJSON 驱动程序支持读写。对新兴的 OGC JSON-FG (Features and Geometries JSON) 标准也开始提供实验性支持,该标准旨在弥补 GeoJSON 在3D、坐标系、时序数据等方面的不足。

4.2. 坐标参考系统的支持

GDAL 对空间坐标参考系统的处理完全构建在 OGC 标准之上。

  • WKT (Well-Known Text) CRS

核心支持。OGC WKT 是定义坐标参考系统的标准文本格式。GDAL 使用 PROJ 库(现为 PROJ),而 PROJ 完全支持 OGC WKT 1 和 WKT 2 (ISO 19162) 标准来解析和定义CRS。

  • EPSG 代码

核心支持。通过 PROJ 库,GDAL 可以识别和使用由 EPSG 注册表(其定义遵循 OGC 最佳实践)定义的数千个坐标系统。例如,EPSG:4326 (WGS84) 和 EPSG:3857 (Web Mercator)。

4.3. 简单要素访问规范 (SFA) 支持

OGR 的几何模型直接实现了 OGC 简单要素访问规范。

  • 几何类型

完全支持。OGR 几何对象(Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon, GeometryCollection 等)严格遵循 SFA 中定义的几何类型层次结构。

  • 空间谓词(空间关系)与操作

高度支持。OGR 使用 GEOS 库(GEOS 是 JTS 的 C++ 端口)来提供强大的空间分析功能,这些功能直接对应 OGC SFA 定义的操作。空间关系函数包括Contains(), Crosses(), Disjoint(), Equals(), Intersects(), Overlaps(), Touches(), Within()空间分析操作包括Buffer(), Intersection(), Union(), Difference(), SymDifference()几何验证与简化包括IsValid(), Simplify(), SimplifyPreserveTopology()

4.4. 网络服务协议支持

GDAL 提供了访问 OGC Web 服务(OWS)的能力,允许用户将远程服务作为本地数据源一样使用。

  • WMS (Web Map Service) & WMTS (Web Map Tile Service)

GDAL 的 WMS 驱动程序可以连接 WMS/WMTS 服务器,获取栅格地图瓦片,并像处理本地栅格文件一样进行拼接、重投影等操作。这对于下载底图或进行大规模分析非常有用。

  • WFS (Web Feature Service)

OGR 的 WFS 驱动程序可以将远程的 WFS 服务作为一个只读的矢量数据源。可以执行查询、获取要素并将其转换为任何 OGR 支持的本地格式。

  • WCS (Web Coverage Service)

GDAL 的 WCS 驱动程序允许访问 WCS 服务,将远程覆盖数据(Coverage)作为本地栅格数据集读取。

参考地址

:::block-1
GDAL官网:https://gdal.org/en/stable

GDAL仓库:https://github.com/OSGeo/gdal

OSGeo官网:https://www.osgeo.org

OSGeo开源中国:https://www.osgeo.cn/pygis/index.html
:::