免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 1838|回复: 5
收起左侧

由道路数据集构建拓扑网络|TopologyBuilder转换器

[复制链接]

665

主题

2万

铜板

34

好友

传奇会员

Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30

积分
20649

精华勋章爱心勋章地信专家组贡献勋章冰雪节勋章

发表于 2021-10-22 14:43 | 显示全部楼层 |阅读模式
网盘:https://pan.baidu.com/s/1SPUdec1CSj7-kjbzws2fXw提取码:2021前言

网络拓扑由在整个区域内维护的节点和线路网络所组成,其生命力取决于是否具有一致和连通的几何形状。网络拓扑常应用于交通运输类数据集,以确保数据遵循特定的逻辑(例如高速公路上的高架桥或地下通道是否在正确位置)。

本文中,我们将基于加拿大素里市的道路数据centrelinesroad.gdb创建拓扑网络。在正式创建之前,为了拓扑网络的准确性,我们则必须先进行几何分析和处理。

而建立拓扑网络之前,数据必须需要具备什么条件?

1.线必须在END点(终点)处相连(已捕捉)。

2.线必须在交叉点处分开(即,结点必须在线的末端,而不是内部顶点)。

3.不能存在复杂的边缘(FME不支持复杂边缘)。

步骤说明1、打开FMEWorkbench

打开一个新的FME workbench,开始进行模板搭建。

2、添加一个EsriGeodatabase (File Geodb Open API)格式的读模块

添加一个EsriGeodatabase (File Geodb Open API)格式的读模块,设置读取数据为文中所给测试数据road_centrelines.gdb,其他参数保持默认设置,完成后点击OK将读模块添加到工作空间。

3、添加Deaggregator转换器

在工作空间中添加一个Deaggregator转换器,转换器参数保留为默认值,而后将其连接到Esri Geodatabase格式的读模块,该转换器的功能是打散多部件要素,通过这个转换器运行转换,我们得以将多部分线要素打散为单独的要素用于下一步操作。

4、添加PathSplitter转换器

现在,我们将通过PathSplitter转换器来创建线段,依旧将转换器所有参数保留为默认值,然后连接到从Deaggregator转换器的输出端口。


5、运行工作空间

运行当前的工作空间,来看看到目前为止的转换效果。在启用要素缓存的状态下运行我们的工作空间,然后使用“视图预览”窗口查看道路数据,由于当前我们已经对要素进行了细分,因此我们可以应用拓扑。

在检查数据时,我们注意到某些要素未对齐(即,交界处的顶点没有在完全相同的点位上),参考左下图。右图则显示了预期的对齐方式。那么对此问题,我们该如何解决呢?让我们接着看下一步处理操作。

6、添加Snapper转换器

将Snapper转换器添加到我们的工作空间,设置Snapping Type为“Segment Snapping”。为了捕捉距离范围内的点到相同位置,我们将转换器的Snapping Distance设置为5.0,容差设置为自动(如下图)。该转换器将解决上一步中提到的交界处的顶点没有在完全相同的点位上的问题。

7、添加一个接合点

接合点是在构建和组织工作空间时用于管理连接的工具。用鼠标右键单击转换器某个输出端口,在下拉框中选择“插入接合点”,即可完成接合点创建,如下图所示,我们可以将转换器捕捉到的和未捕捉的数据都连接到一条数据流上。

8、添加两个CoordinateExtractor转换器

我们将使用两个CoordinateExtractor来获取每个线要素的首、尾节点坐标。在工作空间上添加两个CoordinateExtractor转换器,并将它们都连接到刚刚创建的接合点上。

双击第一个CoordinateExtractor打开它的参数。该转换器将用于提取每条道路的第一个坐标,将转换器模式设置为指定坐标,展开转换器的“指定坐标”部分,设定坐标索引为0,X属性设置为_x0,Y属性设置为_y0,最后单击确定(如下图)。

现在我们使用CoordinateExtractor_2重复此过程,以找到每条道路的尾节点坐标。将坐标索引设置为-1,将X属性设置为_x1,将Y属性设置为_y1。最后单击确定(如下图)。

9、添加两个VertexCreator

添加两个VertexCreators到工作空间上。我们需要在不引入新顶点(或节点)的情况下,对网络进行适当的节点设置。这对于道路网极为重要,可以避免将公路立交桥或桥梁表示为十字路口。为此,我们可以使用在刚刚提取的坐标,即将每个CoordinateExtractor连接到一个VertexCreator转换器,如下所示:

双击第一个VertexCreator打开它的参数。将“模式”设置为“用点替换”,将X值设置为_x0,将Y值设置为_y0(如下图)。

完成后,使用具有以下参数值的VertexCreator_2重复此过程,同样将“模式”设置为“用点替换”,将“ X值”设置为_x1,将“ Y值”设置为_y1。

10、添加PointOnLineOverlayer

在此步骤中,我们将使用PointOnLineOverlayer创建路口并将路口处的线分割开。将PointOnLineOverlayer添加到工作空间。连接两个VertexCreator输出端口到PointOnLineOve rlayer转换器的点输入端口上。接下来,将Snapper后的接合点连接到线输入端口上。打开转换器参数,将点公差设置为0.1,并将所有其他参数保留为默认值。

11、建立拓扑

添加一个TopologyBuilder转换器,将PointOnLineOverlayer转换器的Line输出端口连接到TopologyBuilder,其他所有参数保留为默认值。

*注意:列表生成是可选的。如果您不希望为“边缘”或“节点”生成列表,请不要选中参数设置里这些框。

12、添加EsriGeodatabase (File Geodb Open API)写模块

最后,让我们写出结果数据。添加一个Esri Geodatabase (File Geodb Open API)格式的写模块到工作空间,选择一个目标数据集的文件目标。设置坐标系为LL84。打开参数,然后将“覆盖现有地理数据库”选为“是”。其余参数保留默认参数。

将输出端口从TopologyBuilder连接到Esri Geodatabase 写模块,即可完成整个工作空间的搭建。接下来运行工作空间即可。

现在,我们已经成功地为素里市的道路中心线创建了一个拓扑网络。最终的工作空间应类似下图:

使用FME DataInspector或Visual Preview Window检查最终运行结果如下:


本文转载来自CSDN作者:fmechina  版权归作者所有
原文链接:https://blog.csdn.net/fmechina/a ... 1001.2014.3001.5501



11

主题

3万

铜板

9

好友

地信院士

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
2804

童话节勋章

发表于 2021-10-22 15:20 | 显示全部楼层
6666666666666666
回复 支持 反对

使用道具 举报

11

主题

3万

铜板

9

好友

地信院士

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
2804

童话节勋章

发表于 2021-10-25 10:41 | 显示全部楼层
6+666666666666
回复 支持 反对

使用道具 举报

2

主题

4万

铜板

8

好友

钻石会员

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
7000
发表于 2021-12-5 21:48 | 显示全部楼层
谢谢分享
回复

使用道具 举报

0

主题

1万

铜板

3

好友

资深会员

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

积分
3288
发表于 2022-11-27 19:49 | 显示全部楼层
好资料,正在学习中....
回复 支持 反对

使用道具 举报

3

主题

2850

铜板

1

好友

高级工程师

Rank: 9Rank: 9Rank: 9

积分
1164
发表于 2023-3-20 09:51 | 显示全部楼层
谢谢楼主!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表