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)
使用建议
- •栅格精度选择(推荐方形栅格):
- •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