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设置为图层,只需在映射文件中添加此选项:

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参数:

这些参数也将通过样式geomtransform提供。下面是一个简化的geomtransform示例(蓝线是原始形状,红线是转换的形状):

../../_images/simplifypt.png

4。MapScript

获取/设置图层级别geomtransform的功能将添加到mapscript中。geomtransform是在内部处理的,不影响任何其他内容。

5.向后兼容性问题

此更改提供了新的功能,没有考虑向后兼容性问题。

6。测验

将修改msautotest以添加此新功能的一些测试。

7。臭虫识别码

8。投票历史

+1来自杰夫、奥利维尔、斯蒂芬、迈克尔、翁贝托和史蒂夫。