AgentSkillsCN

transbigdata-grid

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

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

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