# Transbigdata Grid

> 使用 TransBigData 库进行地理数据栅格化处理。适用于将GPS轨迹数据映射到栅格、生成矩形/三角形/六边形栅格、Geohash编码、栅格参数优化等空间数据分析任务。

- Skill: `ni1o1/transbigdata-grid` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add ni1o1/transbigdata-grid`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ni1o1/transbigdata-grid/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-grid

---


# TransBigData 栅格化功能指南

TransBigData 是一个用于交通时空大数据处理的 Python 库。本 skill 指导如何使用其栅格化功能。

## 安装

```bash
pip install transbigdata
```

## 默认配置

**推荐使用方形栅格（矩形栅格）**，常用精度：
- **500米栅格**: `accuracy=500` - 适合城市级别分析，平衡精度与计算效率
- **1公里栅格**: `accuracy=1000` - 适合区域级别分析，数据量较小时使用

```python
import transbigdata as tbd

# 500米方形栅格（默认推荐）
params = tbd.area_to_params(bounds, accuracy=500)

# 1公里方形栅格
params = tbd.area_to_params(bounds, accuracy=1000)
```

## 核心概念

栅格化将连续的地理空间划分为离散的网格单元，便于数据聚合和分析。TransBigData 支持三种栅格类型：
- **矩形栅格 (rect)**: **默认推荐**，计算效率高，适合大多数场景
- **三角形栅格 (tri)**: 适合特定空间分析
- **六边形栅格 (hexa)**: 各向同性，适合邻域分析

## 核心函数

### 1. 生成栅格参数 - `area_to_params()`

根据研究区域生成栅格化参数。

```python
import transbigdata as tbd

# 从边界框生成参数
bounds = [lon_min, lat_min, lon_max, lat_max]
params = tbd.area_to_params(bounds, accuracy=500)  # 500米精度

# 从 GeoDataFrame 生成参数
params = tbd.area_to_params(gdf, accuracy=500, method='rect')
```

**参数说明**:
- `location`: 边界框 [lon_min, lat_min, lon_max, lat_max] 或 GeoDataFrame
- `accuracy`: 栅格大小（米）
- `method`: 'rect'（矩形）、'tri'（三角形）、'hexa'（六边形）

**返回值**: 栅格参数字典或列表

### 2. 生成栅格 - `area_to_grid()`

在指定区域内生成栅格几何对象。

```python
# 生成矩形栅格
grid, params = tbd.area_to_grid(bounds, accuracy=500, method='rect')

# 生成六边形栅格
grid, params = tbd.area_to_grid(gdf, accuracy=500, method='hexa')
```

**返回值**: (GeoDataFrame 栅格, 栅格参数)

### 3. GPS点映射到栅格 - `GPS_to_grid()`

将经纬度坐标匹配到栅格ID。

```python
# 矩形栅格：返回 LONCOL, LATCOL
data['LONCOL'], data['LATCOL'] = tbd.GPS_to_grid(
    data['longitude'],
    data['latitude'],
    params
)

# 三角形/六边形栅格：返回单一索引
data['grid_id'] = tbd.GPS_to_grid(
    data['longitude'],
    data['latitude'],
    params
)
```

### 4. 获取栅格中心 - `grid_to_centre()`

根据栅格ID获取栅格中心坐标。

```python
# 矩形栅格
data['HBLON'], data['HBLAT'] = tbd.grid_to_centre(
    [data['LONCOL'], data['LATCOL']],
    params
)

# 三角形/六边形栅格
data['HBLON'], data['HBLAT'] = tbd.grid_to_centre(
    data['grid_id'],
    params
)
```

### 5. 生成栅格多边形 - `grid_to_polygon()`

根据栅格ID生成几何多边形。

```python
# 矩形栅格
data['geometry'] = tbd.grid_to_polygon(
    [data['LONCOL'], data['LATCOL']],
    params
)

# 创建 GeoDataFrame
import geopandas as gpd
grid_gdf = gpd.GeoDataFrame(data, geometry='geometry', crs='EPSG:4326')
```

### 6. 栅格映射到区域 - `grid_to_area()`

将栅格数据映射到行政区域等地理多边形。

```python
result = tbd.grid_to_area(grid_data, area_gdf, params)
```

### 7. 栅格参数优化 - `grid_params_optimize()`

优化栅格参数以提高数据分析质量。

```python
optimized_params = tbd.grid_params_optimize(
    trajectory_data,
    params,
    method='centerdist'  # 或 'gini', 'gridscount'
)
```

**优化方法**:
- `centerdist`: 最小化点到栅格中心的距离
- `gini`: 优化数据分布均匀性
- `gridscount`: 优化栅格数量

## Geohash 编码函数

### 编码 - `geohash_encode()`

```python
data['geohash'] = tbd.geohash_encode(
    data['longitude'],
    data['latitude'],
    precision=6  # 精度级别 1-12
)
```

### 解码 - `geohash_decode()`

```python
data['lon'], data['lat'] = tbd.geohash_decode(data['geohash'])
```

### 生成 Geohash 栅格 - `geohash_togrid()`

```python
data['geometry'] = tbd.geohash_togrid(data['geohash'])
```

## 完整示例：出租车数据栅格化分析

```python
import pandas as pd
import geopandas as gpd
import transbigdata as tbd

# 1. 加载数据
data = pd.read_csv('taxi_data.csv')

# 2. 定义研究区域边界
bounds = [113.75, 22.4, 114.62, 22.86]  # 深圳市范围

# 3. 生成栅格参数（500米精度）
params = tbd.area_to_params(bounds, accuracy=500)

# 4. 将GPS点映射到栅格
data['LONCOL'], data['LATCOL'] = tbd.GPS_to_grid(
    data['longitude'],
    data['latitude'],
    params
)

# 5. 按栅格聚合数据
grid_agg = data.groupby(['LONCOL', 'LATCOL']).size().reset_index(name='count')

# 6. 生成栅格几何
grid_agg['geometry'] = tbd.grid_to_polygon(
    [grid_agg['LONCOL'], grid_agg['LATCOL']],
    params
)

# 7. 创建 GeoDataFrame 并可视化
grid_gdf = gpd.GeoDataFrame(grid_agg, geometry='geometry', crs='EPSG:4326')
grid_gdf.plot(column='count', cmap='hot', legend=True)
```

## 使用建议

1. **栅格精度选择**（推荐方形栅格）:
   - **500米**: 城市交通分析、出租车/共享单车热点分析（默认推荐）
   - **1公里**: 区域宏观分析、跨城市比较
2. **栅格类型**: 优先使用矩形栅格（method='rect'），计算效率最高
3. **参数优化**: 对于精确分析，使用 `grid_params_optimize()` 优化参数
4. **内存管理**: 处理大数据时，先用采样数据确定参数，再处理全量数据

## 常见问题

**Q: 如何选择 Geohash 精度？**
A: 精度越高越精确但字符串越长。常用精度：
- 6: 约 1.2km × 0.6km
- 7: 约 150m × 150m
- 8: 约 38m × 19m

**Q: 栅格参数可以复用吗？**
A: 可以。使用 `grid_to_params()` 从已有栅格数据重新生成参数。

## 参考文档

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

