import pandas as pd
import numpy as np
import geopandas as gpd
import transbigdata as tbd
import json
import csv
import networkx as nx
#输入需要的城市
place='深圳'
#输入需要的线路
line_range=[14,15,16,20]
#遍历线路列表,挨个处理
for x in line_range:
try:
#使用transbigdata包获取线路和站点
#注:代码中所有使用文件路径的部分均需要自行设置路径
line,stop = tbd.getbusdata(place,['地铁{}号线'.format(x)])
print(stop)
#将返回的geodataframe文件保存为shp文件,可以用GIS直接打开
line.to_file('F:/test/shp文件/{}号线线路.shp'.format(x),driver='ESRI Shapefile',encoding='utf-8')#替换为自己的路径
stop.to_file('F:/test/shp文件/{}号线站点.shp'.format(x),driver='ESRI Shapefile',encoding='utf-8')#替换为自己的路径
#将geodataframe中的重要信息保存为csv文件
dataframe_stop = pd.DataFrame({'stationname':stop['stationnames'],'line_name':stop['linename'],'lon':stop['lon'],'lat':stop['lat']})
dataframe_line = pd.DataFrame({'linename':line['linename'],'line':line['line'],'geometry':line['geometry']})
num=int(len(stop))
dataframe_stop.head(num).to_csv("F:/test/站点信息{}号线.csv".format(x),index=False,sep=',',)#替换为自己的路径
dataframe_line.to_csv("F:/test/线路信息{}号线.csv".format(x),index=False,sep=',')#替换为自己的路径
data = pd.read_csv(r'F:/test/站点信息{}号线.csv'.format(x),sep=',',usecols=['stationname'])#替换为自己的路径
#使用transbigdata中的模块构建站点邻接表和距离信息
metroline_splited = tbd.split_subwayline(line,stop)
fro = metroline_splited['stationnames']
target = metroline_splited['stationnames1']
length = metroline_splited["length"]
dataframe_table = pd.DataFrame({'from':fro,'target':target,'length':length})
dataframe_table.to_csv('F:/test/总邻接表.csv',mode='a',index=False,sep=',',encoding='ANSI')
#未能成功获取报错并储存为txt文件
except (KeyError,AttributeError,FileNotFoundError):
print(r'{}号线未能成功获取'.format(x))
with open("F:/test/Errorlog.txt","a") as log:#替换为自己的路径
log.write(r'{}号线未能成功获取'.format(x))
log.write('\n')
log.close()
pass
continue
#根据总邻接表构建邻接矩阵(此步骤可有可无,看个人需求)
try:
relation_cp = pd.read_csv("F:/test/总邻接表.csv",usecols = ['from','target'],sep=',')#替换为自己的路径
relation_list = relation_cp.values.tolist()
print(relation_list)
member_dict = {}
member_index = 0
for name_tuple in relation_list:
for name in name_tuple:
if name in member_dict:
continue
member_dict[name] = member_index
member_index += 1
relation_matrix = [[0 for i in range(len(member_dict))]
for i in range(len(member_dict))]
for (x, y) in relation_list:
x_index = member_dict[x]
y_index = member_dict[y]
relation_matrix[x_index][y_index] = 1
print(relation_matrix)
with open("F:/test/总邻接矩阵.csv","a",newline='') as csvfile:#替换为自己的路径
writer = csv.writer(csvfile, delimiter=',')
for i in relation_matrix:
writer.writerow(i)
csvfile.close()
except (KeyError,AttributeError,FileNotFoundError):
pass