MS RFC 68:支持组合多层功能¶
- 日期
2011/02/10
- 作者
塔玛斯塞克勒斯
- 联系方式
gmail.com上的szekerest
- 状态
通过(2011-03-04实施)
- 版本
MAPServer 6
描述:这个RFC提出了一个创建新数据提供程序(connectionType=union)的实现,它提供了一个选项来表示一个层中多个层的特性。
1。概述¶
今天,您可以使用tileindex组合多个文件,但前提是它们具有相同的属性和描述。从理论上讲,能够有多个具有相似属性的源层,并且能够使用源列属性的一些兼容子集将它们组合成一个层(称为联合层),这样组合的层就可以被视为一个层。然后,在设置类样式和标签时,我们可以用与任何其他层相同的方式使用这个单层。此层还可以提供在根据配置群集支持时使用多个层的功能的选项。 MS RFC 69 .
2。建议的解决方案¶
此功能将作为单独的层数据提供程序(connectionType=union)实现。联合层将使用连接参数定义 Mapfile 中的源层,如下所示:
LAYER
CONNECTIONTYPE UNION
CONNECTION "layer1,layer2,layer3" # reference to the source layers
NAME "union-layer"
PROCESSING "ITEMS=itemname1,itemname2,itemname3"
...
END
LAYER
CONNECTIONTYPE OGR
NAME layer1
...
END
LAYER
CONNECTIONTYPE SHAPE
NAME layer2
...
END
LAYER
CONNECTIONTYPE SHAPE
NAME layer3
...
END
新的层数据提供程序将按以下方式工作:
在layeropen中,它将打开连接参数指定的所有源层。
形状调用的层将委托给基础层,并为感兴趣的区域提供矩形。
layerNextShape将遍历层,并为后续形状调用layerNextShape。层索引分配给返回形状的tileindex。如果我们完成从一个层中检索形状,我们就开始从下一个源层检索功能。
layerGetShape将根据平铺索引标识层,然后调用此层的layerGetShape
联合层和源层必须具有相同的几何体类型,否则在layeropen调用中会生成错误。
2.1处理层属性(项)¶
通常,源层必须提供呈现联合层时所需的属性,但是基础数据可能包含其他属性,从原始源提取数据时不使用这些属性。当请求所有属性(在查询操作中)时,联合层将只提供一些聚合属性(如该功能所属的源层的层名或组名)。可以使用现有的项目处理选项手动覆盖项目集(并且可以公开更多属性)。在开发的这个阶段,驱动程序将公开以下附加属性:
combine:source layer name-功能所属的源层的名称
组合:SourceLayerGroup-功能所属的源层组
2.2投影¶
建议使用联合层和源层的相同投影。然而,层提供者将支持在源层和联合层之间转换特征位置。
2.3处理类别和样式¶
我们可以通过指定类和样式,以与任何其他层相同的方式定义联合层的符号和标签。此外,我们还将支持联合层的样式项自动选项,如果我们希望以与源层相同的方式显示功能,这一点非常重要。如果基础数据源提供了样式项自动设置,那么源层也可以使用样式项自动设置。
2.4查询处理¶
驱动程序将创建(并操作)源层的副本,该副本允许在联合层打开之前保持底层打开。如果源层支持的话,这将提供单次传递查询。联合层上的查询的行为无论如何都与其他层相同。
3.1受影响的文件¶
此RFC将修改/创建以下文件:
maplexer.l (maplexer.c)
mapserver.h
Makefile.vc
Makefile.in
mapunion.c (new)
3.2MapScript问题¶
这个新层的连接类型将在mapscript接口中公开。目前不考虑进一步的影响。
3.3向后兼容性问题¶
此更改提供了新的功能,没有考虑向后兼容性问题。
5。投票历史¶
+来自史蒂文、丹尼尔、阿塞菲、佩里克列森、托马斯布、史蒂文、塔马斯