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

GDAL 在 Python 中的开发起步

文章目录

    • 1. 本地开发环境
    • 2. OSGeo与GDAL
    • 3. GDAL在Python中引入方式
    • 4. GDAL的核心概念--注册数据驱动
    • 5. 查看驱动列表
    • 6. Python 的模块导入机制

1. 本地开发环境

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

Python 3.12.8GDAL:3.11.1

2. OSGeo与GDAL

osgeo官网地址:https://www.osgeo.org/

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

在这里插入图片描述
GDAL网址:https://www.osgeo.org/projects/gdal/

3. GDAL在Python中引入方式

早期 GDAL 直接提供 import gdal,但后来统一放在 osgeo 包里(避免命名冲突)。

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)。

更清晰的命名空间:
osgeo 包含多个子模块:gdal(栅格)、ogr(矢量)、osr(坐标系)、gdal_array 等。
用 from osgeo import gdal 可以明确表明 这是 osgeo 里的 gdal 模块。

对比示例:

# 方式一:直接导入整个路径
import osgeo.gdal
dataset = osgeo.gdal.Open("file.tif")# 方式二:推荐写法(更简洁)
from osgeo import gdal
dataset = gdal.Open("file.tif")

两者效果是一样的,只是写法不同。

4. GDAL的核心概念–注册数据驱动

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

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

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

自动注册所有驱动,gdal和ogr模块都提供了便捷的函数来一次性注册所有的驱动。

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驱动

5. 查看驱动列表

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

driver.py

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()用于统计支持的栅格数据和矢量数据格式总数。对于栅格数据具有ShortName和LongName两个名称,其中ShortName相当于驱动名称简写,而LongName这是对应驱动的文字描述数据。

保存该文本文件,并将其后缀修改为.py

之后打开cmd命令行窗口,导航到drivers.py文件目录,运行命令图片
在这里插入图片描述

python driver.py

在这里插入图片描述

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

Available Raster Drivers: 201 种- VRT: Virtual Raster- DERIVED: Derived datasets using VRT pixel functions- GTI: GDAL Raster Tile Index- SNAP_TIFF: Sentinel Application Processing GeoTIFF- GTiff: GeoTIFF- COG: Cloud optimized GeoTIFF generator- LIBERTIFF: GeoTIFF (using LIBERTIFF library)- 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)- ESRIC: Esri Compact Cache- AIG: Arc/Info Binary Grid- AAIGrid: Arc/Info ASCII Grid- GRASSASCIIGrid: GRASS ASCII Grid- ISG: International Service for the Geoid- DTED: DTED Elevation Raster- PNG: Portable Network Graphics- JPEG: JPEG JFIF- MEM: In Memory raster, vector and multidimensional 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- 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- 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 JP2OpenJPEG library- L1B: NOAA Polar Orbiter Level 1b Data Set- 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- 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- MAP: OziExplorer .MAP- KMLSUPEROVERLAY: Kml Super Overlay- WEBP: WEBP- PDF: Geospatial PDF- 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- LAN: Erdas .LAN/.GIS- CPG: Convair PolGASP- NDF: NLAPS Data Format- EIR: Erdas Imagine Raw- LCP: FARSITE v.4 Landscape File (.lcp)- GTX: NOAA Vertical Datum .GTX- LOSLAS: NADCON .los/.las Datum Grid Shift- NTv2: NTv2 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)- RIK: Swedish Grid RIK (.rik)- USGSDEM: USGS Optional ASCII DEM (and CDED)- GXF: GeoSoft Grid Exchange Format- BAG: Bathymetry Attributed Grid- S102: S-102 Bathymetric Surface Product- S104: S-104 Water Level Information for Surface Navigation Product- S111: Surface Currents Product- 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)- PostGISRaster: PostGIS Raster driver- SAGA: SAGA GIS Binary Grid (.sdat, .sg-grd-z)- XYZ: ASCII Gridded XYZ- HF2: HF2/HFZ heightfield raster- 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- AVIF: AV1 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- GDALG: GDAL Streamed Algorithm driver- GNMFile: Geographic Network generic file based model- GNMDatabase: Geographic Network generic DB based model- ESRI Shapefile: ESRI Shapefile- MapInfo File: MapInfo File- LVBAG: Kadaster LV BAG Extract 2.0- S57: IHO S-57 (ENC)- DGN: Microstation DGN- OGR_VRT: VRT - Virtual Datasource- 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: Open Database Connectivity (ODBC)- WAsP: WAsP .map format- PGeo: ESRI Personal GeoDatabase- MSSQLSpatial: Microsoft SQL Server Spatial Database- PostgreSQL: PostgreSQL/PostGIS- OpenFileGDB: ESRI FileGeodatabase (using OpenFileGDB)- DXF: AutoCAD DXF- CAD: AutoCAD Driver- FlatGeobuf: FlatGeobuf- 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- 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- PMTiles: ProtoMap Tiles- JSONFG: OGC Features and Geometries JSON- MiraMonVector: MiraMon Vectors (.pol, .arc, .pnt)- ADBC: Arrow Database Connectivity- AVCBin: Arc/Info Binary Coverage- AVCE00: Arc/Info E00 (ASCII) Coverage- AIVector: Artificial Intelligence powered vector driver- GenBin: Generic Binary (.hdr Labelled)- ENVI: ENVI .hdr Labelled- EHdr: ESRI .hdr Labelled- ISCE: ISCE raster- Zarr: Zarr- RCM: Radarsat Constellation Mission XML Product- HTTP: HTTP Fetching Wrapper
nAvailable Vector Drivers: 74 种- MEM- FITS- PCIDSK- netCDF- PDS4- VICAR- JP2OpenJPEG- PDF- MBTiles- BAG- EEDA- OGCAPI- GDALG- ESRI Shapefile- MapInfo File- LVBAG- S57- DGN- OGR_VRT- CSV- GML- GPX- LIBKML- KML- GeoJSON- GeoJSONSeq- ESRIJSON- TopoJSON- OGR_GMT- GPKG- SQLite- ODBC- WAsP- PGeo- MSSQLSpatial- PostgreSQL- OpenFileGDB- DXF- CAD- FlatGeobuf- GeoRSS- VFK- PGDUMP- OSM- GPSBabel- OGR_PDS- WFS- OAPIF- EDIGEO- Idrisi- XLS- ODS- XLSX- Elasticsearch- Carto- AmigoCloud- SXF- Selafin- JML- PLSCENES- CSW- VDV- MVT- NGW- MapML- GTFS- PMTiles- JSONFG- MiraMonVector- ADBC- AVCBin- AVCE00- AIVector- HTTP

