瓦片索引

作者

主机地理信息系统

最后更新

2013/07/04

介绍

介绍TileIndex,MapServer的动态镶嵌方法。

什么是tileindex?我怎么做?

tileindex是一个将多个数据集绑定到一个层的形状文件。因此,您不需要为每幅图像或每个县的道路数据创建单独的图层;制作一个tileindex,让mapserver将马赛克快速拼合在一起。

制作tileindex很容易使用 gdaltindex 对于GDAL数据源(RASTER)和 ogrtindex 对于OGR数据源(向量)。只需运行它们,指定要创建的索引文件和要添加到索引中的数据源列表。

例如,要制作几个TIFF的马赛克:

gdaltindex imagery.shp imagery/*.tif

要制作一个矢量拼图:

ogrtindex strees.shp tiger/CA/*.shp tiger/NV/*.shp

注解

ogratindex 和 Gdatindex add 索引的指定文件。有时您必须删除索引文件以避免创建重复条目。

在 Mapfile 中使用tileindex

使用tileindex作为层最好用一个例子来解释:

LAYER
    NAME "Roads"
    STATUS ON
    TYPE LINE
    TILEINDEX "tiger/index.shp"
    TILEITEM "LOCATION"
END

这里有两个注意事项: TILEINDEXTILEITEM . tileindex只是索引文件的路径,tileitem指定shapefile中包含索引引用的文件名的字段。tileitem通常是“location”,除非在运行gdaltindex或ogrtindex时指定了*-tileindex*选项。

关于路径名的两个重要说明:

  • tileindex的路径遵循与任何其他数据源相同的约定,例如使用shapepath或与mapfile的位置相关。

  • 在gdatindex或ogrtindex的命令行上指定的文件名也将以相同的约定使用,遵循shapepath,或者是相对于mapfile的位置。我发现在shapepath目录中进行更改并从中运行ogrtindex/gdatindex非常有用;这可以确保我指定了正确的路径名。

tileindexes可以让您可以更快地画图

tileindex通常因为以下两个原因提升性能:

  • 它比有几个单独的层更有效。

  • MapServer将检查tileIndex以确定哪些数据集属于地图视图,并将仅打开这些数据集。这可以极大地节省大型数据集的开销,尤其是在大多数时间只使用非常小的数据空间区域的情况下。(例如,具有全国性街道图像的城市范围地图)

TileIndex在所有/大部分数据源通常都会被打开的情况下(例如,按县划分的街道数据,显示州或更大的区域)没有帮助。在这种情况下,它甚至可能导致性能下降,因为打开100个文件可能比打开一个大文件慢。

TileIndex的理想情况是,当最典型的请求地图区域属于非常少的图块时。例如,如果要显示州和更大的区域,请尝试将数据拟合到州大小的块,而不是县大小的块;如果要显示市和县,请转到县大小的块。

您只需要对它进行试验,看看什么最适合您的用例。

不同投影中的切片索引

从用于栅格图层的MapServer 6.4和用于矢量图层的MapServer 7.2开始,tileIndex可以在不同投影中包含栅格/图层。这样的tileindex可以用 gdaltindex (GDAL 1.11或更高版本)和 ogrtindex (gdal 2.2或更高版本),带有-t_srs和-src_srs_name选项。-t_srs指示gdatindex/ogrtindex将每个图块的信封写入一个公共目标投影,以便在图块索引中写入的几何图形是一致的。此公共投影必须是栅格/矢量层的投影。

gdaltindex -t_srs EPSG:4326 -src_srs_name src_srs imagery.shp imagery/*.tif

相应的层定义需要指定 TILESRS 关键字,其值为-src_srs_name选项。

例如:

LAYER
    NAME "My Imagery"
    STATUS ON
    TYPE RASTER
    TILEINDEX "imagery.shp"
    TILEITEM "LOCATION"
    TILESRS "src_srs"
    PROJECTION
        AUTO
        # or :
        # "+init=EPSG:4326"
    END
END

然后,MapServer将能够进行实时的镶嵌和重新投影。

对于必须作为WCS层公开的层,必须在层定义中指定一些元数据字段(“WCS范围”、“WCS大小”、“WCS分辨率”),以便定义“虚拟数据集”覆盖范围(请参见 WCS服务器 )gdal wcs_virtds_params.py示例脚本可以帮助生成这些元数据字段。

注意:这种对混合投影tileindex的支持目前仅适用于栅格图层。