Python与开源GIS:开始使用GDAL

简介: Python与开源GIS:开始使用GDAL


GDAL导入

在Python中使用GDAL,只需要导入 gdal 模块。 在早期的版本(1.5以前)中,GDAL是使用 import gdal 语句导入。

但是后来GDAL成为OSGEO的子项目后,对代码进行了重新组织。 在 GDAL RFC 17号文件 中, 实现了Python的新的名称空间osgeo, 并将gdal与ogr都包含在这个名称空间之下。

RFC(Request For Comments),意即“请求评议”,一系列以编号排定的文件。 当某家机构或团体开发出了一套标准或提出对某种标准的设想,想要征询外界的意见时, 就会在Internet上发放一份RFC,对这一问题感兴趣的人可以阅读该RFC并提出自己的意见。

但是后来GDAL成为OSGEO的子项目后,对代码进行了重新组织。 在 RFC 17号文件中, 实现了Python的新的名称空间osgeo, 并将gdal与ogr都包含在这个名称空间之下。 现在推荐使用下面的语句导入:

1.6以后,推荐使用下面的语句导入:

>>> from osgeo import gdal

当然早期版本也是支持的,但是在使用的时候会产生一个弃用警告:

为了保持兼容性,可以使用下面的语句来导入:

>>> try:
>>>     import gdal
>>> except:
>>>     from osgeo import gdal

除了gdal包,还有一个gdalconst包最好也导入。 gdalconst也是osgeo的一个包,它只是在代码中对GDAL中用到的一些常量进行了绑定。 其中gdalconst中的常量都加了前缀,力图与其他模块冲突最小。 所以对gdalconst你可以直接这样导入:

>>> from osgeo.gdalconst import *

驱动

要读取某种类型的数据,必须要先载入数据驱动,也就是初始化一个对象,让它“知道”某种数据结构。 可以使用下面语句一次性注册所有的数据驱动,但是只能读不能写:

>>> gdal.AllRegister()

单独注册某一类型的数据驱动,这样的话可以读也可以写,可以新建数据集(这最终还要取决于GDAL是否已经进行了实现)。下面的语句注册了Erdas的栅格数据类型。

>>> driver = gdal.GetDriverByName('HFA')
>>> driver.Register()
6

可以使用下面的语句判断driver是否注册成功。

>>> driver = gdal.GetDriverByName('GeoTiff')
>>> driver == True
False

上面的注册就失败了,因为不存在名称为“GeoTiff”的数据格式(正确的格式为“GTiff”)。

上面的注册就失败了,因为不存在名称为“GeoTiff”的数据格式(正确的格式为“GTiff”)。

查看系统支持的数据格式

除了使用GetDriverByName(), GDAL还可以使用GetDriver()来获得驱动。 下面的代码获取了系统支持的所有的驱动的名称。

>>> from osgeo import gdal
>>> drv_count = gdal.GetDriverCount()
>>> for idx in range(drv_count):
>>>     driver = gdal.GetDriver(idx)
>>>     print( "%10s: %s" % (driver.ShortName, driver.LongName))
       VRT: Virtual Raster
   DERIVED: Derived datasets using VRT pixel functions
     GTiff: GeoTIFF
      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
       AIG: Arc/Info Binary Grid
   AAIGrid: Arc/Info ASCII Grid
GRASSASCIIGrid: GRASS ASCII Grid
      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
       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
       GMT: GMT NetCDF Grid Format
    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
      INGR: Intergraph Raster
      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
   FujiBAS: Fuji BAS Scanner Image
       GSC: GSC Geogrid
      FAST: EOSAT FAST Format
        BT: VTP .bt (Binary Terrain) 1.3 Format
       LAN: Erdas .LAN/.GIS
       CPG: Convair PolGASP
       IDA: Image Data and Analysis
       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
      NTv1: NTv1 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
       ARG: Azavea Raster Grid format
       RIK: Swedish Grid RIK (.rik)
   USGSDEM: USGS Optional ASCII DEM (and CDED)
       GXF: GeoSoft Grid Exchange Format
      DODS: DAP 3.x servers
       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)
   EPSILON: Epsilon wavelets
