GDAL 开发起步

前言

使用GDAL进行地理数据处理工作时,首先需要了解当前GDAL版本支持的地理数据格式,而数据驱动就能为我们提供详细的信息。

本文在系列文章的基础上进行讲解,如果你还没有看过,建议从以下文章开始。

GDAL 简介[1]

GDAL 下载安装[2]

下面就从了解数据驱动(或者说数据格式种类)开始吧

1. 开发环境

本文使用如下开发环境,以供参考。

时间:2025年

Python:3.11.7

GDAL:3.7.3

2. GDAL 在 Python 中的使用方式

在一些老旧的代码中,你可能会看到直接导入gdal等模块的方式。这种方式现在已经不推荐 ,因为它需要确保 PYTHONPATH 等环境变量设置正确,兼容性较差。

python 复制代码
# 不推荐的方式
import gdal
import ogr
import osr

而在2006年之后,因为GDAL成为了OSGEO的子项目,对代码进行了重构,将gdal、ogrosr等模块整合到了osgeo命名空间之下,所以现在推荐使用以下导入方式。

javascript 复制代码
from osgeo import gdal
from osgeo import ogr
from osgeo import osr
from osgeo import gdal_array
from osgeo import gdalconst
  • gdal: 用于栅格数据(如 GeoTIFF, HDF, NetCDF 等)的读写、转换、处理。
  • ogr: 用于矢量数据(如 Shapefile, GeoJSON, KML 等)的读写、处理。
  • osr: 用于处理坐标系和投影(SRS)。
  • gdal_array: 将 GDAL 数据集(Dataset)转换为 NumPy 数组,或反向转换,便于进行数值计算。
  • gdalconst: 包含一些常用的常量(如 gdalconst.GA_ReadOnly)。

3. 注册数据驱动

GDAL的数据驱动(Driver)是其核心概念之一,从而使得GDAL能够支持各种各样的地理空间数据格式。注册驱动的目的就是为了告诉系统当前环境何种格式是可用的。

驱动(Driver): 一个驱动就是一个用于读写特定数据格式(如 GeoTIFF, Shapefile, GeoJSON, PNG)的代码库。

注册(Register): 将驱动添加到GDAL内部驱动管理器中,当调用GDALOpen或Create时,GDAL才知道调用哪个驱动来处理数据。

方式一:自动注册所有驱动

常用的方式是自动注册所有驱动。gdalogr模块都提供了便捷的函数来一次性注册所有的驱动。

ini 复制代码
from osgeo import gdal
from osgeo import ogr

# 注册所有栅格格式驱动(用于gdal)
gdal.AllRegister()

# 注册所有矢量格式驱动(用于ogr)
ogr.RegisterAll()

# 现在你可以打开文件了,GDAL会自动识别格式并选择合适的驱动
dataset = gdal.Open('test.tif') # 会自动使用GTiff驱动
vector_ds = ogr.Open('test.shp') # 会自动使用ESRI Shapefile驱动

方式二:手动注册驱动

在明确知道要使用的驱动的情况下,可以进行手动注册。GetDriverByName用于获取驱动名称,注意的是参数为驱动简写ShortName,如GeoTIFF数据对应驱动名称为'GTiff'

ini 复制代码
from osgeo import gdal
from osgeo import ogr

# 获取特定驱动(例如,获取GeoTIFF驱动)
driver_name = 'GTiff'
driver = gdal.GetDriverByName(driver_name)

4. 查看驱动列表

可以通过遍历已注册驱动来查看GDAL版本支持哪些地理空间数据格式。新建一个文本文件drivers.txt,在其中写入以下代码:

python 复制代码
from osgeo import gdal
from osgeo import ogr

print("Available Raster Drivers: "+str(gdal.GetDriverCount())+" 种")
for i in range(gdal.GetDriverCount()):
    driver = gdal.GetDriver(i)
    print(f"  - {driver.ShortName}: {driver.LongName}")

print("nAvailable Vector Drivers: "+str(ogr.GetDriverCount())+" 种")
# 注意:ogr.GetDriverCount() 已弃用,推荐使用 OGRSFDriverRegistrar
# 更现代的方式是使用 ogr.GetDriverByName 或遍历
for i in range(ogr.GetDriverCount()):
    driver = ogr.GetDriver(i)
    print(f"  - {driver.GetName()}")

其中gdal.GetDriverCount()ogr.GetDriverCount()用于统计支持的栅格数据和矢量数据格式总数。对于栅格数据具有ShortNameLongName两个名称,其中ShortName相当于驱动名称简写,而LongName这是对应驱动的文字描述数据。

