# Transbigdata Getdata

> 使用 TransBigData 获取公共交通和地理数据。适用于获取公交线路站点、行政区划边界、等时圈分析等任务。

- Skill: `ni1o1/transbigdata-getdata` (Agent Skill)
- Install (CLI): `npx skillmds@latest add ni1o1/transbigdata-getdata`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ni1o1/transbigdata-getdata/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: ni1o1 (https://skillmd.com/u/ni1o1)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/ni1o1/transbigdata-getdata

---


# TransBigData 数据获取指南

## 安装

```bash
pip install transbigdata
```

## API 密钥配置

部分功能需要地图 API 密钥：

```python
import transbigdata as tbd

# 高德地图（用于获取行政区划、等时圈等）
# 在高德开放平台注册获取

# Mapbox（用于底图和等时圈）
tbd.set_mapboxtoken('your_mapbox_token')
```

## 核心函数

### 1. 获取公交数据 - `getbusdata()`

获取中国城市的公交线路和站点数据。

```python
# 获取深圳 M433 路公交数据
line, stop = tbd.getbusdata(
    city='深圳',
    keywords=['M433'],
    accurate=True,       # 精确匹配
    timeout=20
)
# line: 线路 GeoDataFrame (WGS84)
# stop: 站点 GeoDataFrame (WGS84)
```

**获取多条线路**:

```python
line, stop = tbd.getbusdata(
    city='深圳',
    keywords=['M433', '1', '2', '地铁1号线'],
    accurate=False  # 模糊匹配
)
```

### 2. 获取行政区划 - `getadmin()`

获取中国行政区划边界数据。

```python
# 获取深圳市边界
admin, districts = tbd.getadmin(
    keyword='深圳',
    ak='your_amap_key',          # 高德 API Key
    jscode='your_jscode',        # 高德安全密钥（可选）
    subdistricts=True,           # 是否获取下级区划
    timeout=20
)
# admin: 行政区边界 GeoDataFrame (WGS84)
# districts: 下级区划信息 DataFrame
```

**按行政代码获取**:

```python
admin, districts = tbd.getadmin(
    keyword='440300',  # 深圳市行政代码
    ak='your_amap_key'
)
```

### 3. 高德等时圈 - `get_isochrone_amap()`

获取指定点的公交可达范围。

```python
isochrone = tbd.get_isochrone_amap(
    lon=114.05,           # 起点经度 (WGS84)
    lat=22.55,            # 起点纬度 (WGS84)
    reachtime=30,         # 可达时间（分钟）
    ak='your_amap_key',
    mode=2,               # 0=公交, 1=地铁, 2=公交+地铁
    timeout=20
)
# 返回 GeoDataFrame
```

### 4. Mapbox 等时圈 - `get_isochrone_mapbox()`

使用 Mapbox 获取等时圈（支持驾车/步行/骑行）。

```python
# 先设置 token
tbd.set_mapboxtoken('your_mapbox_token')

isochrone = tbd.get_isochrone_mapbox(
    lon=114.05,
    lat=22.55,
    reachtime=15,                      # 分钟
    mode='driving',                    # 'driving', 'walking', 'cycling'
    timeout=20
)
```

## 完整示例

### 示例 1: 获取并可视化公交线路

```python
import matplotlib.pyplot as plt
import transbigdata as tbd

# 获取深圳地铁1号线数据
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: 行政区划与栅格叠加

```python
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'
)

# 在各区内生成 500 米栅格
grid, params = tbd.area_to_grid(admin, accuracy=500)

# 空间连接
grid_with_district = gpd.sjoin(grid, districts_gdf, how='left')
```

### 示例 3: 等时圈分析

```python
import matplotlib.pyplot as plt
import transbigdata as tbd

# 福田CBD位置
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 密钥获取

### 高德地图

1. 访问 https://lbs.amap.com
2. 注册并创建应用
3. 获取 Web服务 API Key

### Mapbox

1. 访问 https://www.mapbox.com
2. 注册并创建 token
3. 使用 `tbd.set_mapboxtoken()` 设置

## 使用建议

1. **公交数据**:
   - `accurate=True` 用于精确匹配特定线路
   - `accurate=False` 用于批量获取相似线路

2. **行政区划**:
   - 建议缓存获取的数据，避免重复请求
   - 可使用行政代码精确获取

3. **等时圈**:
   - 高德等时圈更适合中国城市公交分析
   - Mapbox 适合驾车/步行/骑行分析

4. **请求频率**:
   - 注意 API 调用频率限制
   - 批量获取时添加适当延时

## 参考文档

完整文档: https://transbigdata.readthedocs.io/en/latest/getbusdata.html

