| name | transbigdata-getdata |
| description | 使用 TransBigData 获取公共交通和地理数据。适用于获取公交线路站点、行政区划边界、等时圈分析等任务。 |
TransBigData 数据获取指南
安装
pip install transbigdata
API 密钥配置
部分功能需要地图 API 密钥:
import transbigdata as tbd
tbd.set_mapboxtoken('your_mapbox_token')
核心函数
1. 获取公交数据 - getbusdata()
获取中国城市的公交线路和站点数据。
line, stop = tbd.getbusdata(
city='深圳',
keywords=['M433'],
accurate=True,
timeout=20
)
获取多条线路:
line, stop = tbd.getbusdata(
city='深圳',
keywords=['M433', '1', '2', '地铁1号线'],
accurate=False
)
2. 获取行政区划 - getadmin()
获取中国行政区划边界数据。
admin, districts = tbd.getadmin(
keyword='深圳',
ak='your_amap_key',
jscode='your_jscode',
subdistricts=True,
timeout=20
)
按行政代码获取:
admin, districts = tbd.getadmin(
keyword='440300',
ak='your_amap_key'
)
3. 高德等时圈 - get_isochrone_amap()
获取指定点的公交可达范围。
isochrone = tbd.get_isochrone_amap(
lon=114.05,
lat=22.55,
reachtime=30,
ak='your_amap_key',
mode=2,
timeout=20
)
4. Mapbox 等时圈 - get_isochrone_mapbox()
使用 Mapbox 获取等时圈(支持驾车/步行/骑行)。
tbd.set_mapboxtoken('your_mapbox_token')
isochrone = tbd.get_isochrone_mapbox(
lon=114.05,
lat=22.55,
reachtime=15,
mode='driving',
timeout=20
)
完整示例
示例 1: 获取并可视化公交线路
import matplotlib.pyplot as plt
import transbigdata as tbd
line, stop = tbd.getbusdata(
city='深圳',
keywords=['地铁1号线'],
accurate=True
)
fig, ax = plt.subplots(figsize=(12, 8))
bounds = line.total_bounds
bounds = [bounds[0]-0.05, bounds[1]-0.05, bounds[2]+0.05, bounds[3]+0.05]
tbd.plot_map(plt, bounds, zoom=12, style=4)
line.plot(ax=ax, color='blue', linewidth=3, label='线路')
stop.plot(ax=ax, color='red', markersize=50, label='站点')
plt.legend()
plt.title('深圳地铁1号线')
plt.show()
示例 2: 行政区划与栅格叠加
import pandas as pd
import geopandas as gpd
import transbigdata as tbd
admin, districts = tbd.getadmin(
keyword='深圳',
ak='your_amap_key',
subdistricts=True
)
district_list = []
for _, row in districts.iterrows():
d, _ = tbd.getadmin(keyword=row['adcode'], ak='your_amap_key')
district_list.append(d)
districts_gdf = gpd.GeoDataFrame(
pd.concat(district_list, ignore_index=True),
crs='EPSG:4326'
)
grid, params = tbd.area_to_grid(admin, accuracy=500)
grid_with_district = gpd.sjoin(grid, districts_gdf, how='left')
示例 3: 等时圈分析
import matplotlib.pyplot as plt
import transbigdata as tbd
center_lon, center_lat = 114.05, 22.55
iso_15 = tbd.get_isochrone_amap(center_lon, center_lat, 15, ak='your_key', mode=2)
iso_30 = tbd.get_isochrone_amap(center_lon, center_lat, 30, ak='your_key', mode=2)
iso_45 = tbd.get_isochrone_amap(center_lon, center_lat, 45, ak='your_key', mode=2)
fig, ax = plt.subplots(figsize=(12, 10))
bounds = iso_45.total_bounds
bounds = [bounds[0]-0.05, bounds[1]-0.05, bounds[2]+0.05, bounds[3]+0.05]
tbd.plot_map(plt, bounds, zoom=11, style=4)
iso_45.plot(ax=ax, alpha=0.3, color='blue', label='45分钟')
iso_30.plot(ax=ax, alpha=0.4, color='green', label='30分钟')
iso_15.plot(ax=ax, alpha=0.5, color='red', label='15分钟')
ax.scatter([center_lon], [center_lat], c='black', s=100, zorder=5, label='起点')
plt.legend()
plt.title('公交等时圈分析')
plt.show()
API 密钥获取
高德地图
- 访问 https://lbs.amap.com
- 注册并创建应用
- 获取 Web服务 API Key
Mapbox
- 访问 https://www.mapbox.com
- 注册并创建 token
- 使用
tbd.set_mapboxtoken() 设置
使用建议
-
公交数据:
accurate=True 用于精确匹配特定线路
accurate=False 用于批量获取相似线路
-
行政区划:
- 建议缓存获取的数据,避免重复请求
- 可使用行政代码精确获取
-
等时圈:
- 高德等时圈更适合中国城市公交分析
- Mapbox 适合驾车/步行/骑行分析
-
请求频率:
- 注意 API 调用频率限制
- 批量获取时添加适当延时
参考文档
完整文档: https://transbigdata.readthedocs.io/en/latest/getbusdata.html