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。