今天给大家分享的是基于高德地图获取城市中的公交线路及站点的代码(哈哈 之前说不写这个了 想了想还是写了一下,最近玩LOL手游的时间有点多 荒废了公众号)。代码已经上传至GitHub,地址如下,一定要下载:https://github.com/Bardbo/get_bus_lines_and_stations_data_from_gaode
和之前调用高德API绘制等时圈数据原理相似,代码部分这次就不做过多的解释了,可以将项目下载下来后看看源码,主要是如下三个文件:
- get_bus_line_station_data_by_gaode.py
- line_station_data_to_shp.py
- main.py
快速使用
只需要运行main.py文件即可,在命令行中输入如下命令:
python .\main.py
这样就可以获得湖南省益阳市的公交线路数据和shp文件了,所得文件中yiyang_lines.csv为高德地图中公交线路原始数据,data not avaliable.log为未能获取成功的线路记录,data文件夹内是转换好的公交线路与站点的shp文件,坐标已经转换为WGS84了。
如果需要获取别的城市的数据,只需要将main.py中的城市名称以及高德APIKey换掉就好了(建议换成自己的key)。
其余代码文件介绍
get_bus_line_station_data_by_gaode.py
从我蹩脚的命名上大概可以看出这个文件是用来获取高德数据的。主要分为两个函数,一个是get_bus_line_name,另一个是get_line_station_data,前者用来从公交网上获取某一个城市的公交线路名称,后者基于前者获取得到的线路名称借助高德地图来获取线路的数据,包括坐标等。
公交网:http://www.gongjiao.com/
获取后的数据将会以追加的形式写入csv文件中,同时如果存在线路没能获取成功,则会将这些未成功的线路名字存到log文件中。
第一个函数的主要知识点为requests的使用,使用lxml库中的etree对网页源代码进行解析,使用xpath选择器获取想要的数据;第二个函数与之前文章等时圈数据获取相同,直接将高德API的响应结果当成字典进行所需数据的获取即可。
line_station_data_to_shp.py
前面获取的csv数据好像还是不太好用啊,那就给它变成shp文件吧,于是就写了这个转换的代码,具体的作用就是对csv文件进行处理,将高德坐标转换为WGS84坐标,然后使用shapefile库创建线路shp和站点shp。(当然此处使用别的库创建shp也行,此处的代码是很久之前借鉴了城市数据团的,因此没有对其进行更改)
将创建的shp在ArcGISPro中显示,结果如下:
结尾
本期推文并未进行详细的解释,这是因为和之前的几篇推文原理是相似的,具体的代码大家记得在GitHub中下载哈。