| name | transbigdata-grid |
| description | 使用 TransBigData 库进行地理数据栅格化处理。适用于将GPS轨迹数据映射到栅格、生成矩形/三角形/六边形栅格、Geohash编码、栅格参数优化等空间数据分析任务。 |
TransBigData 栅格化功能指南
TransBigData 是一个用于交通时空大数据处理的 Python 库。本 skill 指导如何使用其栅格化功能。
安装
pip install transbigdata
默认配置
推荐使用方形栅格(矩形栅格),常用精度:
- 500米栅格:
accuracy=500 - 适合城市级别分析,平衡精度与计算效率
- 1公里栅格:
accuracy=1000 - 适合区域级别分析,数据量较小时使用
import transbigdata as tbd
params = tbd.area_to_params(bounds, accuracy=500)
params = tbd.area_to_params(bounds, accuracy=1000)
核心概念
栅格化将连续的地理空间划分为离散的网格单元,便于数据聚合和分析。TransBigData 支持三种栅格类型:
- 矩形栅格 (rect): 默认推荐,计算效率高,适合大多数场景
- 三角形栅格 (tri): 适合特定空间分析
- 六边形栅格 (hexa): 各向同性,适合邻域分析
核心函数
1. 生成栅格参数 - area_to_params()
根据研究区域生成栅格化参数。
import transbigdata as tbd
bounds = [lon_min, lat_min, lon_max, lat_max]
params = tbd.area_to_params(bounds, accuracy=500)
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()
在指定区域内生成栅格几何对象。
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。
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获取栅格中心坐标。
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生成几何多边形。
data['geometry'] = tbd.grid_to_polygon(
[data['LONCOL'], data['LATCOL']],
params
)
import geopandas as gpd
grid_gdf = gpd.GeoDataFrame(data, geometry='geometry', crs='EPSG:4326')
6. 栅格映射到区域 - grid_to_area()
将栅格数据映射到行政区域等地理多边形。
result = tbd.grid_to_area(grid_data, area_gdf, params)
7. 栅格参数优化 - grid_params_optimize()
优化栅格参数以提高数据分析质量。
optimized_params = tbd.grid_params_optimize(
trajectory_data,
params,
method='centerdist'
)
优化方法:
centerdist: 最小化点到栅格中心的距离
gini: 优化数据分布均匀性
gridscount: 优化栅格数量
Geohash 编码函数
编码 - geohash_encode()
data['geohash'] = tbd.geohash_encode(
data['longitude'],
data['latitude'],
precision=6
)
解码 - geohash_decode()
data['lon'], data['lat'] = tbd.geohash_decode(data['geohash'])
生成 Geohash 栅格 - geohash_togrid()
data['geometry'] = tbd.geohash_togrid(data['geohash'])
完整示例:出租车数据栅格化分析
import pandas as pd
import geopandas as gpd
import transbigdata as tbd
data = pd.read_csv('taxi_data.csv')
bounds = [113.75, 22.4, 114.62, 22.86]
params = tbd.area_to_params(bounds, accuracy=500)
data['LONCOL'], data['LATCOL'] = tbd.GPS_to_grid(
data['longitude'],
data['latitude'],
params
)
grid_agg = data.groupby(['LONCOL', 'LATCOL']).size().reset_index(name='count')
grid_agg['geometry'] = tbd.grid_to_polygon(
[grid_agg['LONCOL'], grid_agg['LATCOL']],
params
)
grid_gdf = gpd.GeoDataFrame(grid_agg, geometry='geometry', crs='EPSG:4326')
grid_gdf.plot(column='count', cmap='hot', legend=True)
使用建议
- 栅格精度选择(推荐方形栅格):
- 500米: 城市交通分析、出租车/共享单车热点分析(默认推荐)
- 1公里: 区域宏观分析、跨城市比较
- 栅格类型: 优先使用矩形栅格(method='rect'),计算效率最高
- 参数优化: 对于精确分析,使用
grid_params_optimize() 优化参数
- 内存管理: 处理大数据时,先用采样数据确定参数,再处理全量数据
常见问题
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