一些转换器的用法和注意事项(三)

原文发布时间: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)。

 

6、转换器 Creator
当转换器Creator设置如下时:

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










  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值