FME模板兴趣班第十八期(面遮挡处理) 任务小结
班长欣欣
一、题目说明
对面进行遮挡处理,处理要求如下:
多个面之间存在压盖,要求压盖区域用Level高的遮挡Level低的,并将压盖区域从Level低的面中擦除。如下图所示:
面1、面2、面3 的Level分别是 80、90、100。
面1和面3的压盖区域为面4,则面4的Level为100,面4应从面1中擦除;
面2和面3的压盖区域为面5,则面5的Level为100,面5应从面2擦出;
最终得到的面1、2、3结果如下:
二、题目分析
按照本题目的要求,对数据进行遮挡处理时,重点在于两个方面:
1)当面有压盖时,要判断面重叠部分最大的Level级别,并将该级别作为重叠部分的Level;
2)将重叠部分从Level级别低的面中擦除,只保留在Level级别最高的面中。
三、作业情况
本次一共收到26份作业,作业概括和分析如下:
序号 |
作者 |
主要方法 |
小结 |
转换器个数 |
推荐 |
1 |
刘足建 |
|
ListRangeExtractor只取最大的Level值,重叠部分的其他属性无法确保跟Level最大的面相同。Dissolver后得到的面属性可能有误。 |
4 |
|
2 |
努力的和尚哥 |
|
1)没有写模块,注意模板完整性。 2)利用FME要素处理机制,排序后让要素按照Level级别从低到高进入面面压盖,在面面压盖的时候直接让重叠部分带上最后一个要素的属性。即Level级别最高的面的属性。然后通过Dissolver |
3 |
★推荐有一定FME基础的人学习 |
3 |
伸手摘星 |
|
用TestFilter分析列表具有特殊性,如果重叠面的压盖计数超过3,则不再适用。做模板的时候要考虑一下通用性。 可以了解一下List相关的转换器进行操作。 |
7 |
|
4 |
向左向右 |
|
Dissolver合并分组的时候只需要考虑Level属性即可。其他属性可以不用选择 ListSorter之后对重叠面的用户属性进行重新赋值,无法确保Dissolver时候的属性。 |
3 |
|
5 |
刘振东 |
运算的结果正确,但是过程太复杂,而且没有注释,不太明白具体思路。 |
建议学习一下1、4的作业思路 |
17 |
|
6 |
徐文彬 |
|
ListRangeExtractor后的AttributeManager应该把所有用户属性赋值。 |
4 |
|
7 |
箜竹 |
|
对重叠部分的面通过Tester判断列表中元素的Level值大小不够严谨,也只考虑了列表元素最多为3的情况。 而且Tester_2中的判断条件不够严谨。 |
9 |
|
8 |
森林木 |
|
面面分析的步骤用AreaOnAreaOverlayer即可完成,可以节省很多步骤。 |
8 |
|
9 |
魏文波 |
|
Counter这个转换器貌似多余了, AttributeCreator获取第0个元素的属性时,应考虑把所有用户属性进行赋值。 另可以更简化,参考序号4的作业,思路基本一致。但是转换器更少。 |
6 |
|
10 |
东方牛仔 |
思路与方法与序号9的作业基本一致。排序后使用AttributeCopier获取了元素0的所有属性。 |
使用AttributeCopier可以确保Dissolver后的属性正确。 |
6 |
★ |
11 |
钱小将 |
|
跟序号2的作业方法一样,就不重复说明啦 |
3 |
★推荐有一定FME基础的人学习 |
12 |
小迷糊 |
|
ListSorter后没有对重叠部分的其他属性做处理,Dissolver之后的属性可能有问题。 提交的模板中有两条连接线还是禁用状态,下次注意哦。
|
4 |
|
13 |
Because of you |
|
Counter貌似多余了 这样获取的几何图形没问题,但是ListSorter后没有对重叠部分的其他属性做处理,Dissolver之后的属性可能有问题。 模板最整洁,注释最清晰,点赞! |
4 |
|
14 |
阿呆 |
循环的过程我没看明白……下次可以写个注释说明么…… |
|
5 |
|
15 |
比巴卜 |
|
这样获取的几何图形没问题,但是ListSorter后没有对重叠部分的其他属性做处理,Dissolver之后的属性可能有问题。 |
4 |
|
16 |
江树 |
|
Counter好像没必要,其他跟序号2的作业方法一样,就不重复说明啦 |
4 |
★推荐有一定FME基础的人学习 |
17 |
青 |
|
使用ListIndexer可以保证重叠面获取所有属性。 |
|
★ 有注释,很好。 |
18 |
杨忠智 |
|
面面叠加后可以直接使用ListSorter; ListSorter后只取第0个元素的Level还不够严谨,重叠部分的其他属性无法确保跟Level最大的面相同。Dissolver后得到的面属性可能有误。 缺少写模块,下次加上哦。 |
|
|
19 |
①②③ |
|
ListRangeExtractor只取最大的Level值,重叠部分的其他属性无法确保跟Level最大的面相同。Dissolver后得到的面属性可能有误。 |
3 |
|
20 |
D |
|
如上。 另ListSearch的结果没有用上。 |
5 |
|
21 |
Lee.Retin |
|
跟序号2的作业方法一样,就不重复说明了 |
3 |
★推荐有一定FME基础的人学习 |
22 |
活力贝贝 |
|
跟序号2的作业方法一样,就不重复说明了。 有注释,更易理解! |
3 |
★推荐有一定FME基础的人学习 |
23 |
上来透口气 |
|
对重叠部分的处理,使用List的转换器即可。
|
5+1(自定义转换器) |
|
24 |
桃子 |
用了两种方法: Counter赋唯一标示
|
感谢提供两种思路 |
10 |
★ |
25 |
小胖纸 |
|
ListSorter后只取第0个元素的Level还不够严谨,重叠部分的其他属性无法确保跟Level最大的面相同。Dissolver后得到的面属性可能有误。 |
7 |
|
26 |
熊阿大 |
|
ListRangeExtractor只取最大的Level值,重叠部分的其他属性无法确保跟Level最大的面相同。Dissolver后得到的面属性可能有误。 |
5 |
|
四、小结
- 这次是作业最多的一次,感谢大家对FME的热爱。
- 这次作业从最后生成的几何图形来说,大家的结果几乎都正确。不过每次作业看得越多,我也会思考越多,考虑多了就会觉得有的方法不够严谨。比如说用AreaOnAreaOverlayer叠加后对List排序,但是排序之后只提取Level属性或者直接用列表Level进行融合。这样的思路乍看起来是OK的,但是如果我们再严谨一点,既然保留最大Level的部分,那如何保证Dissolver之后的属性跟原来一致呢?这个时候需要在Dissolver之前把素有用户属性对重叠部分重新赋值,会更严谨。 (我想大部分原因是因为题目没有强调这个,但是我觉得我们可以多考虑一点)。基于这个原因,所以我只推荐了能同时保证几何和属性的作业。
-
序号2、11、16、21、22的作业,先对Sorter按升序排序后叠加,可以保证Level最大的最后进入AreaOnAreaOverlayer,但是关于AreaOnAreaOverlayer属性设置的参数选项(如下):
Use Attributes From One Feature: 帮助文档的解释说的是“从一个代表性要素中获取所有属性”。这个代表要素是第一个要素还是最后一个要素没有给出答案。谁能帮我答疑解惑一下,有奖!
-
最后,我们第十九期任务马上就要发布了,你们期待吗?