【大数据】城市公交网络分析与可视化(四):绘制城市公交(地铁)线路图

内容介绍

梗概:爬取公交路径坐标,处理成为符合高德地图Map Lab线形图的格式,通过该平台绘制公交(地铁)线路图等

一些必要的知识点可在该系列博客的其他内容中获得!

1 采用循环法获取线路名

怎么获取一个城市有哪些线路名?遍历前1000路公交。

有遗漏怎么办?想指点区域怎么办?见后文的“读取文本”法。

实际上遍历1000路公交基本能涵盖一个城市大多数公交线路,遗漏的很多也是一些特殊的路线。

代码

import requests
import json
import pandas as pd
import redef Bus_inf(city,line):global bus_num  #全局变量,用于计算公交数目try:#获取数据url = 'https://restapi.amap.com/v3/bus/linename?s=rsv3&extensions=all&key=a5b7479db5b24fd68cedcf24f482c156&output=json&city={}&offset=1&keywords={}&platform=JS'.format(city,line)r = requests.get(url).textrt = json.loads(r)#读取当前公交线路主要信息dt = {}dt['line_name'] = rt['buslines'][0]['name'] #公交线路名字dt['polyname'] = rt['buslines'][0]['polyline'] #获取行驶路径bus_num+=1 #有效公交数+1"""整理行车路径格式符合高德地图绘图工具的要求"""        b=re.split("[;]",dt['polyname'])res=""for i in range(len(b)):tmp=re.split("[,]",b[i])if len(res)==0:res=res+"["+tmp[0]+","+tmp[1]+"]"else:res=res+",["+tmp[0]+","+tmp[1]+"]"dt['polyname'] =resreturn pd.DataFrame(dt,index=[bus_num]) #下标index为“第几条公交线”except:return pd.DataFrame()  #读取数据失败,返空if __name__=="__main__":bus_num=0  #设置全局变量计算公交数目(通常默认就是0)city='苏州' #需要查询公交信息的城市for_num=1000 #遍历的线路数[1路,for_num路],通常公交线路数小于1000,具体可参考8684等网站all_buslines=pd.DataFrame()     for i in range(1,for_num+1):all_buslines=pd.concat([all_buslines,Bus_inf(city,str(i)+'路')])  #不加这个'路'可能优先获取地铁print("Bus_info函数遍历{}前{}路公交,有效公交线路数为:{}个的情况下:".format(city,for_num,bus_num))all_buslines.to_csv("{}前{}路公交(有效线路数:{})基本信息.csv".format(city,for_num,bus_num),index=False,encoding='utf-8-sig')

绘制结果欣赏
绘图平台是 高德开放平台|Map Lab
大城市数据量太大(如北京)高德读不了,可以删减一部分,或者分两次读入,但特别的卡…

平均一个城市五分钟出结果吧,什么是一劳永逸?这就叫一劳永逸!

厦门
写这么久的博客第一次知道咋去水印😁
在这里插入图片描述
苏州
在这里插入图片描述

上海
在这里插入图片描述

如果获取的是一个省的的公交,图片会是长什么样呢?(巨卡)
四川
在这里插入图片描述

成都

在这里插入图片描述
2 采用文本读取法获取线路名

请上8684等网站获取需要的公交线路名,前面的博客中提到很多次了,不赘述了。
代码

import requests
import json
import pandas as pd
import redef Bus_inf(city,line):global bus_num  try:url = 'https://restapi.amap.com/v3/bus/linename?s=rsv3&extensions=all&key=a5b7479db5b24fd68cedcf24f482c156&output=json&city={}&offset=1&keywords={}&platform=JS'.format(city,line)r = requests.get(url).textrt = json.loads(r)dt = {}dt['line_name'] = rt['buslines'][0]['name'] #公交线路名字dt['polyname'] = rt['buslines'][0]['polyline'] #获取行驶路径bus_num+=1 #有效公交数+1"""整理行车路径格式符合高德地图绘图工具的要求"""        b=re.split("[;]",dt['polyname'])res=""for i in range(len(b)):tmp=re.split("[,]",b[i])if len(res)==0:res=res+"["+tmp[0]+","+tmp[1]+"]"else:res=res+",["+tmp[0]+","+tmp[1]+"]"dt['polyname'] =resreturn pd.DataFrame(dt,index=[bus_num]) #下标index为“第几条公交线”except:return pd.DataFrame()  #读取数据失败,返回空if __name__=="__main__":bus_num=0  #设置全局变量数值(通常默认就是0)city='青岛' #需要查询公交信息的城市all_buslines=pd.DataFrame()     with open("公交线路.txt", "r", encoding="utf-8") as f:bus_name = f.readlines()bus_name = bus_name[0].split(",") for i in bus_name:  all_buslines=pd.concat([all_buslines,Bus_inf(city,i)]) print("Bus_info函数遍历{}前{}路公交,有效公交线路数为:{}个的情况下:".format(city,for_num,bus_num))all_buslines.to_csv("{}前{}路公交(有效线路数:{})基本信息.csv".format(city,for_num,bus_num),index=False,encoding='utf-8-sig')

