当前位置: 首页 > news >正文

GDAL 开发起步

前言

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

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

GDAL 简介

GDAL 下载安装

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

1. 开发环境

本文使用如下开发环境,以供参考。
:::block-1
时间:2025年

Python:3.11.7

GDAL:3.7.3
:::

2. GDAL 在 Python 中的使用方式

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

# 不推荐的方式
import gdal
import ogr
import osr

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

from osgeo import gdal
from osgeo import ogr
from osgeo import osr
from osgeo import gdal_array
from osgeo import gdalconst

:::block-1

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

:::

3. 注册数据驱动

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

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

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

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

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

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'

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

4. 查看驱动列表

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

from osgeo import gdal
from osgeo import ogrprint("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种

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 WrapperAvailable 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

http://www.xdnf.cn/news/1472797.html

相关文章:

  • MySQL抛出的Public Key Retrieval is not allowed
  • nextcyber——暴力破解
  • c++ 压缩与解压缩
  • C++语言编程规范-初始化和类型转换
  • 技术面:Java并发(线程池、ForkJoinPool)
  • Acrobat-2025.001.20643_Win中文_PDF编辑器_便携版安装教程
  • Go初级之十:错误处理与程序健壮性
  • 内存纠错检错方法-SSCDSD
  • vggt代码详解
  • 迁移学习实战:基于 ResNet18 的食物分类
  • BYOFF (Bring Your Own Formatting Function)解析(80)
  • GPU集群扩展:Ray Serve与Celery的技术选型与应用场景分析
  • Pinia 两种写法全解析:Options Store vs Setup Store(含实践与场景对比)
  • (3)Seata AT 模式的事务一致性保证机制
  • MySQL慢查询优化策略
  • 洛谷 P2392 kkksc03考前临时抱佛脚-普及-
  • 【C++题解】贪心和模拟
  • Linux设备down机,如何识别是 断电还是软件复位
  • Java笔记20240726
  • 【Day 22】94.二叉树的中序遍历 104.二叉树的最大深度 226.翻转二叉树 101.对称二叉树
  • linux上nexus安装教程
  • 从“下山”到AI引擎:全面理解梯度下降(下)
  • 学习心得分享
  • 【OJ】C++ vector类OJ题
  • 使用国内镜像源解决 Electron 安装卡在 postinstall 的问题
  • 【Python - 类库 - BeautifulSoup】(01)“BeautifulSoup“使用示例
  • ESP-idf注册双服务器配置
  • SemiSAM+:在基础模型时代重新思考半监督医学图像分割|文献速递-深度学习人工智能医疗图像
  • 笔记:现代操作系统:原理与实现(2)
  • CLIP学习