zoukankan      html  css  js  c++  java
  • GDAL虚拟文件简介

    在博客正文开始之前,先祝大家在新的一年里工作顺利、万事如意。新年新气象,希望在新的一年里能够和大家多多交流,共同学习进步。

    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数据的路径。
    这里有个小说明,加入这个zip文件中只有一个数据,那么可以不用写后面的第三部分,直接写到第二部分即可。

    读取.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.shp
    ogrinfo这个工具不多说了,类似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:password@example.com/foldername/file.zip/example.shp

    路径是/vsizip/vsicurl/ftp://user:password@example.com/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
    

  • 相关阅读:
    from import 的认识
    模块初识
    eq方法
    hash介绍
    item系列
    析构函数
    serializers进阶
    APIView源码解析
    RPC协议
    面试题补充
  • 原文地址:https://www.cnblogs.com/xiaowangba/p/6313977.html
Copyright © 2011-2022 走看看