首页 > 编程语言 >Python应用指南:地铁两站之间最短路径查询

Python应用指南:地铁两站之间最短路径查询

时间:2024-10-25 21:20:39浏览次数:8  
标签:node Python 路径 最短 nx 地铁 两站 path shortest

随着城市交通的发展,地铁已成为许多城市居民日常出行的重要方式之一。地铁网络的复杂性和站点数量的增加使得乘客在选择最佳路线时面临挑战。为了帮助乘客快速、准确地找到从起始站到目的站的最短乘坐线路,本篇文章我们来求一下地铁两站之间最短路径查询的查询,通过Python脚本快速找到从起始站到目的站的最短乘坐线路,结合pandas、networkx和matplotlib等库,实现了地铁网络的数据读取、图结构的构建、最短路径算法的应用以及结果的可视化展示,本篇文章依然以厦门市地铁为例。

首先,我们先获取厦门市所有地铁站点的坐标数据,数据获取方法可以参考:

利用高德API获取整个城市的公交路线并可视化(六)_通过简单的地图api(如google maps或openstreetmap),计算景点之间的交通时间-CSDN博客

这里就不再赘述,直接来到脚本计算部分,先讲一下方法思路,一共四个步骤;

方法思路

  1. 从CSV文件中读取厦门地铁站点和线路数据
  2. 使用networkx库构建地铁网络的图结构,每个站点作为一个节点,每条线路作为连接节点的边
  3. 利用networkx库提供的最短路径算法(如Dijkstra算法),计算从起始站到目的站的最短乘坐线路
  4. 使用matplotlib库绘制地铁网络图,高亮显示最短路径

这里的是文件路径改成自己的就好,另外起终点也改成需要查询站点的即可;

# 设置起点和终点
source_station = '海沧湾公园'
target_station = '蔡厝'

完整代码#运行环境Python 3.11

import pandas as pd
import networkx as nx
import matplotlib.pyplot as plt

# 设置matplotlib字体,使其支持中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 指定CSV文件的路径
file_path = 'E://Data//厦门地铁.csv'

# 使用pandas读取CSV文件
df = pd.read_csv(file_path, encoding='gbk')

# 创建一个空的无向图
G = nx.Graph()

# 遍历DataFrame中的每一行
for index, row in df.iterrows():
    # 添加节点(站点)及其经纬度坐标作为属性
    G.add_node(row['站名'], pos=(row['经度'], row['纬度']))

    # 检查当前行与前一行是否属于同一线路
    if index > 0 and row['线路名'] == df.iloc[index - 1]['线路名']:
        # 如果是,则添加边(连接两个相邻站点)
        G.add_edge(df.iloc[index - 1]['站名'], row['站名'])

# 设置起点和终点
source_station = '海沧湾公园'
target_station = '蔡厝'

# 尝试计算两点之间的最短路径
try:
    shortest_path = nx.shortest_path(G, source=source_station, target=target_station)
except nx.NetworkXNoPath:
    # 如果找不到路径,打印提示信息
    print("没有从起始站到目标站的路径")
else:
    # 找到了路径,打印路径信息
    print(f"最短路径: {shortest_path}")

    # 绘制整个图
    plt.figure(figsize=(12, 8))
    nx.draw(G, pos=nx.get_node_attributes(G, 'pos'), with_labels=True, node_size=600, font_size=10, font_weight='bold',
            node_color='lightblue')

    # 如果找到了最短路径,高亮显示这条路径
    if shortest_path:
        path_edges = list(zip(shortest_path, shortest_path[1:]))
        nx.draw_networkx_edges(G, pos=nx.get_node_attributes(G, 'pos'), edgelist=path_edges, edge_color='r',
                               width=2)

        # 高亮显示最短路径上的站点
        nx.draw_networkx_nodes(G, pos=nx.get_node_attributes(G, 'pos'), nodelist=shortest_path,
                               node_size=800, node_color='yellow', alpha=0.8)  # 更大的尺寸和黄色高亮

    # 检查图是否连通
    is_connected = nx.is_connected(G)
    print(is_connected)  # 输出 True 或 False,表示图是否连通

    # 显示标题
    plt.title('地铁网络及最短路径')

    # 显示图表
    plt.show()