保存该文本文件,并将其后缀修改为.py之后打开cmd命令行窗口,导航到drivers.py文件目录,运行命令

从以下输出信息得知GDAL当前版本支持的栅格驱动为207种 ,矢量驱动为73种

sql 复制代码
Available Raster Drivers: 207 种
  - VRT: Virtual Raster
  - DERIVED: Derived datasets using VRT pixel functions
  - GTiff: GeoTIFF
  - COG: Cloud optimized GeoTIFF generator
  - NITF: National Imagery Transmission Format
  - RPFTOC: Raster Product Format TOC format
  - ECRGTOC: ECRG TOC format
  - HFA: Erdas Imagine Images (.img)
  - SAR_CEOS: CEOS SAR Image
  - CEOS: CEOS Image
  - JAXAPALSAR: JAXA PALSAR Product Reader (Level 1.1/1.5)
  - GFF: Ground-based SAR Applications Testbed File Format (.gff)
  - ELAS: ELAS
  - ESRIC: Esri Compact Cache
  - AIG: Arc/Info Binary Grid
  - AAIGrid: Arc/Info ASCII Grid
  - GRASSASCIIGrid: GRASS ASCII Grid
  - ISG: International Service for the Geoid
  - SDTS: SDTS Raster
  - DTED: DTED Elevation Raster
  - PNG: Portable Network Graphics
  - JPEG: JPEG JFIF
  - MEM: In Memory Raster
  - JDEM: Japanese DEM (.mem)
  - GIF: Graphics Interchange Format (.gif)
  - BIGGIF: Graphics Interchange Format (.gif)
  - ESAT: Envisat Image Format
  - FITS: Flexible Image Transport System
  - BSB: Maptech BSB Nautical Charts
  - XPM: X11 PixMap Format
  - BMP: MS Windows Device Independent Bitmap
  - DIMAP: SPOT DIMAP
  - AirSAR: AirSAR Polarimetric Image
  - RS2: RadarSat 2 XML Product
  - SAFE: Sentinel-1 SAR SAFE Product
  - PCIDSK: PCIDSK Database File
  - PCRaster: PCRaster Raster File
  - ILWIS: ILWIS Raster Map
  - SGI: SGI Image File Format 1.0
  - SRTMHGT: SRTMHGT File Format
  - Leveller: Leveller heightfield
  - Terragen: Terragen heightfield
  - netCDF: Network Common Data Format
  - HDF4: Hierarchical Data Format Release 4
  - HDF4Image: HDF4 Dataset
  - ISIS3: USGS Astrogeology ISIS cube (Version 3)
  - ISIS2: USGS Astrogeology ISIS cube (Version 2)
  - PDS: NASA Planetary Data System
  - PDS4: NASA Planetary Data System 4
  - VICAR: MIPL VICAR file
  - TIL: EarthWatch .TIL
  - ERS: ERMapper .ers Labelled
  - JP2OpenJPEG: JPEG-2000 driver based on OpenJPEG library
  - L1B: NOAA Polar Orbiter Level 1b Data Set
  - FIT: FIT Image
  - GRIB: GRIdded Binary (.grb, .grb2)
  - RMF: Raster Matrix Format
  - WCS: OGC Web Coverage Service
  - WMS: OGC Web Map Service
  - MSGN: EUMETSAT Archive native (.nat)
  - RST: Idrisi Raster A.1
  - GSAG: Golden Software ASCII Grid (.grd)
  - GSBG: Golden Software Binary Grid (.grd)
  - GS7BG: Golden Software 7 Binary Grid (.grd)
  - COSAR: COSAR Annotated Binary Matrix (TerraSAR-X)
  - TSX: TerraSAR-X Product
  - COASP: DRDC COASP SAR Processor Raster
  - R: R Object Data Store
  - MAP: OziExplorer .MAP
  - KMLSUPEROVERLAY: Kml Super Overlay
  - WEBP: WEBP
  - PDF: Geospatial PDF
  - Rasterlite: Rasterlite
  - MBTiles: MBTiles
  - PLMOSAIC: Planet Labs Mosaics API
  - CALS: CALS (Type 1)
  - WMTS: OGC Web Map Tile Service
  - SENTINEL2: Sentinel 2
  - MRF: Meta Raster Format
  - PNM: Portable Pixmap Format (netpbm)
  - DOQ1: USGS DOQ (Old Style)
  - DOQ2: USGS DOQ (New Style)
  - PAux: PCI .aux Labelled
  - MFF: Vexcel MFF Raster
  - MFF2: Vexcel MFF2 (HKV) Raster
  - GSC: GSC Geogrid
  - FAST: EOSAT FAST Format
  - BT: VTP .bt (Binary Terrain) 1.3 Format
  - LAN: Erdas .LAN/.GIS
  - CPG: Convair PolGASP
  - NDF: NLAPS Data Format
  - EIR: Erdas Imagine Raw
  - DIPEx: DIPEx
  - LCP: FARSITE v.4 Landscape File (.lcp)
  - GTX: NOAA Vertical Datum .GTX
  - LOSLAS: NADCON .los/.las Datum Grid Shift
  - NTv2: NTv2 Datum Grid Shift
  - CTable2: CTable2 Datum Grid Shift
  - ACE2: ACE2
  - SNODAS: Snow Data Assimilation System
  - KRO: KOLOR Raw
  - ROI_PAC: ROI_PAC raster
  - RRASTER: R Raster
  - BYN: Natural Resources Canada's Geoid
  - NOAA_B: NOAA GEOCON/NADCON5 .b format
  - NSIDCbin: NSIDC Sea Ice Concentrations binary (.bin)
  - ARG: Azavea Raster Grid format
  - RIK: Swedish Grid RIK (.rik)
  - USGSDEM: USGS Optional ASCII DEM (and CDED)
  - GXF: GeoSoft Grid Exchange Format
  - BAG: Bathymetry Attributed Grid
  - HDF5: Hierarchical Data Format Release 5
  - HDF5Image: HDF5 Dataset
  - NWT_GRD: Northwood Numeric Grid Format .grd/.tab
  - NWT_GRC: Northwood Classified Grid Format .grc/.tab
  - ADRG: ARC Digitized Raster Graphics
  - SRP: Standard Raster Product (ASRP/USRP)
  - BLX: Magellan topo (.blx)
  - PostGISRaster: PostGIS Raster driver
  - SAGA: SAGA GIS Binary Grid (.sdat, .sg-grd-z)
  - XYZ: ASCII Gridded XYZ
  - HF2: HF2/HFZ heightfield raster
  - OZI: OziExplorer Image File
  - CTG: USGS LULC Composite Theme Grid
  - ZMap: ZMap Plus Grid
  - NGSGEOID: NOAA NGS Geoid Height Grids
  - IRIS: IRIS data (.PPI, .CAPPi etc)
  - PRF: Racurs PHOTOMOD PRF
  - EEDAI: Earth Engine Data API Image
  - EEDA: Earth Engine Data API
  - DAAS: Airbus DS Intelligence Data As A Service driver
  - SIGDEM: Scaled Integer Gridded DEM .sigdem
  - EXR: Extended Dynamic Range Image File Format
  - TGA: TGA/TARGA Image File Format
  - OGCAPI: OGCAPI
  - STACTA: Spatio-Temporal Asset Catalog Tiled Assets
  - STACIT: Spatio-Temporal Asset Catalog Items
  - JPEGXL: JPEG-XL
  - GNMFile: Geographic Network generic file based model
  - GNMDatabase: Geographic Network generic DB based model
  - ESRI Shapefile: ESRI Shapefile
  - MapInfo File: MapInfo File
  - UK .NTF: UK .NTF
  - LVBAG: Kadaster LV BAG Extract 2.0
  - OGR_SDTS: SDTS
  - S57: IHO S-57 (ENC)
  - DGN: Microstation DGN
  - OGR_VRT: VRT - Virtual Datasource
  - Memory: Memory
  - CSV: Comma Separated Value (.csv)
  - GML: Geography Markup Language (GML)
  - GPX: GPX
  - LIBKML: Keyhole Markup Language (LIBKML)
  - KML: Keyhole Markup Language (KML)
  - GeoJSON: GeoJSON
  - GeoJSONSeq: GeoJSON Sequence
  - ESRIJSON: ESRIJSON
  - TopoJSON: TopoJSON
  - OGR_GMT: GMT ASCII Vectors (.gmt)
  - GPKG: GeoPackage
  - SQLite: SQLite / Spatialite
  - ODBC:
  - WAsP: WAsP .map format
  - PGeo: ESRI Personal GeoDatabase
  - MSSQLSpatial: Microsoft SQL Server Spatial Database
  - PostgreSQL: PostgreSQL/PostGIS
  - OpenFileGDB: ESRI FileGDB
  - DXF: AutoCAD DXF
  - CAD: AutoCAD Driver
  - FlatGeobuf: FlatGeobuf
  - Geoconcept: Geoconcept
  - GeoRSS: GeoRSS
  - VFK: Czech Cadastral Exchange Data Format
  - PGDUMP: PostgreSQL SQL dump
  - OSM: OpenStreetMap XML and PBF
  - GPSBabel: GPSBabel
  - OGR_PDS: Planetary Data Systems TABLE
  - WFS: OGC WFS (Web Feature Service)
  - OAPIF: OGC API - Features
  - EDIGEO: French EDIGEO exchange format
  - SVG: Scalable Vector Graphics
  - Idrisi: Idrisi Vector (.vct)
  - XLS: MS Excel format
  - ODS: Open Document/ LibreOffice / OpenOffice Spreadsheet
  - XLSX: MS Office Open XML spreadsheet
  - Elasticsearch: Elastic Search
  - Carto: Carto
  - AmigoCloud: AmigoCloud
  - SXF: Storage and eXchange Format
  - Selafin: Selafin
  - JML: OpenJUMP JML
  - PLSCENES: Planet Labs Scenes API
  - CSW: OGC CSW (Catalog  Service for the Web)
  - VDV: VDV-451/VDV-452/INTREST Data Format
  - MVT: Mapbox Vector Tiles
  - NGW: NextGIS Web
  - MapML: MapML
  - GTFS: General Transit Feed Specification
  - TIGER: U.S. Census TIGER/Line
  - AVCBin: Arc/Info Binary Coverage
  - AVCE00: Arc/Info E00 (ASCII) Coverage
  - GenBin: Generic Binary (.hdr Labelled)
  - ENVI: ENVI .hdr Labelled
  - EHdr: ESRI .hdr Labelled
  - ISCE: ISCE raster
  - Zarr: Zarr
  - HTTP: HTTP Fetching Wrapper

