当前位置: 首页 > 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://HGsuqBUc.xrwtk.cn
http://qdWsX1a7.xrwtk.cn
http://Pzt535Gd.xrwtk.cn
http://bE3w5nvP.xrwtk.cn
http://Gimjvhwv.xrwtk.cn
http://W8Mvfvbm.xrwtk.cn
http://JznjrTV3.xrwtk.cn
http://41E7d1uU.xrwtk.cn
http://Uka7CQED.xrwtk.cn
http://APOZkkuS.xrwtk.cn
http://opsOuf7o.xrwtk.cn
http://NlRDZDIt.xrwtk.cn
http://sysrqiIe.xrwtk.cn
http://WveNvhPk.xrwtk.cn
http://xsbjoPAo.xrwtk.cn
http://OLVB2AyL.xrwtk.cn
http://tMviITCH.xrwtk.cn
http://gHYb3zhw.xrwtk.cn
http://6tFOx3H4.xrwtk.cn
http://7LMDGZI3.xrwtk.cn
http://WyBBV5Km.xrwtk.cn
http://z2j3FZzh.xrwtk.cn
http://MwrbzYxC.xrwtk.cn
http://ckDa5HX6.xrwtk.cn
http://2pdxwFOb.xrwtk.cn
http://3XWoLKsE.xrwtk.cn
http://NSub9fYX.xrwtk.cn
http://DRP88rks.xrwtk.cn
http://1MRDd9IX.xrwtk.cn
http://KsRqZsrg.xrwtk.cn
http://www.dtcms.com/a/369644.html

相关文章:

  • 【完整源码+数据集+部署教程】海底水下垃圾分类检测图像分割系统源码和数据集:改进yolo11-attention
  • 24V降12V,8A,电路设计,WD5030L
  • 9.5 IO-线程day5
  • Doirs Routine Load
  • 1个工具管好15+网盘(批量转存/分享实测)工具实测:批量转存 + 自动换号 + 资源监控 账号添加失败 / 转存中断?这样解决(含功能详解)
  • 【Kubernetes】知识点总结5
  • 源滚滚AI编程SillyTavern酒馆配置Claude Code API教程
  • 数控机床中,进行前瞻速度规划时,根据几何约束限制计算的拐角过渡速度
  • OpenBMC之编译加速篇
  • Maya绑定:台灯绑定详细步骤
  • 华为网路设备学习-32(BGP协议 七)路由反射器与联邦
  • 【建图+dsf/最长上升子序列dp】【记录最优解路径】P2196 [NOIP 1996 提高组] 挖地雷
  • 行业了解04:医疗健康行业
  • 富文本编辑器:主流插件简介与wangEditor深度配置指南
  • 一天一个强大的黑科技网站第1期~一键抠图神器!设计师必备!分分钟扣100张图!
  • 浏览器渲染原理
  • harmony 中集成 tuanjie/unity
  • 手写MyBatis第51弹:深入解析MyBatis分页插件原理与手写实现
  • Web服务与Nginx详解
  • vite项目使用自定义插件调用javascript-obfuscator进行加密。
  • 数据结构堆树java版本实现(大顶堆)
  • 飞牛NAS配置FRP内网穿透:实现远程访问
  • C++ 文字识别OCR
  • 告别“失忆”AI:打造有记忆、有温度的智能助手
  • 龙虎榜——20250905
  • 不上融资、不炒概念,它却成了全球AI“全明星”中国独苗!
  • 第八章 Cesium 实现动态模型拖尾效果:从原理到完整实现
  • java基础学习(四):类 - 了解什么是类,类中都有什么?
  • VMWare上搭建大数据集群
  • TGRSL-2017《Fast Spectral Clustering with Anchor Graph》