前言
❝
使用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、ogr
与osr
等模块整合到了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才知道调用哪个驱动来处理数据。
方式一:自动注册所有驱动
常用的方式是自动注册所有驱动。gdal
和ogr
模块都提供了便捷的函数来一次性注册所有的驱动。
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()
用于统计支持的栅格数据和矢量数据格式总数。对于栅格数据具有ShortName
和LongName
两个名称,其中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 下载安装