geomtransform-:几何转换¶
- 作者
Håvard Tveite
- 接触
目录
几何体转换返回新几何体。几何变换的目的可以是实现符号渲染和标记的特殊效果。
几何转换可在 LAYER 水平和 STYLE 水平。在 LAYER 级别(从6.4开始),使用原始矢量几何图形(“真实世界”坐标)。在 STYLE 级别,使用像素坐标。
在“layer”级别应用像素值可能很有用,这是可能的。如果在“layer”中定义了“units”,则可以使用[map_cellsize]变量在“layer”级别转换为像素值:
GEOMTRANSFORM (simplify([shape], [map_cellsize]*10))
STYLE¶
以下简单的几何图形转换在“class`` style`级别可用:
bbox
centroid
end
start
vertices
bbox¶
` geomtransform bbox`返回几何体的边界框。
geomtransform “bbox”
GeomTransform BBox¶
示例的类定义:
CLASS
STYLE
COLOR 0 0 0
WIDTH 6
END # STYLE
STYLE
GEOMTRANSFORM "bbox"
OUTLINECOLOR 255 0 0
WIDTH 1
PATTERN 1 2 END
END # STYLE
END # CLASS
centroid¶
` geomtransform centroid`返回几何体的质心。
几何变换“质心”
几何变换质心¶
示例的样式定义。::
STYLE
GEOMTRANSFORM "centroid"
COLOR 255 0 0
SYMBOL circlef
SIZE 5
END # STYLE
'circlef'符号的符号定义::
SYMBOL
NAME "circlef"
TYPE ellipse
FILLED true
POINTS
1 1
END # POINTS
END # SYMBOL
end and start¶
` geomtransform end`返回直线的终点。
` geomtransform start`返回直线的起点。
geomtransform :“开始”
END end
开始/结束点处的线条方向可用于渲染效果。
geomtransform:开始和结束用法¶
示例的类定义。
图的下半部分:
CLASS
STYLE
GEOMTRANSFORM "start"
SYMBOL "circlef"
COLOR 255 0 0
SIZE 20
END # STYLE
STYLE
COLOR 0 0 0
WIDTH 4
END # STYLE
STYLE
GEOMTRANSFORM "end"
SYMBOL "circlef"
COLOR 0 255 0
SIZE 20
END # STYLE
END # CLASS
图的上部:
CLASS
STYLE
COLOR 0 0 0
WIDTH 4
END # STYLE
STYLE
GEOMTRANSFORM "start"
SYMBOL "startarrow"
COLOR 255 0 0
SIZE 20
ANGLE auto
END # STYLE
STYLE
GEOMTRANSFORM "start"
SYMBOL "circlef"
COLOR 0 0 255
SIZE 5
END # STYLE
STYLE
GEOMTRANSFORM "end"
SYMBOL "endarrow"
COLOR 0 255 0
SIZE 20
ANGLE auto
END # STYLE
STYLE
GEOMTRANSFORM "end"
SYMBOL "circlef"
COLOR 0 0 255
SIZE 5
END # STYLE
END # CLASS
Startarrow符号定义(Endarrow相同,但AnchorPoint除外(Endarrow的值:1 0.5)::
SYMBOL
NAME "startarrow"
TYPE vector
FILLED true
POINTS
0 0.4
3 0.4
3 0
5 0.8
3 1.6
3 1.2
0 1.2
0 0.4
END # POINTS
ANCHORPOINT 0 0.5
END # SYMBOL
vertices¶
` geomtransform vertices`生成一条直线的顶点集(带有方向信息)。
GEOMTRANSFORM "vertices"
几何变换顶点¶
示例的类定义:
CLASS
STYLE
COLOR 0 0 0
WIDTH 4
END # STYLE
STYLE
GEOMTRANSFORM "vertices"
SYMBOL "vertline"
COLOR 0 0 0
WIDTH 2
SIZE 20
ANGLE AUTO
END # STYLE
END # CLASS
垂直线符号定义:
SYMBOL
NAME "vertline"
TYPE vector
POINTS
0 0
0 1
END # POINTS
END # SYMBOL
Labels (LABEL STYLE only)¶
labelpnt
labelpoly
这些用于标签样式(背景色、背景阴影、背景框)。
注解
labelpnt LAYER LABELCACHE LABELCACHE 是 ON labelpnt.
labelpnt和labelpoly¶
GEOMTRANSFORM labelpnt CC.
geomtransform: "labelpnt"
` geomtransform labelpoly`生成一个覆盖标签的多边形加上一个1像素的填充。
geomtransform:“labelpoly”
这些转换可用于为标签制作背景矩形,并向标签点添加符号。
geomtransform labelpnt 和 labelpoly¶
示例的类定义:
CLASS
STYLE
OUTLINECOLOR 255 255 204
END # STYLE
LABEL
SIZE giant
POSITION UC
STYLE # shadow
GEOMTRANSFORM "labelpoly"
COLOR 153 153 153
OFFSET 3 3
END # Style
STYLE # background
GEOMTRANSFORM "labelpoly"
COLOR 204 255 204
END # Style
STYLE # outline
GEOMTRANSFORM "labelpoly"
OUTLINECOLOR 0 0 255
WIDTH 1
END # Style
STYLE
GEOMTRANSFORM "labelpnt"
SYMBOL 'circlef'
COLOR 255 0 0
SIZE 15
END # Style
END # Label
END # Class
'circlef'符号的符号定义::
SYMBOL
NAME "circlef"
TYPE ellipse
FILLED true
POINTS
1 1
END # POINTS
END # SYMBOL
CLASS¶
组合/链接表达式¶
几何体转换生成一个几何体,该几何体可以用作另一个几何体转换的输入。实现这一点至少有两种方法。一种是将基本的几何转换表达式组合成更复杂的几何转换表达式,另一种是将“layer”级别的几何转换表达式与“class`` style”级别的几何转换表达式或简单的几何转换结合起来。
Combining geometry transformation expressions 几何转换表达式包含一个`[shape]`部分。“[形状]”部分可以由几何转换表达式替换。
例如::
GEOMTRANSFORM (simplify(buffer([shape], 20),10))
buffer simplify.
一种显示以下内容的样式:
STYLE
GEOMTRANSFORM (simplify(buffer([shape], 20),10))
OUTLINECOLOR 255 0 0
WIDTH 2
END # STYLE
此转换的结果显示在下图(红线)的顶部。原始多边形显示为一条完整的黑线,缓冲区显示为一条黑色虚线。
Combining expressions with simple geometry transformations CLASS LAYER 水平。
从执行此类组合的层定义中摘录:
LAYER
...
GEOMTRANSFORM (simplify(buffer([shape], 10),5))
CLASS
...
STYLE
GEOMTRANSFORM "vertices"
COLOR 255 102 102
SYMBOL vertline
SIZE 20
WIDTH 2
ANGLE auto
END # STYLE
END # CLASS
END # LAYER
此转换的结果显示在下图(红线)的底部。图层级别的geomtransform的结果显示为一条完整的黑线。原始多边形与图中顶部使用的多边形相同。
组合geomtransform表达式¶
缓冲区¶
` geomtransform buffer`返回原始几何体的缓冲区。结果始终是多边形几何体。
geomtransform:(缓冲区([形状],缓冲区大小)
注解
不支持“bufferSize”(后退)的负值。
注解
对于点几何图形,缓冲区似乎不起作用。
geomtransform:缓冲区¶
示例的一些类定义。
下部(带缓冲区的多边形)::
CLASS
STYLE
OUTLINECOLOR 0 255 0
GEOMTRANSFORM (buffer([shape], 20))
WIDTH 1
END # STYLE
STYLE
OUTLINECOLOR 0 0 255
GEOMTRANSFORM (buffer([shape], 10)) #
WIDTH 1
END # STYLE
STYLE
COLOR 255 0 0
GEOMTRANSFORM (buffer([shape], 5)) #
END # STYLE
STYLE
COLOR 0 0 0
END # STYLE
END # CLASS
右上角(层级geomtransform)::
LAYER # line buffer layer
STATUS DEFAULT
TYPE LINE
FEATURE
POINTS
80 70
80 75
END # Points
END # Feature
GEOMTRANSFORM (buffer([shape], 10))
CLASS
STYLE
COLOR 0 0 255
END # STYLE
END # CLASS
END # LAYER
归纳([形状],公差)¶
GEOMTRANSFORM generalize simplifies a geometry ([shape]) in a way comparable to FME’s ThinNoPoint algorithm. See http://trac.osgeo.org/gdal/ticket/966 更多信息。
geomtransform:(通用([形状],公差)
公差是强制性的,并且是与原始行相比,广义行允许的最大偏差的规范。公差值越高,线条越通用/简化。
注解
取决于地理位置。
generalize STYLE 随着公差值(10-绿色、20-蓝色和40-红色)的增加而变平。
地球变换概括¶
其中之一 STYLE 示例定义(公差40):
STYLE
GEOMTRANSFORM (generalize([shape], 40))
COLOR 255 0 0
WIDTH 1
PATTERN 3 3 END
END # STYLE
简化([形状],公差)¶
` geomtransform使用标准道格拉斯-派克算法简化了几何体([形状])。
GEOMTRANSFORM (simplify([shape], tolerance))
公差是强制性的,并且是与原始行相比,广义行允许的最大偏差的规范。公差值越高,线条越通用/简化。
simplify STYLE 随着公差值(10-绿色、20-蓝色和40-红色)的增加而变平。
Geomtransform simplify¶
其中之一 STYLE 示例定义(公差40):
STYLE
GEOMTRANSFORM (simplify([shape], 40))
COLOR 255 0 0
WIDTH 1
PATTERN 3 3 END
END # STYLE
simplifypt([shape], tolerance)¶
GEOMTRANSFORM simplifypt tolerance 必须为非负。
geomtransform(simplifypt([形状],公差))
公差是强制性的,并且是与原始行相比,广义行允许的最大偏差的规范。公差值越高,线条越通用/简化。
simplifypt STYLE 随着公差值(10-绿色、20-蓝色和40-红色)的增加而变平。
geomtransform 的简化¶
其中之一 STYLE 示例定义(公差40):
STYLE
GEOMTRANSFORM (simplifypt([shape], 40))
COLOR 255 0 0
WIDTH 1
PATTERN 3 3 END
END # STYLE
平滑(形状),平滑大小,平滑迭代,预处理)¶
` geomtransform smoothsia`返回线条的平滑版本。
geomtransform:(平滑度([形状]、平滑度大小、平滑度迭代、预处理)
使用以下参数:
简单层定义示例:
LAYER NAME "my_layer"
TYPE LINE
STATUS DEFAULT
DATA roads.shp
GEOMTRANSFORM (smoothsia([shape], 3, 1, 'angle'))
CLASS
STYLE
WIDTH 2
COLOR 255 0 0
END
END
下面是一些显示不同参数值结果的示例。
原始几何图形(左)和具有默认参数的平滑(右)¶
Smoothsia-窗口大小(左)越大,窗口大小越大,迭代次数越多(右)¶
数据集分辨率太高¶
如果试图平滑具有非常高分辨率的线(当前视图比例下顶点的高密度),则可能无法获得预期的结果,因为顶点对于平滑窗口大小而言过于密集。在这种情况下,您可能希望在平滑之前简化几何图形。您可以在单个geomtransform中组合平滑和简化:
GEOMTRANSFORM (smoothsia(simplifypt([shape], 10)))
见 RFC 89: Layer Geomtransform 更多信息。以下是问题的可视化:
高分辨率几何、平滑和简化¶
数据集分辨率太低¶
如果试图平滑顶点密度较低的长线,在某些情况下可能无法获得预期的结果。在平滑过程中,可能会丢失几何体的某些重要部分,例如锐角周围。可以通过启用预处理步骤在平滑之前沿直线添加中间顶点来改进结果。
此行为使用“smoothsia”geomtransform预处理参数中的“all”值进行控制:
GEOMTRANSFORM (smoothsia([shape], 3, 1, 'all'))
此预处理将在平滑之前执行。它在每个原始顶点的每一侧添加2个中间顶点。如果我们真的需要保留低分辨率线的一般形状,这是有用的。请注意,这可能会影响渲染,因为输出中将有更多的顶点。
以下是问题的可视化:
正态平滑和预处理的影响¶
javascript 转换¶
- 作者
Alan Boudreault
- 接触
aboudreault at mapgears.com
- 最后更新
2013/16/12
使用¶
只需通过以下方式声明javascript插件:
MAP
...
LAYER
...
GEOMTRANSFORM "javascript://transform.js" # relative path
CLASS
END
END
END
路径也可以是绝对的。
MAP
...
LAYER
...
GEOMTRANSFORM "javascript:///home/user/transform.js" # absolute path
CLASS
END
END
END
javascript插件必须实现一个名为 geomtransform ,而且这个过程将被自动调用。此函数必须返回新形状。注意 only 将使用此新形状的几何图形,因此将保留原始形状属性。
通过 shape.attributes javascript对象。
可以使用以下javascript函数:
- alert(str1, str2, ..., str)
在MapServer日志中打印一些文本
- print(str1, str2, ..., str)
在MapServer日志中打印一些文本
- require(path_to_lib1, path_to_lib2, ..., path_to_lib)
包括一个或多个javascript库
例1。简单几何变换¶
这个例子做了一个简单的垂直翻译…
function geomtransform() {
new_shape = new shapeObj();
new_shape.add(new lineObj());
new_point = new pointObj();
new_point.x = shape.line(0).point(0).x;
new_point.y = shape.line(0).point(0).y+30000;
new_shape.line(0).add(new_point);
return new_shape;
}
例2。在MapServer日志中打印日志¶
通过将信息打印到MapServer日志来扩展示例1。
MAP
...
CONFIG "MS_ERRORFILE" "/tmp/mapserver.log"
DEBUG 1
LAYER
...
GEOMTRANSFORM "javascript://transform.js"
...
END
END
function geomtransform() {
new_shape = new shapeObj();
new_shape.add(new lineObj());
new_point = new pointObj();
new_point.x = shape.line(0).point(0).x;
new_point.y = shape.line(0).point(0).y+30000;
print('Modified y value from: ' + shape.line(0).point(0).y + ' to: '+new_point.y);
new_shape.line(0).add(new_point);
return new_shape;
}


