概述
为了纠正拓扑错误,您应首先测试哪些要素会破坏数据集的相应拓扑规则。在本文中,您将学习如何使用FME来r识别拓扑错误,通过使用SpatialFilte。要查看更多数据验证方案,请查看数据验证和FME的QA教程。
下载
correcting-topology-errors.fmwt
注意:由于您正在处理面向公众的数据库,因此有时可能会覆盖和/或修改表。如果您的转换产生意外结果,请参阅重置PostGIS培训数据库文章。或者,您可以下载提供的文件,并使用适当格式的读模块替换PostGIS读模块。
练习1a - 测试线型要素的拓扑错误
在本练习中,您将测试线型数据集中的拓扑错误。您正在测试数据集,因为您要确保数据集已正确数字化并且自行车路径段已接合在一起。
说明
1.启动FME Workbench
- 如果尚未打开,请启动FME Workbench。
2.创建一个新工作空间
- 在“开始”页面的“创建工作空间”部分中,选择用于创建新工作空间的选项。
3.添加PostGIS 读模块
- 在工作空间中未选择任何内容的情况下开始键入“PostGIS”,然后通过双击或使用箭头键从读者列表中选择PostGIS格式,并按回车键将其添加到工作空,。
- 接下来,从读模块连接列表中选择PostGIS Training Database。如果尚未设置数据库连接,请选择“添加数据库连接”并输入以下参数:
- 主机:postgis.train.safe.com
- 端口:5432
- 数据库:fmedata
- 用户名:fmedata
- 密码:fmedata
- 接下来,打开读模块参数并从表列中选择BikePathTopology表。
4.添加SpatialFilter
- 要将SpatialFilter添加到画布,通过键入“SpatialFilter”以在快速添加搜索中显示FME转换器列表。双击或者使用箭头键选择转换器列表中的SpatialFilter,然后按回车键将其添加到工作空间。
- 添加转换器后,将BikePathTopology 读模块连接到SpatialFilter:Filter和Candidate端口。
5.设置要测试的空间谓词
- 添加SpatialFilter后,双击SpatialFilter或单击齿轮图标以打开转换器参数对话框。
- 单击Spatial Predicates to Test省略号以打开测试条件并选择Filter Touches Candidate谓词,然后单击OK。请确保您已取消选择了所有其他测试,包括Filter Intersects Candidate。
您将使用touches谓词来查看哪些行已拼接在一起以及哪些行是不相交的。
6.添加两个Inspectors
接下来,您将向工作空间添加两个Inspector。
- 添加第一个Inspector并打开转换器参数。
- 将转换器名称设置为“Touch”,然后单击“确定”接受更改
- 将Touch Inspector连接到SpatialFilter:Passed输出端口。
- 添加第二个Inspector,将其重命名为“Disjoint”并连接到SpatialFilter:Failed输出端口。
9.运行工作空间
- 单击工具栏上的“运行”按钮,或使用菜单栏上的“运行”>“运行转换”运行工作空间。
运行工作空间后,输出将自动显示在FME Data Inspector中。注意有12个线要素在拓扑上不正确。您将学习如何使用相同的工作空间在练习1b中更正这些要素。请保存您的工作空间。不要关闭此工作空间,因为练习1b将从您离开的地方继续。
结果
输入
输出
练习1b - 纠正拓扑错误
在练习1a中,您通过检查不相交的线来测试线型数据集中的拓扑错误。在本练习中,您将使用Snapper转换器更正不相交的要素(由<missing>谓词属性标识)。此练习的目的是消除由于没有将线段接合到顶点/端点而引入的错误。
说明
1.整理工作空间
由于你正在进行以前的练习,因此工作空间可能会开始变得有点混乱。为了防止这种情况发生,您将学习如何使用书签来保持画布的有序性。
- 在按住Shift或CTRL键的同时单击SpatialFilter以及Touch和Disjoint Inspectors,这将允许您在工作空间上选择多个项目。或者,您可以单击并拖动鼠标以执行多选。
- 选择后,右键单击其中一个选定项目,然后从下拉菜单中选择“创建书签”。或者,您可以使用书签快捷方式(CTRL + B)。
- 将书签命名为“Topology Inspector”
使用书签是一种定义工作空间区域以便于访问的方法。可折叠书签在FME版本2018+中可用。有关使用可折叠书签的详细信息,请参阅“ 桌面基础课程手册”。
2.禁用Topology Inspector书签
- 不要选择书签中的两个转换器,只需右键单击书签中的任意位置,然后从下拉菜单中选择“书签”中的“禁用所有对象”。
3.添加Snapper
由于SpatialFilter在用于测试接触自行车路径段,因此您需要更正未通过此测试的段。
- 将PostGIS读模块连接到Snapper。此转换器用于根据您将在下一步中定义的捕捉容差捕捉自行车路径段。
4.设置捕捉容差
- 打开Snapper参数并将Snapping Type设置为Vertex Snapping。
如果距离在指定的容差范围内,则顶点捕捉将线顶点捕捉在一起。有关容差参数的详细信息,请参阅“ 桌面基础课程手册”。
- 接下来,将捕捉距离设置为20。
注意:捕捉距离以地图单位测量,在本例中为米。
5.添加FeatureWriter
FeatureWriter可以用来代替常规FME写模块。使用FeatureWriter可以对写模块结果进行后处理。在本例中,我们将使用FeatureWriter,以便我们可以使用相同的逻辑重新测试写入的要素,以确认我们的要素实际上已得到纠正。
- 将FeatureWriter添加到画布并将其连接到Snapper的Snapped和Untouched输出端口。
6.设置表名,要素操作和表处理
- 在FeatureWriter参数中,将格式设置为PostGIS,并将连接设置为与读模块(PostGIS Training Database)相同的数据集。
- 接下来,在“常规”部分中,将“表名称”设置为“BikePathCorrected”。
- 然后,在“表”部分中,确保将“要素操作”设置为“插入”并将“表处理”设置为“删除和创建”。
- 切换到“用户属性”选项卡,确保“属性定义”设置为“自动”。
- 最后,展开参数对话框底部的“输出端口”部分,并将“输出端口”参数设置为“每个要素类一个”。
7.重新测试线要素
由于我们已经为我们的要素创建了空间测试,因此我们可以简单地复制和粘贴现有的转换器以重新使用它们。
- 单击并拖动鼠标以选择“Topology Inspector”书签及其所有内容,然后右键单击书签的顶部栏并选择“复制”。或者,您可以在选择书签和转换器时使用快捷键CTRL + D.
- 复制好一个,将新书签放在FeatureWriter之后。
- 与第一个空间测试类似,将FeatureWriter的BikePathCorrected输出端口连接到SpatialFilter_2上的Filter和Candidate端口。
- 最后,启用新书签中的对象。您的最终工作空间应类似于下面的屏幕截图:
8.运行工作空间
- 单击工具栏上的“运行”按钮,或使用菜单栏上的“运行”>“运行转换”运行工作空间。转换成功运行后,通过选择写模块,然后单击写模块上方出现的快捷菜单上的“检查”按钮,在FME Data Inspector中查看输出。
当您在FME Data Inspector中查看数据时,您会注意到通过捕捉线顶点,不相交要素的数量已从12减少到1。
结果
输入
输出
转换器
- Inspector - 将要素发送到FME Data Inspector以供显示。
- FeatureWriter - 将要素写入任何支持FME的写模块。
- Snapper - 把线,线段,端点或顶点等要素集合起来,如果它们彼此在一定距离内,并且(可选的)它们具有一个或多个共同属性。
- Sorter - 按选定属性的值对要素进行排序。
- SpatialFilter - 根据空间关系过滤点,线,面和文本要素。