MS RFC 48:地理变换几何操作¶
- 日期
2008年11月1日
- 作者
托马斯·邦福特,斯蒂芬·莱姆,
- 联系方式
在Camptocamp.com上可以了解更多有关Thomas.Bonfort的信息,在dnr.state.mn.us上可以了解更多有关Steve.Lime的信息。
- 状态
实施(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: 渲染表示基础几何体边界框的shapeobj。
start/end:在基础几何图形的第一个/最后一个顶点处渲染点符号。默认情况下,符号的方向与相应几何图形段的方向匹配。这将用于向线串添加箭头/尾部。
顶点:在几何体的每个顶点渲染点符号。默认方向与对应段的半角度匹配。开始和结束顶点不包括在转换中。
这些转换最初没有实现,但将来可能会得到支持:
缓冲区([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函数
局限性¶
对于线条层,转换不适合当前的缓存机制,该机制在所有形状的第一遍中绘制每个类的第一种样式,在第二遍中绘制其余样式。
文档¶
完整的
向后不兼容问题¶
没有人预料到。