6. Python 的模块导入机制

Python 的导入语法有几种形式:

  1. import 语法

import math
import osgeo.gdal

这种写法会把整个模块导入,调用时需要写完整路径:

osgeo.gdal.Open("xxx.tif")
  1. from … import … 语法
from osgeo import gdal

这种写法相当于从 osgeo 包中取出 gdal 模块,放到当前命名空间里。

调用时就可以直接用:

gdal.Open("xxx.tif")
  1. GDAL 官方推荐 from osgeo import gdal
  • 兼容性:
    早期 GDAL 直接提供 import gdal,但后来统一放在 osgeo 包里(避免命名冲突)。
    如果用 import gdal,某些环境下会找不到模块。
    推荐写法是:
from osgeo import gdal, ogr, osr
  • 更清晰的命名空间:
    osgeo 包含多个子模块:gdal(栅格)、ogr(矢量)、osr(坐标系)、gdal_array 等。
    用 from osgeo import gdal 可以明确表明 这是 osgeo 里的 gdal 模块。

在这里插入图片描述


“人的一生会经历很多痛苦,但回头想想,都是传奇”。



文章转载自:

http://vMBjbNOM.fLqbg.cn
http://jvCabarz.fLqbg.cn
http://pmhYzwJx.fLqbg.cn
http://gEqb9dhV.fLqbg.cn
http://YAikZmGx.fLqbg.cn
http://2LaggV3L.fLqbg.cn
http://7oXUTHI4.fLqbg.cn
http://qjAT0EuC.fLqbg.cn
http://7P5ziKPv.fLqbg.cn
http://VT7DR8F2.fLqbg.cn
http://tgwBtBBf.fLqbg.cn
http://cG2YfFC8.fLqbg.cn
http://VD38W3qT.fLqbg.cn
http://xRefCw9n.fLqbg.cn
http://FH8cNijj.fLqbg.cn
http://rIapxoGj.fLqbg.cn
http://3s7lx3jO.fLqbg.cn
http://ie87X3Oa.fLqbg.cn
http://UlKnCnjx.fLqbg.cn
http://88AgBQH9.fLqbg.cn
http://XpJFvnc4.fLqbg.cn
http://gPAGABYE.fLqbg.cn
http://CRe3cxWU.fLqbg.cn
http://oN2PkDqW.fLqbg.cn
http://3aIn285s.fLqbg.cn
http://GC0zSCX9.fLqbg.cn
http://P26byaPq.fLqbg.cn
http://2FfbGBa0.fLqbg.cn
http://yAoglvrp.fLqbg.cn
http://J2eGQZdN.fLqbg.cn
http://www.dtcms.com/a/372274.html

相关文章:

  • RK3568编译linux内核遇到问题总结
  • React学习教程,从入门到精通, React 样式语法知识点与案例详解(13)
  • BiFormer注意力机制YOLOV8
  • 【算法】字符串专题
  • 谓语动词选择指南
  • JavaScript常见算法题分类
  • python---多态
  • 中兴B860AV3.2-M/B860AV3.1-M2-内存大小区分参考指南
  • 【开题答辩全过程】以 校园二手货物交易平台为例,包含答辩的问题和答案
  • 【PyTorch】图像多分类部署
  • 阿里云上启动enclave 并与宿主机通信
  • Python 多任务编程:进程、线程与协程全面解析
  • Wan系列模型解析--VACE
  • 关于学习的一些感悟
  • 如何在Python中使用正则表达式替换特定格式的文本?
  • 【正则表达式】 正则表达式断言(Assertion)是什么?
  • GD32入门到实战39--SRAM
  • [RootersCTF2019]I_<3_Flask
  • 多功能台灯设计与实现(论文+源码)
  • SpringBoot+RustFS实现高效文件存储解决方案
  • Docker04-镜像源切换
  • Python 2025:量化金融与智能交易的新纪元
  • 基于 WeKnora 构建企业级 RAG 知识库:Windows 部署与实践全解析
  • 【Android】View 的基础知识
  • FastDFS V6双IP特性及配置
  • Spring Boot常用注解-详细解析+示例
  • 使用 Doxygen 生成 C++ 与 Python 项目文档
  • 【面试题】Transformer基础原理与数学模型
  • 插入排序与希尔排序
  • LLM面试基础(一)