GDAL虚拟文件简介

摘要:
GDAL虚拟文件大概从1.6.0版本开始,最开始主要是用来访问zip或gz等压缩包归档文件中的数据。自1.8.0开始,GDAL可以读取未压缩的.tar或者压缩过的.tar.gz/.tgz压缩包中的数据。红色的部分用来标记虚拟文件系统的类型,是一个zip格式的;第二部分深红色表示的是这个zip文件的路径;第三部分就是绿色的部分,用来表示的值zip压缩包中tif数据的路径。主要原因是tar.gz是整个包里面的所有文件一起压缩,而zip中是每个文件单独压缩。

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

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只有两部分,第一部分是红色的,用来标记后面的是一个网络路径,第二部分就是一个网络数据的路径。

上面输出的内容如下:

GDAL虚拟文件简介第1张

图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数据,那么这个第四部分是可以省略不写的,比如上面的第二行。

上面两行输出的内容是一样的,截图如下:

GDAL虚拟文件简介第2张

图2 访问网络zip输出的结果

GDAL虚拟文件简介第3张

图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的就不支持。比如我输出的是:

GDAL虚拟文件简介第4张

太多了,图截不下,贴到后面吧:

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

免责声明:文章转载自《GDAL虚拟文件简介》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[转] c# 中使用opencv进行视频捕获(原).cc 和 .cpp 后缀结尾的文件的区别下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ME525+ Defy+ 刷机指南[zz]

本篇比较全面,转载来给大家参考!砖机也能刷! 地址:http://bbs.gfan.com/viewthread.php?tid=3263820&extra=page%3D1 ---------------------------------------------------------------------------------------...

Linux下添加php的zip模块

./configure --with-php-config=/usr/local/php/bin/php-config extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20180731/zip.so Linux下添加php的zip模块 今天早上开发的人员过来跟我说,测试机上的XX项目...

美国 ZIP Code 一览表

今天给大家提供美国的Zip Code的原因是大家在注册国外的账号时,需要提供这个Zip Code,因为一般美国的服务默认是面向美国的,甚至是仅支持美国. 以下提供一些美国的zip code 列表. 邮编   城市(city)     州(state) 12201  Albany       NewYork(NY) 30301  Atlanta      ...

7zip批量压缩,并批量改.jar

批量压缩.bat--要和将要压缩的文件在同一级目录下 for /d %%X in (*) do "D:Program Files7-Zip7z.exe" a "%%X.zip" ".\%%X*"     [技巧] a 添加文件到压缩档案。 7z a archive1.zip subdir :增加subdir文件夹下的所有的文件和子文件夹到archive...

【开发笔记】- 安装zip和unzip命令

1 [root@iz2zeea05by6vofxzsoxdbz elasticsearch]# unzip elasticsearch-6.2.4.zip 2 -bash: unzip: command not found 如果你如法使用unzip命令解压.zip文件,可能是你没有安装unzip软件,下面是安装方法 命令: yum list | grep...

Linux权限问题(2)-unzip引发的权限问题

背景:依然是上一个朋友,在用php调用unzip命令时,再次出现了权限被拒绝的问题. Notice:此处描述的问题,为使用php命令行执行php文件,因此进程属主为登录的用户,而不是nginx用户. 以root身份登录,给myuser的家目录设置读和执行的权限 Notice:cd到一个目录,需要对该目录具有执行权限,否则会出现权限被拒绝的提示. # chm...