结果
青岛市区所有线路
在这里插入图片描述

3 绘制地铁线路图

为什么前面绘制前面的公交图不采用多种颜色?因为线路很多的情况下,设置多个颜色效果也不是好(不好看)。但对于地铁图来说就挺理想的了。

这个方法和上面循环法类似,但记得要打开获取的结果,人工筛查一下数据。

其实这个模块我可以认真写写,专门再写篇博客的…emmmmmm…哪那么多时间呀(;´д`)ゞ

直接可执行代码

import requests
import json
import pandas as pd
import re
#或许公交信息:线路名、始发站、终点站、行车区间(坐标)、路程、行车区间直线距离
def Bus_inf(city,line):global bus_num  #全局变量,用于计算公交数目try:#获取数据url = 'https://restapi.amap.com/v3/bus/linename?s=rsv3&extensions=all&key=a5b7479db5b24fd68cedcf24f482c156&output=json&city={}&offset=1&keywords={}&platform=JS'.format(city,line)r = requests.get(url).textrt = json.loads(r)#读取当前公交线路主要信息dt = {}dt['line_name'] = rt['buslines'][0]['name']dt['polyname'] = rt['buslines'][0]['polyline'] bus_num+=1 #有效公交数+1b=re.split("[;]",dt['polyname'])res=""for i in range(len(b)):tmp=re.split("[,]",b[i])if len(res)==0:res=res+"["+tmp[0]+","+tmp[1]+"]"else:res=res+",["+tmp[0]+","+tmp[1]+"]"dt['polyname'] =resreturn pd.DataFrame(dt,index=[bus_num]) #下标index为“第几条公交线”except:return pd.DataFrame()  #读取数据失败,跳过if __name__=="__main__":bus_num=0  #设置全局变量数值(通常默认就是0)city='福州' #需要查询公交信息的城市for_num=20 #遍历的线路数[1路,for_num路],通常公交线路数小于1000,具体可参考8684等网站all_buslines=pd.DataFrame()     for i in range(1,for_num+1):all_buslines=pd.concat([all_buslines,Bus_inf(city,'地铁'+str(i)+'号线')])  #不加这个'路'可能优先获取地铁print("Bus_info函数遍历{}前{}条地铁,有效地铁线路数为:{}个的情况下:".format(city,for_num,bus_num))all_buslines.to_csv("{}前{}条地铁(有效线路数:{})基本信息.csv".format(city,for_num,bus_num),index=False,encoding='utf-8-sig')

青岛
注意:这里有的线路获取的数据不完整(如青岛地铁11号线),而且很多线路只是规划线路(目前未开通),故图片仅供参看!
在这里插入图片描述
北京
效果不好:有的线路有遗漏、且没有那么多颜色用来绘制
在这里插入图片描述

福州
福州地铁什么“地铁接驳车”挺多的。
在这里插入图片描述

4 获取地铁基本信息

之前博客公交车代码改一下就好了

import requests
import json
import pandas as pd
import time#自己写的用于记录时间函数
def record_time(flag):if flag==0:global t0t0=time.time()else:t1=time.time()print("用时:%.2fs"%(t1-t0))  print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))#获取公交基本信息
def get_station(cityname,line):global bus_num#1、获取当前公交线路数据url = 'https://restapi.amap.com/v3/bus/linename?s=rsv3&extensions=all&key=a5b7479db5b24fd68cedcf24f482c156&output=json&city={}&offset=1&keywords={}&platform=JS'.format(cityname,line)r = requests.get(url).textrt = json.loads(r)try:#2、读取当前公交线路主要信息dt = {}dt['line_name'] = rt['buslines'][0]['name'] #公交线路名字dt['start_stop'] = rt['buslines'][0]['start_stop'] #始发站dt['end_stop'] = rt['buslines'][0]['end_stop'] #终点站dt['bounds'] = rt['buslines'][0]['bounds'] #行车区间)dt['distance'] = rt['buslines'][0]['distance'] #全程长度#3、获取沿途站点站名、对应坐标和“第几站”信息station_name = []station_coords = []station_sequence = []for st in rt['buslines'][0]['busstops']:station_name.append(st['name'])station_coords.append(st['location'])station_sequence.append(st['sequence'])dt['station_name'] = station_name #沿途站点名dt['station_coords'] = station_coords #沿途站点坐标dt['station_sequence'] = station_sequence #沿途站点第几站bus_num+=1 #有效公交数+1return pd.DataFrame(dt)  #返回pd.DataFrame()类型except: #try语句部分出错进入此部分(一般为站点名错误)print('没有{}公交'.format(line)) #输出没有的公交线路名字,可省略return pd.DataFrame([])  #返回空的pd.DataFrame类型#获取当前城市所有公交基本信息:线路名、行车区间、全程长度、沿途站点及坐标
def Bus_info(city,for_num):all_bus=pd.DataFrame()for i in range(1,for_num+1):  all_bus=pd.concat([all_bus,get_station(city,'地铁'+str(i)+'号线')])  #不加这个'路'可能优先获取地铁print("Bus_info函数遍历{}前{}条地铁,有效地铁线路数为:{}个".format(city,for_num,bus_num))all_bus.to_csv("{}前{}条地铁(有效线路数:{})基本信息.csv".format(city,for_num,bus_num),index=False,encoding='utf-8-sig')if __name__=="__main__":record_time(0)#用于记录开始时间bus_num=0  #全局变量,计算有效遍历的公交数city='青岛' #需要查询公交信息的城市for_num=4 Bus_info(city,for_num)record_time(1)#用于记录结束时间并输出用时

在这里插入图片描述
同理,可以绘制站点散点图
在这里插入图片描述

5 通过geopandas包绘制路线图

这个方法需要安装 geopandas包 descartes包

(突然感觉,这篇博客博客完全可以拆分为5篇博客,这个系列完全可以拆分至少20篇,有点写累了)

考虑到这个方法有些内容我还不理解,就不放代码了

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/58065.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动驾驶轨迹预测/规划可视化工具

该可视化工具在ubuntu18.04下基于ros实现。该文档基于EPSILON的README操作流程完成。 参考文献:EPSILON: An Efficient Planning System for Automated Vehicles in Highly Interactive Environments github:GitHub - HKUST-Aerial-Robotics/EPSILON 目…

图扑数字孪生智慧公路,构建互联协同智能交通系统

前言 随着智能交通科技和产业的发展,我国正在形成一个安全可靠、便捷高效、绿色智能、开放共享的现代化综合交通运输体系。《“十四五”现代综合交通运输体系发展规划》明确提出,加快智能技术深度推广应用,坚持创新驱动发展,推动…

【腾讯地图API】制作多途经点的线路导航——路线坐标规划

面试:你懂什么是分布式系统吗?Redis分布式锁都不会?>>> 最近百度地图转腾讯地图以前用过百度地图实现路线坐标规划,不过搜索了一些没有搜索到腾讯地图的路线坐标规划,于是参数百度的思路写了个腾讯地图的路线坐标规划. 这两家地图…

GPT专业应用:自动撰写宣传稿

●图片由Lexica 生成,输入:Staff working on product promotion 宣传稿是指按照有关政策文件或相关精神,以宣传某种主张、某项工作、某件事情等为目的,为获得理解、支持而撰写的应用文。基本格式包含四个要素,分别是标…

百度AI 人工智能可以申请体验了,附登录方式

百度发布了一款名为“文心一言”的知识增强大语言 AI 模型, 它基于百度飞桨深度学习平台和文心知识增强大模型,旨在帮助人们从大量信息中挑选所需内容,获取灵感和知识,以使生活和工作更加便捷。该模型具有强大的中文语料库&#…

基于Python+AIML+Tornado的智能聊天机器人(NLP+深度学习)含全部工程源码+语料库 适合个人二次开发

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境Tornado 环境 模块实现1. 前端2. 后端3. 语料库4. 系统测试 其它资料下载 前言 本项目旨在利用AIML技术构建一个聊天机器人,实现用户通过聊天界面与机器人交互的功能。通过提供的工程源代码&#xf…

Midjourney官方中文版登陆QQ!25张免费额度,聊天框召唤机器人即可作画

丰色 发自 凹非寺量子位 | 公众号 QbitAI Breaking News!现在上QQ就能玩Midjourney了。 Midjourney AI微信号发布最新公告称: Midjourney官方中文版已开启内测。 在哪里测?QQ频道。每周一和周五晚6点,大家准时扫码进入&#xff0c…

js调用gpt3.5(支持流回显、高频功能)

参考链接:直接在前端调用 GPT-3 API 效果图: 查看在线demo(要梯子) 注意: 1. 需要apiKey,自用安全,不要给别人 2. 需要梯子 3. 选择稳定、人少的代理ip 4. 不要频繁切换ip,防止封号 5. api调用上限高&…

自媒体多平台助手——融媒宝

近些年来随着自媒体风越吹越大,更多的博主或者自媒体发布平台,都在建议自由职业者去做自媒体工作,性价比高时间自由,也越来越多向往自由的年轻人去选择自媒体工作,在家就可以根据自己的兴趣把自己的思想转化为自己的收…

自媒体多平台分发教程

自媒体平台现在风很大,已经是处在风口浪尖了,所以想要赚钱或者是想要实现自己个人价值的朋友们都不要放过这个难得的好机会。但是现在自媒体平台多种多样,如果只选择一个多自媒体平台去进行发布的话无疑是浪费的。创造出一篇属于自己的原创文…

自媒体平台操作手册,自媒体平台算法操作技巧详解

自媒体平台算法: 定位领域:历史、军事(最赚钱)发布时间: 00:00 2日推荐昵称:关键词寓意简介:直截了当、开门见山回头率:多次阅读流量:外部流量&#xff08…

ChatGPT还是挺强大的,今天测试了一个冒泡排序 代码写的还是很规范,未来低级程序员是不是要失业了 有点焦虑了

感兴趣的小伙伴可以自己注册体验(免费注册)。 注册连接:https://chatgptmirror.com?shareK36L42

大模型入坑指南 大厂vs初创公司

大模型竞争激烈,创业公司随时可能倒掉,造成项目烂尾,EB3.5已经跟国内其他模型拉开了差距… 人工智能是当前时代的重要热点之一,它正在改变着我们的生活和工作。在人工智能领域,有一种技术尤其引人注目,那就…

UE4中背景音乐的制作

首先将音乐的MP3格式转换为WAV格式,在格式工厂里实现。 然后就可以了。将做好的音频导入内容浏览器中, 在内容浏览器里面新建Sound Cue 再在场景当中右键place actor选中我们创建的Sound Cue即可 点击音频下的文字,进入属性面板&…

给音频添加背景音乐 GoldWave软件运用教程分享

简略录制了一段音频,试听成效之后觉得有些枯燥,我们可以给其添加一段背景音乐,从而烘托氛围。今天小编就来教大家运用GoldWave来为音频添加背景音乐,细致方法如下,请参考。 如何应用goldwave添加音频背景音乐? 翻开Go…

小程序背景音乐实现

好久没有做小程序,今天看到一个需求,要做一个页面,需要带背景音乐。我看了官方文档,觉得这方面写的很好,但是没有示例,所以就想写一篇相关文章记录一下,也可以帮到其他人。 需求分析 实现一个…

微信小程序背景音乐开发

wx.getBackgroundAudioManager() 背景音乐 wx.getBackgroundAudioManager() 推荐大家使用背景音乐不在使用audio audio播放音频加载时间长 体验需求达不到 相关文档 https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManage…

计算机ppt音乐,PPT制作-背景音乐最全面设置教程

有了好音乐,许多朋友们都不知道PPT背景音乐设置的方法,面对越来越多的朋友对PPT背景音乐设置的无从下手,我们下载吧就做了这期的专题,PPT背景音乐设置里,这应该是算目前最详细的设置教程了。 PPT背景音乐设置—如何在P…

html页面中如何添加背景音乐

如果我们要在html页面中添加背景音乐效果&#xff0c;可以使用如下几种方式。 方法一&#xff1a; 在html文件中添加如下代码即可&#xff08;音频文件根据需要进行更改&#xff09; 1234<audio autoplay"autoplay" controls"controls"loop"loop&q…

PyGame|给程序插入背景音乐

前言 上次圣诞节的时候尝试了用python画圣诞树&#xff0c;用pyqt6制作了gui窗口&#xff0c;把画圣诞树的代码打包成了一个小程序&#xff0c;觉得只有圣诞树过于单调&#xff0c;于是想着给程序加入一点背景音乐&#xff0c;更有节日氛围。看了大佬们的教程&#xff0c;最后…