PostGISRaster: PostGIS Raster driver
      SAGA: SAGA GIS Binary Grid (.sdat, .sg-grd-z)
       XYZ: ASCII Gridded XYZ
       HF2: HF2/HFZ heightfield raster
    JPEGLS: JPEGLS
       OZI: OziExplorer Image File
       CTG: USGS LULC Composite Theme Grid
   E00GRID: Arc/Info Export E00 GRID
      ZMap: ZMap Plus Grid
  NGSGEOID: NOAA NGS Geoid Height Grids
      IRIS: IRIS data (.PPI, .CAPPi etc)
       PRF: Racurs PHOTOMOD PRF
       RDA: DigitalGlobe Raster Data Access driver
     EEDAI: Earth Engine Data API Image
      EEDA: Earth Engine Data API
    SIGDEM: Scaled Integer Gridded DEM .sigdem
IGNFHeightASCIIGrid: IGN France height correction ASCII Grid
   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
  OGR_SDTS: SDTS
       S57: IHO S-57 (ENC)
       DGN: Microstation DGN
   OGR_VRT: VRT - Virtual Datasource
       REC: EPIInfo .REC
    Memory: Memory
       BNA: Atlas BNA
       CSV: Comma Separated Value (.csv)
       NAS: NAS - ALKIS
       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
Interlis 1: Interlis 1
Interlis 2: Interlis 2
   OGR_GMT: GMT ASCII Vectors (.gmt)
      GPKG: GeoPackage
    SQLite: SQLite / Spatialite
  OGR_DODS: OGR_DODS
      ODBC: ODBC
      WAsP: WAsP .map format
      PGeo: ESRI Personal GeoDatabase
MSSQLSpatial: Microsoft SQL Server Spatial Database
  OGR_OGDI: OGDI Vectors (VPF, VMAP, DCW)
PostgreSQL: PostgreSQL/PostGIS
     MySQL: MySQL
OpenFileGDB: ESRI FileGDB
    XPlane: X-Plane/Flightgear aeronautical data
       DXF: AutoCAD DXF
       CAD: AutoCAD Driver
Geoconcept: Geoconcept
    GeoRSS: GeoRSS
GPSTrackMaker: GPSTrackMaker
       VFK: Czech Cadastral Exchange Data Format
    PGDUMP: PostgreSQL SQL dump
       OSM: OpenStreetMap XML and PBF
  GPSBabel: GPSBabel
       SUA: Tim Newport-Peace's Special Use Airspace Format
   OpenAir: OpenAir
   OGR_PDS: Planetary Data Systems TABLE
       WFS: OGC WFS (Web Feature Service)
      WFS3: OGC WFS 3 client (Web Feature Service)
      SOSI: Norwegian SOSI Standard
       HTF: Hydrographic Transfer Vector
AeronavFAA: Aeronav FAA
  Geomedia: Geomedia .mdb
    EDIGEO: French EDIGEO exchange format
       GFT: Google Fusion Tables
       SVG: Scalable Vector Graphics
   CouchDB: CouchDB / GeoCouch
  Cloudant: Cloudant / CouchDB
    Idrisi: Idrisi Vector (.vct)
    ARCGEN: Arc/Info Generate
  SEGUKOOA: SEG-P1 / UKOOA P1/90
      SEGY: SEG-Y
       XLS: MS Excel format
       ODS: Open Document/ LibreOffice / OpenOffice Spreadsheet
      XLSX: MS Office Open XML spreadsheet