脚本结束会打印出最短路径和可视化的高亮路径图,同时也会打印出线路的连通性,输出 True 或 False,表示图是否连通。用于检查无向图 G 是否连通。如果图是连通的,那么图中的任意两个顶点都至少存在一条路径相连接。  对于无向图来说,这意味着图中不存在孤立的子图或部分。换句话说,如果你能从任何一点出发到达其他所有的点,那么这个图就是连通的;

可视化地铁网络图,并高亮两个站间最短路径;

发散一下换成公交线路路也同样可行,只是需要增加一个公交线路字段,来界定换乘线路;

文章仅用于分享个人学习成果与个人存档之用,分享知识,如有侵权,请联系作者进行删除。所有信息均基于作者的个人理解和经验,不代表任何官方立场或权威解读。

标签:node,Python,路径,最短,nx,地铁,两站,path,shortest
From: https://blog.csdn.net/weixin_45812624/article/details/143235574

相关文章

  • 10.25Python_pandas_函数(1)
    二、函数1、常用的统计学函数函数名称描述说明count()统计某个非空值的数量sum()求和mean()求均值median()求中位数std()求标准差min()求最小值max()求最大值abs()求绝对值prod()求所有数值的乘积案例:#创建一个示例DataFramedata={'A':[1,2,3,4,5],......
  • 用python绘图-散点图/直方图/概率密度图
    项目用到的文件:一、代码解释:drawing01.pyimportdash#Dash是用于构建分析型Web应用的Python框架,由Plotly开发fromdashimportdccfromdashimporthtmlfromdash.dependenciesimportInput,Outputimportpandasaspd#尤其适用于表格数据和时间序列数......
  • python+flask框架的基于微信小程序的非法集资案件登记平台前台8(开题+程序+论文) 计算
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着互联网技术的飞速发展,微信小程序作为一种轻量级的应用形式,已广泛应用于各行各业。在打击非法集资案件的过程中,传统的登记方式存在效率......
  • python+flask框架的基于微信小程序的高校实验室考勤管理系统的设计与实现前端8(开题+
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景关于高校实验室考勤管理问题的研究,现有研究主要集中在传统考勤系统的设计与实现上,如基于RFID、指纹识别等技术。然而,随着移动互联网技术的......
  • python+flask框架的基于微信小程序的高校食堂在线预约点餐系统的设计服务端视频8(开题
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着移动互联网技术的迅猛发展,高校学生的生活方式和学习模式正发生着深刻变化。特别是在餐饮消费方面,学生群体对便捷性、个性化和高效性的......
  • 【Python中的字符串处理】正则表达式与常用字符串操作技巧!
    Python中的字符串处理:正则表达式与常用字符串操作技巧Python在字符串处理方面提供了丰富的内置功能和模块,能够帮助开发者处理各种复杂的文本操作。无论是简单的字符串拼接、替换,还是借助正则表达式(re模块)实现的模式匹配,Python都有强大的工具可以让我们高效处理文本数据......
  • 【Python中的内置函数】max、map、zip等函数的实用技巧!
    Python中的内置函数:max、map、zip等函数的实用技巧Python提供了丰富的内置函数,帮助开发者高效编写简洁的代码。在这篇文章中,我们将详细探讨几个常用的内置函数,如max、map和zip,并展示如何在实际项目中灵活运用这些函数。本篇将结合代码示例,深入探讨它们的使用技巧,帮助你......
  • python+flask框架的基于微信小程序的电影推荐系统前台mp48(开题+程序+论文) 计算机毕
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着互联网技术的飞速发展,在线电影观看已成为人们休闲娱乐的重要方式之一。微信作为中国最大的社交平台之一,其小程序平台凭借其轻量级、即......
  • python+flask框架的基于微信小程序的电影推荐系统后台8(开题+程序+论文) 计算机毕业设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着移动互联网技术的飞速发展,智能手机已成为人们日常生活中不可或缺的一部分。微信小程序作为微信生态系统中的重要组成部分,凭借其无需下......
  • python+flask框架的基于微信小程序的电子借条APP系统的设计与实现(开题+程序+论文) 计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着移动互联网技术的飞速发展,微信小程序作为一种轻量级的应用形式,因其无需下载安装、即用即走的特性,迅速成为用户日常生活中不可或缺的一......