MS RFC 100:支持栅格层中混合SRS的平铺索引

日期

2013年7月

作者

甚至鲁奥

联系

甚至在Mines的dot rouault巴黎dot org

状态

实施

版本

MAPServer 6.4

1。概述

栅格层可以直接连接到gdal数据集,也可以通过平铺索引连接。但到目前为止,同一个图块索引中的栅格应该具有相同的SRS。

为了简化对MapServer映射文件的管理,和/或避免不必要的RASTER重投到公共SRS中(这可能不同于WMS或WCS请求的请求SRS),需要支持具有异构SRS的RASTER的tile索引。

2。建议的解决方案

如果图块索引包含带有混合SRS的图块,则必须在图层块中添加一个新关键字tile srs“field_name”,以指定字段“field_name”包含每个图块的SRS。该字段的值必须是以wkt、proj.4字符串或epsg:XXXX代码(实际上是由osrsetFromUserInput()解析的任何字符串)表示的SRS。如果对于图块,字段为空,则将尝试直接使用gdageprojectionref()从图块栅格获取SRS。

LAYER
    NAME "tile_index_mixed_srs_26711"
    TYPE RASTER
    STATUS ON
    TILEINDEX "tile_index_mixed_srs_26711.shp"
    TILEITEM "location"
    TILESRS "src_srs"
    PROJECTION
        "+init=epsg:26711"
    END
END

请注意,每个图块的几何体(范围)绝对有必要用一个公共SRS(在图层图块的投影图块中声明的)表示,以便tileindex中的空间查询可以工作。

通过使用-t_SRS和-src_SRS_name选项,可以使用gdal gdaltindex实用程序的更新版本生成具有混合SRS的tileindex文件。

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

这些图块索引可以在WMS或WCS层中使用。对于WCS层,必须在层定义中指定一些元数据字段,以便定义“虚拟数据集”覆盖率(请参见 WCS服务器 )将添加一个新的gdal python示例脚本wcs_virtds_params.py,以简化此类层的编写。

三。实施细节

3.1受影响的文件

主要的更改在mapraster.c中。请注意,已经对mapraster.c的msdrawrasterlayerlow()和maprasterquerybyrect()中的相同代码进行了代码重构。

  • mapcopy.c:处理layerobj.tilesrs

  • mapfile.c:处理layerobj.tilesrs和tilesrs

  • mapfile.dtd:处理tilesrs

  • mapfile.h:添加tilesrs常量

  • maplexer.c:从maplexer.l重新生成

  • 马普莱克斯:处理蒂尔斯

  • mapogr.cpp:如果在向量层中使用tilesrs,则生成错误(不支持)

  • mapgraster.c:处理layerobj.tilesrs的核心更改;代码rafactoring

  • mapgraster.h:声明mapgraster.c和maprasterquery.c之间的公共函数的新文件

  • maprasterquery.c:重构为与mapraster.c共享公共代码

  • mapserver.h:在layerobj结构中添加tilesrs成员

  • c:如果向量层中使用了tilesrs(不支持),则会生成错误。当projection=auto时,添加从.prj文件获取投影信息的功能

3.2向后兼容性问题

不需要,新功能。

3.3MapScript更改

没有

3.4性能影响

找到与请求窗口匹配的图块与具有相同SRS的图块索引一样快。只有与请求窗口相交的分片才会进行动态重新投影。因此,性能应该类似于当前的情况,即使用srs=srs2请求具有tiles的tile索引。

3.6限制

此RFC仅实现对栅格层的tilesr支持。矢量层中的支持超出范围。

3.7文件

将更新以下页面以记录tilesrs关键字:

4。臭虫识别码

6。投票历史

托马斯布、斯蒂芬、迈克尔斯、塔马斯、斯蒂芬、丹尼尔、杰夫姆和史蒂文以+1票通过。