GDAL 简介
前言
GDAL 是一个用于转换处理栅格和矢量地理空间数据格式的库,其基于MIT开源许可。
1. GDAL 简介
GDAL 英文全称Geospatial Data Abstraction Library
,也就是地理空间数据抽象库。
GDAL 由开源地理空间基金会发布。作为一个库,它向调用应用程序提供了一个单一的光栅抽象数据模型和一个单一矢量抽象数据模型,用于所有支持的格式。并且还具有各种用于数据转换和处理的命令行程序。
GDAL 主要使用面向对象编程语言C++编写,具有较高的执行效率。并且支持大量编程语言调用程序,如C、C++、Java、Python等。它还具有广泛的数据格式支持,达到上百种之多。
由于其强大的数据处理能力,作为GIS领域事实上的标准底层库,被誉为地理空间数据的“瑞士军刀”。
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 作为基金会的创始项目之一,被确立为地理空间开源软件的核心数据互操作基石。这一地位极大地提升了其知名度和影响力,获得了更多的资金、代码和文档贡献,从而进入了发展的快车道。
以下是GDAL发展阶段事件。
时间阶段 | 核心事件 | 主要推动者 | 特点 |
1998年前 | 个人项目起源 | Frank Warmerdam | 雏形诞生,解决特定需求 |
1998-2006 | 开源传播 | Frank 和早期社区 | 功能扩充,被广泛采用,成为行业标准 |
2006-2013 | OSGeo 孵化 | OSGeo 社区 & PMC | 项目治理规范化,质量全面提升 |
2013-2020 | 现代化改造 | Even Rouault | 性能优化,支持云计算和大数据 |
2020至今 | 商业化资助与创新 | Even Rouault & 赞助商 | 可持续发展,重大功能更新(坐标系、多维数据) |
3. GDAL 支持数据格式
矢量数据格式
统计了一下,当前的稳定版本支持矢量数据多达84种。
- ADBC – Arrow Database Connectivity
- Artificial intelligence powered vector driver
- AmigoCloud
- (Geo)Arrow IPC File Format / Stream
- Arc/Info Binary Coverage
- Arc/Info E00 (ASCII) Coverage
- CAD – AutoCAD DWG
- Carto
- Comma Separated Value (.csv)
- CSW - OGC CSW (Catalog Service for the Web)
- Microstation DGN
- Microstation DGN v8
- AutoCAD DWG
- AutoCAD DXF
- Google Earth Engine Data API
- EDIGEO
- Elasticsearch: Geographically Encoded Objects for Elasticsearch
- ESRIJSON / FeatureService driver
- ESRI File Geodatabase (FileGDB)
- FlatGeobuf
- GDALG: GDAL Streamed Algorithm
- GeoJSON
- GeoJSONSeq: sequence of GeoJSON features
- GeoRSS : Geographically Encoded Objects for RSS feeds
- GML - Geography Markup Language
- GMLAS - Geography Markup Language (GML) driven by application schemas
- GMT ASCII Vectors (.gmt)
- GPKG – GeoPackage vector
- GPSBabel
- GPX - GPS Exchange Format
- GRASS Vector Format
- GTFS - General Transit Feed Specification
- SAP HANA
- IDB
- Idrisi Vector (.VCT)
- “INTERLIS 1” and “INTERLIS 2” drivers
- JML: OpenJUMP JML format
- JSONFG – OGC Features and Geometries JSON
- KML - Keyhole Markup Language
- LIBKML Driver (.kml .kmz)
- Dutch Kadaster LV BAG 2.0 Extract
- MapML
- MEM – In Memory datasets
- Memory (deprecated)
- MiraMon Vector
- MapInfo TAB and MIF/MID
- MongoDBv3
- MSSQLSpatial - Microsoft SQL Server Spatial Database
- MVT: Mapbox Vector Tiles
- MySQL
- NAS - ALKIS
- NetCDF: Network Common Data Form - Vector
- NGW – NextGIS Web
- OGC API - Features
- Oracle Spatial
- ODBC RDBMS
- ODS - Open Document Spreadsheet
- ESRI File Geodatabase vector (OpenFileGDB)
- OSM - OpenStreetMap XML and PBF
- (Geo)Parquet
- PDF – Geospatial PDF
- PDS - Planetary Data Systems TABLE
- PostgreSQL SQL Dump
- ESRI Personal GeoDatabase
- PostgreSQL / PostGIS
- PLScenes (Planet Labs Scenes/Catalog API)
- PMTiles
- IHO S-57 (ENC)
- Selafin files
- ESRI Shapefile / DBF
- Norwegian SOSI Standard
- SQLite / Spatialite RDBMS
- Storage and eXchange Format - SXF
- TileDB – TileDB vector
- TopoJSON driver
- VDV - VDV-451/VDV-452/INTREST Data Format
- VFK - Czech Cadastral Exchange Data Format
- VRT – Virtual Format
- WAsP - WAsP .map format
- WFS - OGC WFS service
- XLS - MS Excel format
- XLSX - MS Office Open XML spreadsheet
- XODR – OpenDRIVE Road Description Format
栅格数据格式
栅格数据的格式种类则更多,当前的稳定版本支持栅格数据高达155种。
- AAIGrid – Arc/Info ASCII Grid
- ACE2 – ACE2
- ADRG – ADRG/ARC Digitized Raster Graphics (.gen/.thf)
- AIG – Arc/Info Binary Grid
- AIRSAR – AIRSAR Polarimetric Format
- AVIF – AV1 Image File Format
- BAG – Bathymetry Attributed Grid
- BASISU – Basis Universal
- BMP – Microsoft Windows Device Independent Bitmap
- BSB – Maptech/NOAA BSB Nautical Chart Format
- BT – VTP .bt Binary Terrain Format
- BYN - Natural Resources Canada’s Geoid file format (.byn)
- CAD – AutoCAD DWG raster layer
- CALS – CALS Type 1
- CEOS – CEOS Image
- COASP – DRDC COASP SAR Processor Raster
- COG – Cloud Optimized GeoTIFF generator
- COSAR – TerraSAR-X Complex SAR Data Product
- CPG – Convair PolGASP data
- CTG – USGS LULC Composite Theme Grid
- DAAS (Airbus DS Intelligence Data As A Service driver)
- DDS – DirectDraw Surface
- DERIVED – Derived subdatasets driver
- DIMAP – Spot DIMAP
- DOQ1 – First Generation USGS DOQ
- DOQ2 – New Labelled USGS DOQ
- DTED – Military Elevation Data
- ECRGTOC – ECRG Table Of Contents (TOC.xml)
- ECW – Enhanced Compressed Wavelets (.ecw)
- EEDAI - Google Earth Engine Data API Image
- EHdr – ESRI .hdr Labelled
- EIR – Erdas Imagine Raw
- ENVI – ENVI .hdr Labelled Raster
- ESAT – Envisat Image Product
- ESRIC – Esri Compact Cache
- ERS – ERMapper .ERS
- EXR – Extended Dynamic Range Image File Format
- FAST – EOSAT FAST Format
- FITS – Flexible Image Transport System
- GenBin – Generic Binary (.hdr labelled)
- Oracle Spatial GeoRaster
- GFF – Sandia National Laboratories GSAT File Format
- GIF – Graphics Interchange Format
- GPKG – GeoPackage raster
- GRASS Raster Format
- GRASSASCIIGrid – GRASS ASCII Grid
- GRIB – WMO General Regularly-distributed Information in Binary form
- GS7BG – Golden Software Surfer 7 Binary Grid File Format
- GSAG – Golden Software ASCII Grid File Format
- GSBG – Golden Software Binary Grid File Format
- GSC – GSC Geogrid
- GDALG: GDAL Streamed Algorithm
- GTA - Generic Tagged Arrays
- GTI – GDAL Raster Tile Index
- GTiff – GeoTIFF File Format
- GXF – Grid eXchange File
- HDF4 – Hierarchical Data Format Release 4 (HDF4)
- HDF5 – Hierarchical Data Format Release 5 (HDF5)
- HEIF / HEIC – ISO/IEC 23008-12 High Efficiency Image File Format
- HF2 – HF2/HFZ heightfield raster
- HFA – Erdas Imagine .img
- RST – Idrisi Raster Format
- ILWIS – Raster Map
- IRIS – Vaisala’s weather radar software format
- ISCE – ISCE
- ISG – International Service for the Geoid
- ISIS2 – USGS Astrogeology ISIS Cube (Version 2)
- ISIS3 – USGS Astrogeology ISIS Cube (Version 3)
- JDEM – Japanese DEM (.mem)
- JP2ECW – ERDAS JPEG2000 (.jp2)
- JP2KAK – JPEG 2000 (based on Kakadu SDK)
- JP2MrSID – JPEG2000 via MrSID SDK
- JP2OpenJPEG – JPEG2000 driver based on OpenJPEG library
- JPEG – JPEG JFIF File Format
- JPEGXL – JPEG-XL File Format
- JPIPKAK - JPIP Streaming
- KEA
- KMLSuperoverlay – KMLSuperoverlay
- KRO – KOLOR Raw format
- KTX2
- LAN – Erdas 7.x .LAN and .GIS
- L1B – NOAA Polar Orbiter Level 1b Data Set (AVHRR)
- LCP – FARSITE v.4 LCP Format
- Leveller – Daylon Leveller Heightfield
- LIBERTIFF – GeoTIFF File Format
- LOSLAS – NADCON .los/.las Datum Grid Shift
- MAP – OziExplorer .MAP
- MRF – Meta Raster Format
- MBTiles
- MEM – In Memory datasets
- MFF – Vexcel MFF Raster
- MFF2 – Vexcel MFF2 Image
- MrSID – Multi-resolution Seamless Image Database
- MSG – Meteosat Second Generation
- MSGN – Meteosat Second Generation (MSG) Native Archive Format (.nat)
- NDF – NLAPS Data Format
- NetCDF: Network Common Data Form
- NGSGEOID - NOAA NGS Geoid Height Grids
- NGW – NextGIS Web
- NITF – National Imagery Transmission Format
- NOAA_B – NOAA GEOCON/NADCON5 .b format
- NSIDCbin – National Snow and Ice Data Centre Sea Ice Concentrations
- NTv2 – NTv2 Datum Grid Shift
- NWT_GRD/NWT_GRC – Northwood/Vertical Mapper File Format
- OGCAPI – OGC API Tiles / Maps / Coverage
- ESRI File Geodatabase raster (OpenFileGDB)
- JAXA PALSAR Processed Products
- PAux – PCI .aux Labelled Raw Format
- PCIDSK – PCI Geomatics Database File
- PCRaster – PCRaster raster file format
- PDF – Geospatial PDF
- PDS – Planetary Data System v3
- PDS4 – NASA Planetary Data System (Version 4)
- PLMosaic (Planet Labs Mosaics API)
- PNG – Portable Network Graphics
- PNM – Netpbm (.pgm, .ppm)
- PostGISRaster – PostGIS Raster driver
- PHOTOMOD Raster File
- RasterLite2 - Rasters in SQLite DB
- RCM – RADARSAT Constellation Mission Product
- RIK – Swedish Grid Maps
- RMF – Raster Matrix Format
- ROI_PAC – ROI_PAC
- RPFTOC – Raster Product Format/RPF (a.toc)
- RRASTER – R Raster
- RS2 – RadarSat 2 XML Product
- S102 – S-102 Bathymetric Surface Product
- S104 – S-104 Water Level Information for Surface Navigation Product
- S111 – S-111 Surface Currents Product
- SAFE – Sentinel-1 SAFE XML Product
- SAR_CEOS – CEOS SAR Image
- SAGA – SAGA GIS Binary Grid File Format
- SENTINEL2 – Sentinel-2 Products
- SIGDEM – Scaled Integer Gridded DEM
- SNAP_TIFF – Sentinel Application Processing GeoTIFF
- SNODAS – Snow Data Assimilation System
- SRP – Standard Product Format (ASRP/USRP) (.gen)
- SRTMHGT – SRTM HGT Format
- STACIT - Spatio-Temporal Asset Catalog Items
- STACTA - Spatio-Temporal Asset Catalog Tiled Assets
- Terragen – Terragen****™ Terrain File
- TGA – TARGA Image File Format
- TIL – EarthWatch/DigitalGlobe .TIL
- TileDB - TileDB raster
- TSX – TerraSAR-X Product
- USGSDEM – USGS ASCII DEM (and CDED)
- VICAR – VICAR
- VRT – GDAL Virtual Format
- WCS – OGC Web Coverage Service
- WEBP - WEBP
- WMS – Web Map Services
- WMTS – OGC Web Map Tile Service
- XYZ – ASCII Gridded XYZ
- Zarr
- ZMap – ZMap Plus Grid
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
:::