MS RFC 72:图层和标签级geomtransforms¶
- 日期
2011/06/27
- 作者
史蒂夫·莱姆
- 联系方式
com.net上的石灰
- 状态
草稿
- 版本
TBD
1。概述¶
MapServer6.0在StyleObjGeomTransform中引入了几何表达式的概念。例如,可以写:
STYLE
GEOMTRANSFORM (buffer([shape], -5)
...
END
这将导致在使用给定样式呈现前对形状运行缓冲区操作。
这对某些制图效果很有用,但有两种限制:
它在像素空间中工作(例如,一旦特征从地图转换为图像坐标)
生成的形状只能与单个样式一起使用,因此创建缓冲功能的复杂呈现是无效的。
无法查询转换的功能
结果形状不能用于任何标记操作
2。建议的解决方案¶
此RFC建议将geomtransforms扩展到层和标签上下文。基本上相同的关键字和语法将在其他对象中有效。
对于层,转换将应用于几何图形,因为它们是从数据源读取的,并且在任何绘图或查询操作之前。因此,对转换后的形状执行复杂的渲染会更有效。此外,结果形状也可以以一致的方式进行查询,因为转换将独立于正在绘制的地图(例如,比例、边界框等)。
对于标签,转换将在标签点计算之前应用,在像素坐标中非常类似于当前样式实现。这将允许标记多边形内边缘或在多边形内创建曲线标签等效果。
这些操作是计算密集型的,因此用户需要了解性能影响,但随着平铺成为标准,这就不再是一个问题。
三。实施细节¶
对于层,我建议对函数mslayerGetShape()和mslayerNextShape()添加一个检查,以便在返回形状之前有条件地应用geomstranForm。生成的形状将包含父级的所有属性。(注意:一个潜在的问题是,某些操作可能会影响用于通过mslayerwhichshapes()选择候选形状的边界框)。
对于标签,检查和转换将在mslayerDrawShape()函数中应用。
需要对逻辑表达式语法(mapparser.y)和表达式标记器进行一些小的更改。
3.1受影响的文件¶
此RFC将修改/创建以下文件:
mapfile.c (layer/label read/write)
mapdraw.c (update msDrawShape())
maplayer.c (update msLayerGetShape(), msLayerNextShape(), msLayerWhichItems() and msLayerGetTokens())
maplexer.l (add additional GEOS operators, in trunk only buffer and difference are currently implemented)
mapparser.y (extend the grammar)
3.2MapScript问题¶
这些只是表示bj的so函数,以获取/设置它们已经存在。
3.3安全问题¶
必须小心避免与变形形状的生产相关的内存泄漏。允许运行时替换是有意义的,就像使用层过滤器和类表达式一样。同样,需要验证模式。
3.4向后兼容性问题¶
此更改提供了新的功能,没有考虑向后兼容性问题。
4。臭虫识别码¶
没有指定。见相关票据3871。
5。投票历史¶
没有