原文发布时间:2011-01-21
作者:跑
联系:QQ44295133
(一) 引子
这里先设定两个关键字:融合、属性,下面所有数据分析都将提及。
在处理图斑的时候,我们经常碰到这样的问题:当图斑面积或宽度小于相应地图比例尺下的最小上图面积时,需要对它进行融合(消融),即把它融合到相邻的斑块。
我们知道,ArcGIS有现成工具ArcToolbox\Toolboxes\Data Management Tools\Generalization\Eliminate,该工具允许所选碎面融合进相邻共享边较长或面积较大的面内。然而,美中不足的是,该工具融合条件不包含属性字段,比如跨行政区融合图斑;再者,与绝大多数ArcToolbox一样,该工具的结果是生成新要素集,不能直接针对原数据集进行更新操作。
因此,有必要自定义工具实现这一功能, FME无疑是一个不错的选择。在FME Readers and Writers中我们学习了通用数据库的三种写入方式:INSERT (default) 、UPDATE、 DELETE,此外,这三种方式也存在于要素级别写入中。(相关博文——http://blog.163.com/antufme@126/blog/static/14049249220108164170707/)
(二) 实施
1. 发布参数
将属性字段作为“Choice or Text”发布到参数区,默认值设置为空。当需要将属性字段作为融合条件时,运行选择或输入指定字段名,反之。
需要指出的是,后续所有的操作均以此字段作为Group By选项。
2. 筛选可融合碎面及其相邻面
上图左为碎面探测转换器,在后续文章关于自定义转换器的应用中将做说明;第一个空间位置过滤转换器找出与碎面相邻的其它面,作为融入的对象;第二个空间过滤函数选出原输入碎面中与上一步选出的相邻面接触的部分,转换器设置与前一个相同。(为便于区分,后面统称碎面、相邻面。)
这里对数据作一说明。实际数据中,图斑可能是充满无缝隙的,也可能是孤立有缝隙的。那么就存在碎面周围布存在与之接触的面,也就无法融合了。后面要素级别的删除操作将导致不可逆的结果。
3. 求共享边长最大值
这里首先需要将上述筛选出来的碎面转化为线要素,然后与相邻面进行叠加处理,再按要素ID(以原碎面OID属性)分别统计叠加后线段的长度并取最大边长。
通过LineOnAreaOverlayer将相邻面的要素ID传递给最长共享边,并将该字段设置为融合标记,分别通过各自原有要素ID关联(FeatureMerger)给碎面及相邻面。经过这一系列处理,我们已经为融合创造了条件。
4. 创建相应要素fme_db_operation
对于图1的输出,我们可以设置该属性值为DELETE;对于图3-3的输出,设置为UPDATE。这两个正好作为自定义转换器的两个不同输出端。
结论
利用FME对数据库的不同写入方式这一特征,我们可以加速数据处理。