使用高德路径规划API,获取轨道线网
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 requests
def 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 json
import geopandas as gpd
from shapely.geometry import LineString, Point
with open(r'response_10号线.json', encoding='utf-8') as file:
response = json.load(file)
# 获取线路的polyline
polyline = 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')

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