



data = (pd.read_excel(r'上海市地铁.xlsx').assign(location=lambda df: df['lon'].apply(lambda x: f'{x:.6f}') + ',' + df['lat'].apply(lambda x: f'{x:.6f}')).groupby('line').agg(origin=('location', 'first'), destination=('location', 'last')).reset_index())data

import requestsdef get_subway_lines(origin, destination, city, key):"""获取轨道线网"""url = 'https://restapi.amap.com/v3/direction/transit/integrated'# 定义高德路径规划API参数params = {"origin": origin,"destination": destination,"city": city,"output": "json","strategy": "2","key": key}response = requests.get(url, params=params).json()with open(r'response_10号线.json', 'w', encoding='utf-8') as file:# 将JSON数据写入文件json.dump(response, file, ensure_ascii=False, indent=4)get_subway_lines('121.590411,31.351311', '121.355336,31.165417', '3100', '你的key')

import jsonimport geopandas as gpdfrom shapely.geometry import LineString, Pointwith open(r'response_10号线.json', encoding='utf-8') as file:response = json.load(file)# 获取线路的polylinepolyline = response['route']['transits'][0]['segments'][0]['bus']['buslines'][0]['polyline']# 获取线路名称name = response['route']['transits'][0]['segments'][0]['bus']['buslines'][0]['name']subway_line = []# 遍历线串的每个点for line in polyline.split(';'):# 假设每个点的坐标由逗号分隔coords = line.split(',')# 创建一个Point对象,并将其添加到LineString对象中subway_line.append((float(coords[0]), float(coords[1])))# 现在subway_line包含了所有点的坐标data = gpd.GeoDataFrame({'name': [name],'geometry': [LineString(subway_line)]}, crs='epsg:4326')data.to_file(r'subway_line1.shp', driver='ESRI Shapefile', encoding='utf-8')

大家可以思考一下,怎么利用之前获取的地铁站点数据,进行批量获取地铁线路。