geomtransform-几何转换¶
- 作者
H·V·特维特
- 联系
目录
几何体转换返回新几何体。几何变换的目的可以是实现符号渲染和标记的特殊效果。
几何转换可在 LAYER 水平和 STYLE 水平。在 LAYER 级别(从6.4开始),使用原始矢量几何图形(“真实世界”坐标)。在 STYLE 级别,使用像素坐标。
LAYER UNITS 在中定义 LAYER, LAYER
GEOMTRANSFORM (simplify([shape], [map_cellsize]*10))
STYLE¶
以下简单的几何转换可在 CLASS
口技
质心
结束
开始
顶点
口技¶
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
质心¶
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
顶点¶
GEOMTRANSFORM vertices
geomtransform“顶点”

几何变换顶点¶
示例的类定义:
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
STYLE¶
烙印
唇形聚伞花序
这些用于标签样式(背景色、背景阴影、背景框)。
备注
labelpnt LAYER LABELCACHE LABELCACHE 是 ON labelpnt.
labelpnt和labelpoly¶
GEOMTRANSFORM labelpnt CC.
geomtransform“标签”
GEOMTRANSFORM labelpoly
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
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 simplify
geomtransform(简化([形状],公差)
公差是强制性的,并且是与原始行相比,广义行允许的最大偏差的规范。公差值越高,线条越通用/简化。
simplify STYLE 随着公差值(10-绿色、20-蓝色和40-红色)的增加而变平。

geomtransform简化¶
其中之一 STYLE 示例定义(公差40):
STYLE
GEOMTRANSFORM (simplify([shape], 40))
COLOR 255 0 0
WIDTH 1
PATTERN 3 3 END
END # STYLE
简化([形状],公差)¶
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(平滑度([形状]、平滑度大小、平滑度迭代、预处理)
使用以下参数:
shape
smoothing_size
smoothing_iterations
preprocessing
all
angle
简单层定义示例:
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-窗口大小(左)越大,窗口大小越大,迭代次数越多(右)¶
调整冰沙的行为¶
Smoothsia有几个参数可用于调整其行为。以下章节描述了一些案例/可能性。
数据集分辨率太高¶
如果试图平滑具有非常高分辨率的线(当前视图比例下顶点的高密度),则可能无法获得预期的结果,因为顶点对于平滑窗口大小而言过于密集。在这种情况下,您可能希望在平滑之前简化几何图形。您可以在单个geomtransform中组合平滑和简化:
GEOMTRANSFORM (smoothsia(simplifypt([shape], 10)))
见 RFC 89: Layer Geomtransform 更多信息。以下是问题的可视化:

高分辨率几何、平滑和简化¶
数据集分辨率太低¶
如果试图平滑顶点密度较低的长线,在某些情况下可能无法获得预期的结果。在平滑过程中,可能会丢失几何体的某些重要部分,例如锐角周围。可以通过启用预处理步骤在平滑之前沿直线添加中间顶点来改进结果。
all smoothsia
GEOMTRANSFORM (smoothsia([shape], 3, 1, 'all'))
此预处理将在平滑之前执行。它在每个原始顶点的每一侧添加2个中间顶点。如果我们真的需要保留低分辨率线的一般形状,这是有用的。请注意,这可能会影响渲染,因为输出中将有更多的顶点。
以下是问题的可视化:

正态平滑和预处理的影响¶
曲线¶
预处理步骤可能不适用于所有情况,因为它会显著影响平滑结果。但是,如果没有它,您可能会注意到对于线顶点之间距离较大的曲线平滑效果不佳。请参见此示例:

正常平滑效果(无预处理)¶
angle.
GEOMTRANSFORM (smoothsia([shape], 3, 1, 'angle'))

angle¶
javascript转换¶
- 作者
艾伦布德罗
- 联系
地图齿轮网的Aboudreault
- 最后更新
2013/16/12
介绍¶
使用 GEOMTRANSFORM
使用¶
只需通过以下方式声明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函数:
- 警报(str1,str2,…,str)
在MapServer日志中打印一些文本
- 打印(str1,str2,…,str)
在MapServer日志中打印一些文本
- 需要(路径_to_lib1,路径_to_lib2,…,路径_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;
}
基本API¶
当前可以使用最小API创建新形状。
彭波托基¶
构造函数¶
new pointObj()
成员¶
类型 |
名字 |
注意 |
---|---|---|
双重的 |
X |
|
双重的 |
Y |
|
双重的 |
Z |
|
双重的 |
米 |
方法¶
- void setxy(双x,双y[,双m])
设置x,y[,m]值。
- void setxyz(双x,双y,双z[,双m])
设置x,y,z[,m]值。
线路对象¶
构造函数¶
new lineObj()
成员¶
类型 |
名字 |
注意 |
---|---|---|
利息 |
点数 |
只读的 |
方法¶
- PointObj点(int索引)
index
- 无效添加(pointobj point)
向线条添加点。
- void addxy(双x,双y[,双m])
从x,y[,m]值向直线添加点。
- void addxyz(双x,双y,双z[,双m])
从x、y、z[、m]值向直线添加点。
形状对象¶
构造函数¶
new shapeObj(int type)
“type”是shapeobj.point、shapeobj.line、shapeobj.polygon或shapeobj.null之一。
成员¶
类型 |
名字 |
注意 |
---|---|---|
利息 |
数字 |
只读的 |
利息 |
数字 |
只读的 |
利息 |
指数 |
只读的 |
利息 |
类型 |
只读的 |
利息 |
倾斜指数 |
只读的 |
利息 |
类别索引 |
只读的 |
文本 |
文本 |
|
对象 |
属性 |
方法¶
- shapeobj克隆()
返回形状的克隆。
- lineobj line(int索引)
index
- 空添加(lineobj line)
向形状添加线条。
- void setgeometry(shapeobj shape)
shape