MS RFC 89:层geomtransforms¶
- 日期
2013年2月5日
- 作者
艾伦布德罗
- 联系方式
地图齿轮网的Aboudreault
- 状态
通过并实施
- 版本
MAPServer 6.4
1。概述¶
MapServer6.0在StyleObjGeomTransform中引入了几何表达式的概念。例如,可以写:
STYLE
GEOMTRANSFORM (buffer([shape], -5)
...
END
这将导致在使用给定样式呈现前对形状运行缓冲区操作。但是,如果我们要处理转换后的形状并应用多种样式,则渲染的性能将受到显著影响,因为必须对每个样式进行geom转换。还有一些其他的情况,层geom转换是有用的。例如,如果我们想简化我们的行。
这是一个建议,添加一个能力,设置一个几何变换在图层一级。有关为style对象实现的geomtransform的更多信息,请参见https://mapserver.org/development/rfc/ms-rfc-48.html。
2。建议的解决方案¶
这个RFC建议添加一个新的图层选项:geomtransform。功能与样式geomtransform基本相同,只是 all 将实现这些参数。除非我们真的看到需要在层级别进行以下转换,否则它们 won't 实现:bbox,开始,结束,顶点。将接受所有其他参数(表达式)。
要将geomtransform设置为图层,只需在 Mapfile 中添加此选项:
LAYER NAME "my_layer"
TYPE LINE
STATUS DEFAULT
DATA "lines.shp"
GEOMTRANSFORM (simplify([shape], 10))
CLASS
STYLE
WIDTH 2
COLOR 255 0 0
END
END
注解
请注意,图层geomtransform和样式geomtransform完全独立。这两者都可以在层/类定义中使用,并且它们将被正确应用。
2.1实施细则¶
层geomtransform将支持所有查询请求。geomTransform的逻辑将在mslayerNextShape()和mslayerGetShape()函数中完成。这将允许用户与转换后的功能进行交互。即MapScript,WFS。
2.2单位坐标¶
风格与层地转换有其特殊性。样式级别geomtransform接收像素坐标中的形状,而层级别geomtransform将接收地面坐标(米、度等)中的原始形状。Simplify()等方法的参数必须与渲染工作流中该点形状的坐标使用相同的单位,即样式级别的像素和图层级别的地面单位。
LAYER NAME "my_layer"
TYPE LINE
STATUS DEFAULT
DATA "lines.shp"
GEOMTRANSFORM (simplify([shape], 10)) ## 10 ground units
CLASS
STYLE
GEOMTRANSFORM (buffer([shape], 5) ## 5 pixels
WIDTH 2
COLOR 255 0 0
END
END
END
在样式级别处理地面单位中的值也是完全不可能的,因为代码中没有关于该级别的地图单元格大小的信息
2.3层像素值¶
如果我们想在图层级别传递像素值,可以使用[map_cellsize]变量。
LAYER NAME "my_layer"
TYPE LINE
STATUS DEFAULT
DATA "lines.shp"
# 10 * [map_cellsize] == 10 pixels converted to ground units
GEOMTRANSFORM (simplify([shape], [map_cellsize]*10))
...
为了让这个变量在数学表达式解析器中工作,必须将[map_cellsize]转换为层地面单元。如果选择在geomtransform表达式中使用[map_cellsize],则必须在层中显式设置“单位”选项。
2.4支持的矢量格式¶
将支持所有矢量格式。这还包括所有格式的ogr(connectiontype ogr)。
三。新的geomtransform参数¶
将添加3个新参数作为geomtransform参数:
简化:使用geos简化。更多信息: GEOS Simplify
simplifypt:simplify使用geos保留拓扑。更多信息: GEOS SimplifyPreserveTopology
概括:以下算法的自定义实现:http://trac.osgeo.org/gdal/ticket/966
这些参数也将通过样式geomtransform提供。下面是一个简化的geomtransform示例(蓝线是原始形状,红线是转换的形状):
4。MapScript¶
获取/设置图层级别geomtransform的功能将添加到mapscript中。geomtransform是在内部处理的,不影响任何其他内容。
5.向后兼容性问题¶
此更改提供了新的功能,没有考虑向后兼容性问题。
6。测验¶
将修改msautotest以添加此新功能的一些测试。
8。投票历史¶
+1来自杰夫、奥利维尔、斯蒂芬、迈克尔、翁贝托和史蒂夫。