虚拟文件系统

作者

杰夫麦克纳

联系

jmckenna在gatewaygeomatics.com

最后更新

2016-06-23

虚拟文件系统

从gdal版本1.8.0开始,可以读取和显示“虚拟” 矢量和栅格文件, 例如指向URL的远程文件,或包含Ogr数据源的压缩本地.zip文件,并在MapServer中显示。有用的mapfile参数包括**/vsizip//vsigzip//vsitar//vsicurl/**

有关虚拟文件系统的详细信息

直接在MapServer中显示压缩文件

下面的示例使用压缩的shapefile“test.zip”,其中包含3个文件:

test.shp
test.dbf
test.zip

步骤1:验证格式是否已启用“虚拟”

执行 ogrinfo --formats gdalinfo --formats

> ogrinfo --formats
Supported Formats:
  PCIDSK -raster,vector- (rw+v): PCIDSK Database File
  netCDF -raster,vector- (rw+s): Network Common Data Format
  PDF -raster,vector- (rw+vs): Geospatial PDF
  DB2ODBC -raster,vector- (rw+): IBM DB2 Spatial Database
  ESRI Shapefile -vector- (rw+v): ESRI Shapefile
  MapInfo File -vector- (rw+v): MapInfo File
  ...

shapefile旁边的“(rw+v)”表示支持虚拟文件。

步骤2:通过ogrinfo/gdalinfo测试访问

使用带**/vsizip/**的ogrinfo总结压缩形状文件的功能。跟随 通过MapServer的OGR矢量层 记录如何将ogrinfo命令与层一起使用的示例,例如:

> ogrinfo /vsizip/test.zip/test.shp test -summary

请注意,“test.zip”存在于运行ogrinfo命令的同一目录中。

INFO: Open of `/vsizip/test.zip/test.shp'
      using driver `ESRI Shapefile' successful.

Layer name: test
Metadata:
  DBF_DATE_LAST_UPDATE=2000-03-17
Geometry: Polygon
Feature Count: 665
Extent: (-2750564.750000, -936638.500000) - (3583872.500000, 4673125.000000)
Layer SRS WKT:
(unknown)
AREA: Real (15.3)
PERIMETER: Real (15.3)
...

步骤3:配置MapServer层

一旦您确认可以使用ogrinfo(或gdalinfo for graster)读取功能,那么我们可以尝试在mapserver中创建地图。

警告

对于这些虚拟层,连接参数需要完整(绝对)路径。

LAYER
  NAME "test"
  TYPE POLYGON
  STATUS ON
  CONNECTIONTYPE OGR
  CONNECTION "/vsizip/C:/ms4w/apps/test/data/test.zip/test.shp"
  DATA "test"
  CLASS
    NAME "test"
    STYLE
      COLOR 240 240 240
      OUTLINECOLOR 199 199 199
    END
  END
END # layer

备注

如果zip中没有比shapefile预期的文件,则可以省略连接(test.shp)中的文件名。当您省略它时,zip被识别为一个目录,它的逻辑与在一个目录上执行ogrinfo的逻辑相同。

步骤4:测试映射文件

验证MapServer是否可以通过使用 Sp2IMG 效用:

shp2img -m mymapfile.map -o test.png -all_debug 5
msDrawMap(): rendering using outputformat named png (AGG/PNG).
msDrawMap(): WMS/WFS set-up and query, 0.000s
GDAL: GDALOpen(/vsizip/C:/ms4w/apps/test/data/test.zip/test.shp, this=07D691D8) succeeds as ESRI Shapefile.
Shape: 492 features read on layer 'test'.
GDAL: GDALClose(/vsizip/C:/ms4w/apps/test/data/test.zip/test.shp, this=07D691D8)
msDrawMap(): Layer 0 (test), 0.016s
msDrawMap(): Drawing Label Cache, 0.000s
msDrawMap() total time: 0.031s
msSaveImage(ttt.png) total time: 0.000s
msFreeMap(): freeing map at 06289688.

在MapServer中直接显示远程压缩文件

我们还可以使用**/vsicurl//vsizip显示可通过HTTP访问的外部压缩文件。/**

通过ogrinfo/gdalinfo测试访问

> ogrinfo -ro /vsizip/vsicurl/https://download.osgeo.org/mapserver/docs/vsicurl-test.zip/test.shp test -summary

配置MapServer层

LAYER
  NAME "test"
  TYPE POLYGON
  STATUS ON
  CONNECTIONTYPE OGR
  CONNECTION "/vsizip/vsicurl/https://download.osgeo.org/mapserver/docs/vsicurl-test.zip/test.shp"
  DATA "test"
  CLASS
    NAME "test"
    STYLE
      COLOR 240 240 240
      OUTLINECOLOR 199 199 199
    END
  END
END # layer

警告

虚拟层的“成本”/在MapServer中的显示速度不如常规层快。

直接在MapServer中显示远程(栅格)文件

也可以使用**/vsicurl通过http访问远程栅格文件。/**

通过gdalinfo测试访问

> gdalinfo /vsicurl/https://download.osgeo.org/gdal/data/gtiff/small_world.tif
Driver: GTiff/GeoTIFF
Files: /vsicurl/https://download.osgeo.org/gdal/data/gtiff/small_world.tif
Size is 400, 200
Coordinate System is:
GEOGCS["WGS 84",
    DATUM["WGS_1984",
        SPHEROID["WGS 84",6378137,298.257223563,
            AUTHORITY["EPSG","7030"]],
        AUTHORITY["EPSG","6326"]],
    PRIMEM["Greenwich",0],
    UNIT["degree",0.0174532925199433],
    AUTHORITY["EPSG","4326"]]
Origin = (-180.000000000000000,90.000000000000000)
Pixel Size = (0.900000000000000,-0.900000000000000)
...

配置MapServer层

LAYER
  NAME "test"
  TYPE RASTER
  STATUS ON
  DATA "/vsicurl/https://download.osgeo.org/gdal/data/gtiff/small_world.tif"
  CLASS
    NAME "test"
  END
END # layer