MS RFC 48:地理变换几何操作

日期

2008年11月1日

作者

托马斯·邦福特,斯蒂芬·莱姆,

联系

Thomas.Bonfort在Camptocamp.com,Steve.Lime在dnr.state.mn.us

状态

实施(2009/02)

最后编辑

2009/02

版本

MAPServer 5.4

总结

此RFC的目的是向MapServer添加基于用户定义的GeometryTransform关键字解释几何图形的功能,并使用选定的样式呈现解释的几何图形。

一个示例用法是:

GEOMETRYTRANSFORM "start([geom])"

将基础几何图形视为在第一个顶点当前特征上渲染的点。

激活此行为的指令是geometryTransform关键字,它最初属于样式对象。进一步的发展可能是在层级别启用关键字。

此参数的用途包括绘制基础几何图形的边界框,或向线条添加箭头/尾部。

进一步的开发将允许将复杂表达式传递给关键字,从而允许对基础几何图形进行嵌套转换,例如:

GEOMETRYTRANSFORM "difference([geom],buffer([geom],10))"

并绑定到属性,例如:

GEOMETRYTRANSFORM "buffer([geom],[distance])"

详细功能

geometryTransform关键字最初接受这些参数的快捷方式版本:

  • bbox

  • start/end

  • vertices

这些转换最初没有实现,但将来可能会得到支持:

  • 缓冲区([geom],距离):呈现表示缓冲几何体的shapeobj。”“距离”以层单位指定缓冲区距离。

  • 质心([geom]):在几何体质心的位置渲染一个pointobj

  • labelpoint([geom]):在几何图形将被/将被标记的点的位置呈现一个pointobj。

  • 凸形([geom])。

  • 简化([geom])。

实施细节

除了应该使用哪种类型的解析和内部存储之外,此RFC的修改只影响mapdraw.c中的高级呈现函数。

主要有三种修改:

  • 自动添加到样式块的角度分析器中。StyleObj相应地添加了一个AutoAngle成员。

  • 在msdrawvectorlayer中,必须保留当前范围剪切前的形状副本,因为除顶点类型外,所有类型都必须使用整个形状。然后,当循环通过可应用的不同样式时,如果设置了geometryTransform关键字,我们将关闭到特定于类型的函数。

  • 在mapgeomtransform.c中,添加了类型特定的绘图功能。根据当前样式类型,它可以从原始形状(类型bbox、converxhull或buffer)计算新形状并将其传递给msdrawshadesymbol,或者在相应地调整方向后,为原始形状的点(类型start、end、vertices、centroid)调用msdrawmarkersymbol。

受影响的文件

  • mapdraw.c

  • maplexer.c/.l

  • mapfile.c

  • mapserver.h

  • 添加mapgeometrytransform.c,用于分析转换表达式、转换本身以及调用msdrawmarkersymbol/msdrawshadesymbol函数

局限性

对于线条层,转换不适合当前的缓存机制,该机制在所有形状的第一遍中绘制每个类的第一种样式,在第二遍中绘制其余样式。

MapScript含义

getter和setter必须添加到不同的mapscripts中。

一个可能的增强还可以将转换函数公开给mapscript。

文档

完整的

向后不兼容问题

没有人预料到。

臭虫识别码

https://github.com/MapServer/MapServer/issues/2825

投票历史

2008/12/08投票完成:

  • +1:酸橙、酸橙、木桥、纳西奥莱、莫里塞特

  • +0: Nicoletti