ElasticSearch: Elastic Search
      Walk: Walk
     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
     GMLAS: Geography Markup Language (GML) driven by application schemas
       MVT: Mapbox Vector Tiles
     TIGER: U.S. Census TIGER/Line
    AVCBin: Arc/Info Binary Coverage
    AVCE00: Arc/Info E00 (ASCII) Coverage
       NGW: NextGIS Web
    GenBin: Generic Binary (.hdr Labelled)
      ENVI: ENVI .hdr Labelled
      EHdr: ESRI .hdr Labelled
      ISCE: ISCE raster
      HTTP: HTTP Fetching Wrapper

上面第4行,直接使用了索引值来获得驱动,而在第5行则打印了驱动的名称。注意到驱动有ShortName与LongName。ShortName与栅格数据格式在GDAL中定义的编码是一致的,而LongName则可以看成是描述性的文字。 对于不同的Linux发行版,以及安装的GDAL的版本与编译选项的不同,上面程序的结果是不一样的。所以一般情况下要避免使用gdal.GetDriver()这个函数来获取驱动。 我使用的系统是Debian Squeeze,返回的驱动的个数是88。

目录
相关文章
|
24天前
|
人工智能 API 开发工具
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
吴恩达发布的开源Python库aisuite,提供了一个统一的接口来调用多个大型语言模型(LLM)服务。支持包括OpenAI、Anthropic、Azure等在内的11个模型平台,简化了多模型管理和测试的工作,促进了人工智能技术的应用和发展。
97 1
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
|
1月前
|
机器学习/深度学习 算法 编译器
Python程序到计算图一键转化,详解清华开源深度学习编译器MagPy
【10月更文挑战第26天】MagPy是一款由清华大学研发的开源深度学习编译器,可将Python程序一键转化为计算图,简化模型构建和优化过程。它支持多种深度学习框架,具备自动化、灵活性、优化性能好和易于扩展等特点,适用于模型构建、迁移、部署及教学研究。尽管MagPy具有诸多优势,但在算子支持、优化策略等方面仍面临挑战。
79 3
|
28天前
|
存储 算法 安全
FreeMQTT:一款Python语言实现的开源MQTT Server
FreeMQTT 是一款用 Python 语言并基于 Tornado 开发的开源 MQTT 服务器,支持 MQTT3.1.1 和 MQTT5.0 协议,提供多租户安全隔离、高效 Topic 匹配算法及实时上下线通知等功能,适用于 IoT 场景。快速启动仅需克隆仓库、安装依赖并运行服务。
|
3月前
|
Linux Android开发 iOS开发
开源的Python库,用于开发多点触控应用程序
Kivy是一款开源Python库,专为开发多点触控应用设计,支持Android、iOS、Linux、OS X和Windows等平台。本文将指导你使用Kivy创建“Hello World”应用并打包成Android APK。首先通过`pip install kivy`安装Kivy,然后创建并运行一个简单的Python脚本。接着,安装Buildozer并通过`buildozer init`生成配置文件,修改相关设置后,运行`buildozer -v android debug`命令打包应用。完成构建后,你将在`./bin/`目录下找到类似`your-app-debug.apk`的文件。
87 2
|
4月前
|
定位技术 API C++
Python GIS神器shapely 2.0新版本来了
Python GIS神器shapely 2.0新版本来了
|
4月前
|
数据挖掘 定位技术 API
Python GIS神器geopandas 1.0版本来了
Python GIS神器geopandas 1.0版本来了
|
4月前
|
存储 Python 容器
python中的h5py开源库的使用
python中的h5py开源库的使用
34 1
|
4月前
|
算法 数据处理 数据安全/隐私保护
|
4月前
|
算法 数据可视化 定位技术
QGIS+Conda+jupyter玩转Python GIS
QGIS+Conda+jupyter玩转Python GIS
|
4月前
|
数据可视化 Serverless 数据格式
Python的GDAL求取栅格文件相互间的像素变化值
完成这一过程后,你将会得到一个包含像素差异值的新栅格文件,可以使用各种地理信息系统软件进行可视化和分析。
60 0
下一篇
DataWorks