MS RFC 100:支持栅格层中混合SRS的平铺索引¶
- 日期
2013年7月
- 作者
甚至鲁奥
- 联系方式
甚至在Mines的dot rouault巴黎dot org
- 状态
实施
- 版本
MAPServer 6.4
1。概述¶
栅格层可以直接连接到gdal数据集,也可以通过平铺索引连接。但到目前为止,同一个图块索引中的栅格应该具有相同的SRS。
为了简化对MapServer Mapfile 的管理,和/或避免不必要的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支持。矢量层中的支持超出范围。
4。臭虫识别码¶
6。投票历史¶
托马斯布、斯蒂芬、迈克尔斯、塔马斯、斯蒂芬、丹尼尔、杰夫姆和史蒂文