Available Vector Drivers: 73 种
  - FITS
  - PCIDSK
  - netCDF
  - PDS4
  - VICAR
  - JP2OpenJPEG
  - PDF
  - MBTiles
  - BAG
  - EEDA
  - OGCAPI
  - ESRI Shapefile
  - MapInfo File
  - UK .NTF
  - LVBAG
  - OGR_SDTS
  - S57
  - DGN
  - OGR_VRT
  - Memory
  - CSV
  - GML
  - GPX
  - LIBKML
  - KML
  - GeoJSON
  - GeoJSONSeq
  - ESRIJSON
  - TopoJSON
  - OGR_GMT
  - GPKG
  - SQLite
  - ODBC
  - WAsP
  - PGeo
  - MSSQLSpatial
  - PostgreSQL
  - OpenFileGDB
  - DXF
  - CAD
  - FlatGeobuf
  - Geoconcept
  - GeoRSS
  - VFK
  - PGDUMP
  - OSM
  - GPSBabel
  - OGR_PDS
  - WFS
  - OAPIF
  - EDIGEO
  - SVG
  - Idrisi
  - XLS
  - ODS
  - XLSX
  - Elasticsearch
  - Carto
  - AmigoCloud
  - SXF
  - Selafin
  - JML
  - PLSCENES
  - CSW
  - VDV
  - MVT
  - NGW
  - MapML
  - GTFS
  - TIGER
  - AVCBin
  - AVCE00
  - HTTP

注:最后比较疑惑的是Python中为什么要使用from osgeo import gdal这种方式导入依赖,而不是import gdal from osgeo

参考资料

1\]GDAL 简介 \[2\]GDAL 下载安装

相关推荐
被巨款砸中3 小时前
前端视角下的 Web 安全攻防:XSS、CSRF、DDoS 一次看懂
前端·安全·xss
excel4 小时前
CSS 里的斜杠 /:你可能忽略的小细节
前端
PBitW5 小时前
element plus 使用细节 (二)
前端·vue·element plus·element使用细节
zcz16071278215 小时前
Web详解
前端
良木林5 小时前
JS函数进阶
开发语言·前端·javascript
HelloRevit6 小时前
让B站视频4倍速度播放
前端·javascript·音视频
SEO_juper6 小时前
E-E-A-T与现代SEO:赢得搜索引擎信任的完整策略
前端·搜索引擎·seo·数字营销·seo优化·谷歌seo
一点一木6 小时前
2025 前端 3D 选型指南:Three.js、Babylon.js、WebGPU 深度对比
前端·javascript·3d
岭子笑笑7 小时前
vant 4 暗黑主题源码阅读
前端