动手构建地铁关系网,实现最短路径查询

一、前言

打开手机‘北京地铁’APP,输入起始点:霍营,终点:北京南站,发现系统给我们推荐了两条路线。
最短时间路线与最少换乘路线,并且分别给出了耗时与乘坐里程费。看到这里,不禁开启了靓仔疑问,假如给你地铁站相关数据,如何构建这样的关系网络呢?(尽量少写代码,毕竟我这个人懒的不行,花最少的功夫,整最炫的效果,咦)

1.整理地铁站点数据,处理成echarts图表所需要的结构
2.整理地铁站点数据,自己写代码实现,能实现(好累啊…)
3.整理地铁站点数据,导入 Neo4j 中,点击查看

分析:方案一,不仅要处理数据还要搞echarts样式,算了吧。方案二,直接PASS,还是方案三省力,正好我的电脑上之前安装过 Neo4j 图数据库,哈哈哈,开搞开搞!
软件下载地址:http://doc.we-yun.com:1008/neo4j-chs
软件安装教程:https://www.cnblogs.com/jstarseven/p/9546555.html

Neo4j 地铁关系网

二、数据准备

既然需要展示地铁关系,那么首先需要的就是北京所有地铁站的信息,以及站点之间的关系,距离,耗时。搜索了一圈,最后在北京地铁官方网站,发现了全部地铁线路,站点名称,站点与站点之间距离等信息。但是缺少了具体站点与站点之间的乘车耗时,行吧,先将就着用吧!具体数据样例如下:

Neo4j 地铁关系网

数据来源地址:https://www.bjsubway.com/station/zjgls/#

站点关系

一共18条线路,一顿复制粘贴和 Notepad++ 文本替换之后,我们得到了一个 Excel文件,包含了所有站点之间的关系数据,如下:

Neo4j 地铁关系网

获取站点

复制所有站点进入Excel文件的某一个sheet,选择数据去重,得到所有站点名称。

Neo4j 地铁关系网

处理CSV

将站点关系与站点数据处理成CSV文件格式,方便导入 Neo4j 数据库中,建立图节点与关系。操作也就是 notepad++ 替换‘ ’为‘,’,另存为 .CSV 文件,具体得到下列文件。(因为方便 Neo4j 数据库不同的路线显示不同的颜色,我特地将站点关系数据拆解成了多个地铁线的CSV文件,如果不考虑显示,可以一个CSV文件,导入站点关系即可)

Neo4j 地铁关系网

备注:将所有CSV文件,放入 Neo4j 安装目录下的 import 文件夹中(没有就新建),如下:

Neo4j 地铁关系网

文件下载地址:https://files-cdn.cnblogs.com/files/jstarseven/subway.zip

三、建立地铁关系网

Neo4j 支持导入本地以及网络资源中的 CSV 文件数据,并且可以从CSV文件数据中,直接建立图形节点以及节点关系。具体 cypher 语句,如下:

建立地铁站点

LOAD CSV WITH HEADERS  FROM "file:///station.csv" AS line
MERGE (p:Station{id:line.id,name:line.name});

建立站点连接

LOAD CSV WITH HEADERS FROM "file:///line1.csv" AS line1
match (from1:Station{name:line1.sn}),(to1:Station{name:line1.en})
merge (from1)-[r1:一号线{jl:line1.jl,xl:line1.xl}]->(to1);

LOAD CSV WITH HEADERS FROM "file:///line2.csv" AS line2
match (from2:Station{name:line2.sn}),(to2:Station{name:line2.en})
merge (from2)-[r2:二号线{jl:line2.jl,xl:line2.xl}]->(to2)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值