首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >根据道路线段查找道路起点和终点的顺序

根据道路线段查找道路起点和终点的顺序
EN

Stack Overflow用户
提问于 2021-10-15 04:13:59
回答 1查看 51关注 0票数 0

我有几千条道路,每条道路由一到几个路段组成。对于每个线段,都有一个开始节点和结束节点。如何对它们进行排序,以便获得道路的起始节点和结束节点?一个道路数据的示例如下所示。

知道道路的开始节点和结束节点后,我希望将此信息应用于道路的每一段,以创建下表。

代码语言:javascript
代码运行次数:0
运行
复制
import pandas as pd

data = [['Road_id','Segment_id','Start_node','End_node'], [1,8285,4740,4741], [1,8509,4741,5144], [1,8437, 5016,5017], [1,8447, 5031, 5016], [1, 8520, 5144,5168], [1,9104,5168,4785],[1,8550,5017,4740]]

df = pd.DataFrame(data[1:], columns = data[0]) 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-15 04:40:31

也许这会给你一个开始。这将执行拓扑排序并按顺序打印线段。您必须扩展此功能以处理多个道路。

代码语言:javascript
代码运行次数:0
运行
复制
data = [
    ['Road_id','Segment_id','Start_node','End_node'], 
    [1,8285,4740,4741],
    [1,8509,4741,5144],
    [1,8437,5016,5017],
    [1,8447,5031,5016],
    [1,8520,5144,5168],
    [1,9104,5168,4785],
    [1,8550,5017,4740]
]

# Reorganize the data a bit.

rows = {}
nexts = {}
starts = set()
ends = set()
for row in data:
    if isinstance(row[0],str):
        title = row
        continue
    rows[row[2]] = row
    nexts[row[2]]=row[3]
    starts.add(row[2])
    ends.add(row[3])

# Find the start without an end, and the end without a start.

start = (starts-ends).pop()
end = (ends-starts).pop()

# Go print out the rows along this route.

node = start
while node in nexts:
    print(rows[node])
    node = nexts[node]

输出:

代码语言:javascript
代码运行次数:0
运行
复制
(1, 8447, 5031, 5016)
(1, 8437, 5016, 5017)
(1, 8550, 5017, 4740)
(1, 8285, 4740, 4741)
(1, 8509, 4741, 5144)
(1, 8520, 5144, 5168)
(1, 9104, 5168, 4785)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69579903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档