一些转换器的用法和注意事项(三)
原文发布时间:2010-06-26
作者:毛毛虫
1、转换器GeometryExtractor和GeometryReplace
转换器GeometryExtractor根据几何编码参数的设置来提取几何要素,转换器属性如图:
即通过这个转换器转换后,输出的要素包含了一个属性名为_geometry属性的几何属性编码,Geometry Encoding包括:FME Binary、FME XML、 OGC Well Known Text (wkt)、Well Known Binary (wkb)或hexadecimal-encoded Well Known Binary (wkbhex)、 Hex-encoded OGC Well Known Binary和 GeoJSON等。
这个属性可以通过GeometryReplacer转换器恢复之前存储的几何要素。也就是说,这个转换器可以复制要素的几何到一个属性(上图为_geometry)并存储起来,在进行了一些改变几何的操作之后,可以使用GeometryReplacer转换器获取之前存储的几何要素。
转换器GeometryReplacer,根据要素几何编码参数的设置,替代几何要素,这个转换器的属性如图:
Geometry Encoding的选项与GeometryExtractor转换器形同。这个转换器通常用于重新恢复之前已经通过GeometryExtractor转换器提取到的属性。
例如:
我们使用Creator转换器创建了一个三角形,设置如图:
使用GeometryExtractor转换器保存这个几何,然后再使用Bufferer转换器对该几何做缓冲之后,该三角形与缓冲之后几何如图:
而我们使用转换器GeometryReplacer之后,就会得到之前的三角形几何。
2、转换器BoundingBoxReplacer
使用二维的边框或该几何的最小约束矩形来替代要素几何,该转换器的属性如下:
参数Replace With 有两个选项,Bounding Box(与坐标轴平行的矩形)和Oriented Bounding Box(定向约束矩形),下面是一个三角形:
选择Bounding Box的结果如下(把该几何能包围起来的且与x、y轴平行的矩形):
选择Oriented Bounding Box的结果如下(把该几何能包围起来的最小外接矩形):
(图片已丢失)
如果要素的边界框的面积为0,则会变为一条线或点,如果要素的初始状态为3D,则会设置到2D,Z值会被忽略或删除。
3、2DForce
移除原始要素中可能存在的任何高程(Z)坐标,转换为2D要素。注意的一点是,该转换器并不单单是移除高程坐标,而是生成的三维图形(如果该要素是3D的话)在x、y轴的垂直投影后的坐标。
4、DonutBuilder转换器
这个转换器在一个多边形要素中生成一个完全封闭的多边形,这个转换器假设输入的要素在同一组中没有要素重叠,聚合要素被递归的分解到它们的各个组成部分,非面要素在INVALID端口输出。该转换器的设置如下:
这里主要注意一点,参数Drop Holes的值的选择,选择no是不删掉洞,也就是输出的要素中包含洞,即输出带洞的多边形和输入的生成洞的多边形;yes是删掉洞,只输出带洞的多边形。
5、DonutBridgeBuilder转换器
这个转换器使用带洞的多边形的外部边界建立多边形的洞,生成一个与输入的带洞的多边形等价的多边形表达形式。一个单一的、连接的路径访问边界和每个洞一次。这个操作在包含在输入要素中的所有洞上执行。
当一个要素包含一个错误拓扑的圆环洞(如一个在外部边界外部的洞),这个转换器在INVALID端口输出未更改的要素。如果输入要素适当的放置,生成的多边形边界可以保证是非自相交的。
如图, 使用转换器DonutBuilder生成环:
使用DonutBridgeBuilder转换器可以看到桥是如何构建的:
下面用一个简单图形说明一下这个操作,如图的一个带洞的多边形:
(图片已丢失)
它的属性如下:
Coord Dimension: 2D
Total Number of Coords: 10
Bounding Box:
Lower Left: (0.0,38.0)
Upper Right: (792.0,574.0)
Coordinate Listing:
----------------------------------
Geometry Type: Donut(8)
Number of Shells: 2
Part: 0 (Outer Shell)
Geometry Type: Polygon(4)
Number of Coords: 5
1: (0.0, 38.0)
2: (0.0, 574.0)
3: (792.0, 574.0)
4: (792.0, 38.0)
5: (0.0, 38.0)
Part: 1 (Inner Shell)
Geometry Type: Polygon(4)
Number of Coords: 5
1: (50.0, 88.0)
2: (50.0, 524.0)
3: (742.0, 524.0)
4: (742.0, 88.0)
5: (50.0, 88.0)
从这些属性可以看到,这个图形是由两个多边形组成的,顶点的顺序分别如上标识的,都是(1,2,3,4,5)。
使用DonutBridgeBuilder转换器后,如图:
(图片已丢失)
几何属性如下:
Bounding Box:
Lower Left: (0.0,38.0)
Upper Right: (792.0,574.0)
Geometry Type: IFMEPolygon
Boundary:
Geometry Type: IFMELine
Number of Coordinates: 11 -- Coordinate Dimension: 2
0: (0,38)
1: (0,574)
2: (50,524)
3: (50,88)
4: (742,88)
5: (742,524)
6: (50,524)
7: (0,574)
8: (792,574)
9: (792,38)
10: (0,38)
这个几何是一个多边形,顶点的顺序如图标识的(1,2,3,4,5,6,7,8,9,10,11)。
INCLUDE -- failed to evaluate TCL expression ` if { {2D Min/Max Box} == {2D Min/Max Box} } { set comment { We need to turn the COORDS which are minX minY maxX maxY into a full polygon list of coordinates }; set splitCoords [split [string trim {400400 450 450}]]; if { [llength $splitCoords] != 4 } { error {Creator_4: Coordinate List MUST have four numbers - `400400 450 450' is invalid}; }; set minX [lindex $splitCoords 0]; set minY [lindex $splitCoords 1]; set maxX [lindex $splitCoords 2]; set maxY [lindex $splitCoords 3]; puts "MACRO Creator_4_COORDS $minX $minY $minX $maxY $maxX $maxY $maxX $minY $minX $minY"; puts {MACRO Creator_4_2D3D 2D_GEOMETRY}; puts {MACRO Creator_4_CLASSIC *} } ' -- Creator_4: Coordinate List MUST have four numbers - `400400 450 450' is invalid
while executing
"error {Creator_4: Coordinate List MUST have four numbers - `400400 450 450' is invalid}"
invoked from within
"if { {2D Min/Max Box} == {2D Min/Max Box} } { set comment { We need to turn the COORDS which are minX min..."
Program Terminating