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。
文档¶
完整的
向后不兼容问题¶
没有人预料到。
臭虫识别码¶
投票历史¶
2008/12/08投票完成:
+1:酸橙、酸橙、木桥、纳西奥莱、莫里塞特
+0: Nicoletti