基于transbigdata包获取交通线路和站点的邻接表及shp文件
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!