在博客正文开始之前,先祝大家在新的一年里工作顺利、万事如意。新年新气象,希望在新的一年里能够和大家多多交流,共同学习进步。
GDAL虚拟文件大概从1.6.0版本开始,最开始主要是用来访问zip或gz等压缩包归档文件中的数据。距离详细可以参考网址:http://trac.osgeo.org/gdal/wiki/UserDocs/ReadInZip。最开始只支持两种虚拟文件系统,/vsigzip和/viszip。对于.zip文件只支持读取,而/visgzip支持读取和顺序写入。但是写入的速度有些慢。
自1.8.0开始,GDAL可以读取未压缩的.tar或者压缩过的.tar.gz/.tgz压缩包中的数据。
下面分别举个简单的例子(使用的是gdalinfo工具和ogrinfo工具)来进行说明。
读取gz文件:
gdalinfo /vsigzip/path/to/the/file.gz gdalinfo /vsigzip//home/path/to/the/file.gz上面第一行,/path/to/the/file.gz,这个是文件的相对路径。第二行是绝对路径,这个路径是Linux系统下的路径,Linux系统下的绝对路径都是用/来开头的;按照GDAL的说明,对于Linux下的绝对路径,前面要多加一个/。Windows下一般都是盘符开头的,如第四行中的C:/path/to/the/file.zip就是。
读取Zip文件:
gdalinfo /vsizip/path/to/the/file.zip/path/inside/the/zip/file.tif gdalinfo /vsizipC:/path/to/the/file.zip/path/inside/the/zip/file.tif先看上面两句话,第一句话和第二句基本一样,只不过第一句是相对路径,第二句是绝对路径。下面以第二句为例进行说明。第二句的文件路径是:/vsizipC:/path/to/the/file.zip/path/inside/the/zip/file.tif。这个路径可以拆为三部分,分别用不同的颜色来表示。红色的部分用来标记虚拟文件系统的类型,是一个zip格式的;第二部分深红色表示的是这个zip文件的路径;第三部分就是绿色的部分,用来表示的值zip压缩包中tif数据的路径。
读取.tar.gz和.tgz文件:
读取.tar.gz和.tgz文件和上面的类似。自1.8.0版本开始,GDAL可以读取tar.gz和tgz格式的归档文件中的数据。读取的语法与上面的非常类似,如下:
gdalinfo /vsitar/path/to/the/file.tar/path/inside/the/tar/file gdalinfo /vsitar/path/to/the/file.tar.gz/path/inside/the/targz/file上面两句意思差不多,一个是读取tar中的,一个是读取tar.gz中的数据。还是以第二个为例进行说明。文件路径为/vsitar/path/to/the/file.tar.gz/path/inside/the/targz/file,还是三部分,第一部分用来说明虚拟文件的格式,第二部分是tar.gz的路径,第三部分是数据在tar.gz压缩包中的路径。
需要注意的是,读取tar.gz格式的数据要比读取zip数据慢很多。主要原因是tar.gz是整个包里面的所有文件一起压缩,而zip中是每个文件单独压缩。所以读取tar.gz中最后一个文件的时候,需要把前面的所有的文件都进行解压。
读取网络文件:
接下来是另外一个虚拟文件系统 /vsicurl,这个主要是用来读取网络数据的。这个也是在1.8.0版本中新加入的。比如可以直接访问一个网络上的shp数据。比如:
ogrinfo -ro -al -so /vsicurl/http://svn.osgeo.org/gdal/trunk/autotest/ogr/data/poly.shpogrinfo这个工具不多说了,类似gdalinfo,主要是用来查看矢量数据的信息用的。主要看后面的路径部分。/vsicurl/http://svn.osgeo.org/gdal/trunk/autotest/ogr/data/poly.shp只有两部分,第一部分是红色的,用来标记后面的是一个网络路径,第二部分就是一个网络数据的路径。
上面输出的内容如下:
图1 访问网络shp输出的结果
有了上面的几个虚拟文件系统为记住,那么就可以把上面的进行组合来进行访问,比如要读取一个网络中的zip压缩包的一个shp数据,就需要先读取网络中的zip数据,然后再读取zip中的shp数据。例子如下:
ogrinfo -ro -al -so /vsizip/vsicurl/http://svn.osgeo.org/gdal/trunk/autotest/ogr/data/poly.zip.shp ogrinfo -ro -al -so /vsizip/vsicurl/http://svn.osgeo.org/gdal/trunk/autotest/ogr/data/poly.zip上面的路径就比较复杂了,中间使用了两个虚拟文件系统,/vsizip/vsicurl/http://svn.osgeo.org/gdal/trunk/autotest/ogr/data/poly.zip/poly.shp,分为四部分来说明,第一部分是zip,第二部分是curl网络,第三部分是真正的zip地址,第四部分是zip中shp的数据,按照上面的说明,假如这个zip中只有这一个shp数据,那么这个第四部分是可以省略不写的,比如上面的第二行。
上面两行输出的内容是一样的,截图如下:
图2 访问网络zip输出的结果
图3 访问网络zip输出的结果
除此之外还有更复杂的,假如一个数据在ftp服务器上,而且需要用户名和密码才能访问。这样的数据gdal还是可以照样访问,前提是你知道用户名和密码。例子如下:
ogrinfo -ro -al -so /vsizip/vsicurl/ftp://user:[email protected]/foldername/file.zip/example.shp
路径是/vsizip/vsicurl/ftp://user:[email protected]/foldername/file.zip/example.shp,我们依旧用颜色来进行拆分,第一部分和第二部分以及第四部分和上面的一样。不一样的是第三部分,绿色的部分,中间有个user:password@这个东西,从字面意思很清楚,分别是用户名和密码,@后面是数据地址。
最后再说一下,不是所有的格式都支持虚拟文件系统的,如何判断文件是否支持虚拟文件系统,一个简单的方法就是使用gdal工具中的--formats命令,然后在输出的格式中,后面的括弧中有加v的就表示支持,没有加v的就不支持。比如我输出的是:
太多了,图截不下,贴到后面吧:
C:\warmerda\bld\bin>gdalinfo.exe --formats Supported Formats: VRT (rw+v): Virtual Raster GTiff (rw+v): GeoTIFF NITF (rw+v): National Imagery Transmission Format RPFTOC (rov): Raster Product Format TOC format ECRGTOC (rov): ECRG TOC format HFA (rw+v): Erdas Imagine Images (.img) SAR_CEOS (rov): CEOS SAR Image CEOS (rov): CEOS Image JAXAPALSAR (rov): JAXA PALSAR Product Reader (Level 1.1/1.5) GFF (rov): Ground-based SAR Applications Testbed File Format (.gff) ELAS (rw+v): ELAS AIG (rov): Arc/Info Binary Grid AAIGrid (rwv): Arc/Info ASCII Grid GRASSASCIIGrid (rov): GRASS ASCII Grid SDTS (rov): SDTS Raster DTED (rwv): DTED Elevation Raster PNG (rwv): Portable Network Graphics JPEG (rwv): JPEG JFIF MEM (rw+): In Memory Raster JDEM (rov): Japanese DEM (.mem) GIF (rwv): Graphics Interchange Format (.gif) BIGGIF (rov): Graphics Interchange Format (.gif) ESAT (ro): Envisat Image Format FITS (rw+): Flexible Image Transport System BSB (rov): Maptech BSB Nautical Charts XPM (rwv): X11 PixMap Format BMP (rw+v): MS Windows Device Independent Bitmap DIMAP (rov): SPOT DIMAP AirSAR (ro): AirSAR Polarimetric Image RS2 (ro): RadarSat 2 XML Product PCIDSK (rw+v): PCIDSK Database File PCRaster (rw): PCRaster Raster File ILWIS (rw+v): ILWIS Raster Map SGI (rw+): SGI Image File Format 1.0 SRTMHGT (rwv): SRTMHGT File Format Leveller (rw+): Leveller heightfield Terragen (rw+): Terragen heightfield HDF4 (ro): Hierarchical Data Format Release 4 HDF4Image (rw+): HDF4 Dataset ISIS3 (rov): USGS Astrogeology ISIS cube (Version 3) ISIS2 (rw+v): USGS Astrogeology ISIS cube (Version 2) PDS (rov): NASA Planetary Data System TIL (rov): EarthWatch .TIL ERS (rw+v): ERMapper .ers Labelled ECW (rov): ERDAS Compressed Wavelets (SDK 4.2) JP2ECW (rov): ERDAS JPEG2000 (SDK 4.2) JPEG2000 (rwv): JPEG-2000 part 1 (ISO/IEC 15444-1) L1B (rov): NOAA Polar Orbiter Level 1b Data Set FIT (rwv): FIT Image GRIB (rov): GRIdded Binary (.grb) MrSID (rov): Multi-resolution Seamless Image Database (MrSID) JP2MrSID (rov): MrSID JPEG2000 MG4Lidar (ro): MrSID Generation 4 / Lidar (.sid) RMF (rw+v): Raster Matrix Format WCS (rov): OGC Web Coverage Service WMS (rwv): OGC Web Map Service MSGN (ro): EUMETSAT Archive native (.nat) RST (rw+v): Idrisi Raster A.1 INGR (rw+v): Intergraph Raster GSAG (rwv): Golden Software ASCII Grid (.grd) GSBG (rw+v): Golden Software Binary Grid (.grd) GS7BG (rov): Golden Software 7 Binary Grid (.grd) COSAR (ro): COSAR Annotated Binary Matrix (TerraSAR-X) TSX (rov): TerraSAR-X Product COASP (ro): DRDC COASP SAR Processor Raster R (rwv): R Object Data Store PNM (rw+v): Portable Pixmap Format (netpbm) DOQ1 (rov): USGS DOQ (Old Style) DOQ2 (rov): USGS DOQ (New Style) ENVI (rw+v): ENVI .hdr Labelled EHdr (rw+v): ESRI .hdr Labelled GenBin (rov): Generic Binary (.hdr Labelled) PAux (rw+): PCI .aux Labelled MFF (rw+): Vexcel MFF Raster MFF2 (rw+): Vexcel MFF2 (HKV) Raster FujiBAS (ro): Fuji BAS Scanner Image GSC (rov): GSC Geogrid FAST (rov): EOSAT FAST Format BT (rw+v): VTP .bt (Binary Terrain) 1.3 Format LAN (rw+v): Erdas .LAN/.GIS CPG (ro): Convair PolGASP IDA (rw+): Image Data and Analysis NDF (rov): NLAPS Data Format EIR (rov): Erdas Imagine Raw DIPEx (rov): DIPEx LCP (rov): FARSITE v.4 Landscape File (.lcp) GTX (rw+v): NOAA Vertical Datum .GTX LOSLAS (rov): NADCON .los/.las Datum Grid Shift NTv2 (rw+v): NTv2 Datum Grid Shift ACE2 (rov): ACE2 SNODAS (rov): Snow Data Assimilation System RIK (ro): Swedish Grid RIK (.rik) USGSDEM (rwv): USGS Optional ASCII DEM (and CDED) GXF (ro): GeoSoft Grid Exchange Format HTTP (ro): HTTP Fetching Wrapper BAG (ro): Bathymetry Attributed Grid HDF5 (ro): Hierarchical Data Format Release 5 HDF5Image (ro): HDF5 Dataset NWT_GRD (rov): Northwood Numeric Grid Format .grd/.tab NWT_GRC (rov): Northwood Classified Grid Format .grc/.tab ADRG (rw+v): ARC Digitized Raster Graphics SRP (rov): Standard Raster Product (ASRP/USRP) BLX (rw): Magellan topo (.blx) Rasterlite (rw): Rasterlite SAGA (rw+v): SAGA GIS Binary Grid (.sdat) KMLSUPEROVERLAY (rwv): Kml Super Overlay XYZ (rwv): ASCII Gridded XYZ HF2 (rwv): HF2/HFZ heightfield raster OZI (rov): OziExplorer Image File CTG (rov): USGS LULC Composite Theme Grid E00GRID (rov): Arc/Info Export E00 GRID ZMap (rwv): ZMap Plus Grid NGSGEOID (rov): NOAA NGS Geoid Height Grids