geomtransform-几何转换

作者

H·V·特维特

联系

havard.tveite@nmbu.no

几何体转换返回新几何体。几何变换的目的可以是实现符号渲染和标记的特殊效果。

几何转换可在 LAYER 水平和 STYLE 水平。在 LAYER 级别(从6.4开始),使用原始矢量几何图形(“真实世界”坐标)。在 STYLE 级别,使用像素坐标。

LAYER UNITS 在中定义 LAYER, LAYER

GEOMTRANSFORM (simplify([shape], [map_cellsize]*10))

STYLE

以下简单的几何转换可在 CLASS

  • 口技

  • 质心

  • 结束

  • 开始

  • 顶点

口技

  • GEOMTRANSFORM bbox

    • geomtransform“bbox”

备注

仅适用于 STYLECLASS 语境。

../_images/geomtrans-bbox.png

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

    • 几何变换“质心”

备注

仅适用于 STYLECLASS 语境。

../_images/geomtrans-centroid.png

几何变换质心

示例的样式定义。::

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

开始/结束点处的线条方向可用于渲染效果。

备注

仅适用于 STYLECLASS 语境。

../_images/geomtrans-startend.png

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“顶点”

备注

仅适用于 STYLECLASS 语境。

../_images/geomtrans-vertices.png

几何变换顶点

示例的类定义:

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

以下简单的几何转换可在 LABEL STYLE 水平:

  • 烙印

  • 唇形聚伞花序

这些用于标签样式(背景色、背景阴影、背景框)。

备注

labelpnt LAYER LABELCACHE LABELCACHEON labelpnt.

labelpnt和labelpoly

  • GEOMTRANSFORM labelpnt CC.

    • geomtransform“标签”

  • GEOMTRANSFORM labelpoly

    • geomtransform“labelpoly”

备注

仅适用于 STYLELABEL 语境。

这些转换可用于为标签制作背景矩形,并向标签点添加符号。

../_images/geomtrans-label.png

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的结果显示为一条完整的黑线。原始多边形与图中顶部使用的多边形相同。

../_images/geomtrans-expressions.png

组合geomtransform表达式

缓冲区

  • GEOMTRANSFORM buffer

    • geomtransform(缓冲区([形状],缓冲区大小))

备注

的负值 buffersize

备注

可用于 LAYER 水平和 STYLECLASS 语境。

备注

对于点几何图形,缓冲区似乎不起作用。

../_images/geomtrans-buffer.png

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(通用([形状],公差)

    公差是强制性的,并且是与原始行相比,广义行允许的最大偏差的规范。公差值越高,线条越通用/简化。

备注

可用于 LAYER 水平和 STYLECLASS 语境。

备注

取决于地理位置。

generalize STYLE 随着公差值(10-绿色、20-蓝色和40-红色)的增加而变平。

../_images/geomtrans-generalize.png

地球变换概括

其中之一 STYLE 示例定义(公差40):

STYLE
  GEOMTRANSFORM (generalize([shape], 40))
  COLOR 255 0 0
  WIDTH 1
  PATTERN 3 3 END
END # STYLE

简化([形状],公差)

  • GEOMTRANSFORM simplify

    • geomtransform(简化([形状],公差)

    公差是强制性的,并且是与原始行相比,广义行允许的最大偏差的规范。公差值越高,线条越通用/简化。

备注

可用于 LAYER 水平和 STYLECLASS 语境。

simplify STYLE 随着公差值(10-绿色、20-蓝色和40-红色)的增加而变平。

../_images/geomtrans-simplify.png

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([形状],公差))

    公差是强制性的,并且是与原始行相比,广义行允许的最大偏差的规范。公差值越高,线条越通用/简化。

备注

可用于 LAYER 水平和 STYLECLASS 语境。

simplifypt STYLE 随着公差值(10-绿色、20-蓝色和40-红色)的增加而变平。

../_images/geomtrans-simplifypt.png

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 水平和 STYLECLASS 语境。

简单层定义示例:

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

下面是一些显示不同参数值结果的示例。

../_images/smoothing1.png

原始几何图形(左)和具有默认参数的平滑(右)

../_images/smoothing2.png

Smoothsia-窗口大小(左)越大,窗口大小越大,迭代次数越多(右)

调整冰沙的行为

Smoothsia有几个参数可用于调整其行为。以下章节描述了一些案例/可能性。

数据集分辨率太高

如果试图平滑具有非常高分辨率的线(当前视图比例下顶点的高密度),则可能无法获得预期的结果,因为顶点对于平滑窗口大小而言过于密集。在这种情况下,您可能希望在平滑之前简化几何图形。您可以在单个geomtransform中组合平滑和简化:

GEOMTRANSFORM (smoothsia(simplifypt([shape], 10)))

RFC 89: Layer Geomtransform 更多信息。以下是问题的可视化:

../_images/smoothing_highres.png

高分辨率几何、平滑和简化

数据集分辨率太低

如果试图平滑顶点密度较低的长线,在某些情况下可能无法获得预期的结果。在平滑过程中,可能会丢失几何体的某些重要部分,例如锐角周围。可以通过启用预处理步骤在平滑之前沿直线添加中间顶点来改进结果。

all smoothsia

GEOMTRANSFORM (smoothsia([shape], 3, 1, 'all'))

此预处理将在平滑之前执行。它在每个原始顶点的每一侧添加2个中间顶点。如果我们真的需要保留低分辨率线的一般形状,这是有用的。请注意,这可能会影响渲染,因为输出中将有更多的顶点。

以下是问题的可视化:

../_images/smoothing_lowres.png

正态平滑和预处理的影响

曲线

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

../_images/smoothing_curve1.png

正常平滑效果(无预处理)

angle.

GEOMTRANSFORM (smoothsia([shape], 3, 1, 'angle'))
../_images/smoothing_curve2.png

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