python - Python:创建一个网格并计算每个网格单元格中的点数
问题描述
我有一个包含两列的地理数据框:几何和类别。
几何列包含每个点的 x 和 y 坐标,类别列包含每个点的分类值。
我正在尝试创建一个网格,然后使用 Python 计算每个网格单元内的点数。最终目标是创建网格单元中计数的基本直方图(例如 plt.hist())。
到目前为止,我有以下代码,但是,当我运行代码时,它似乎只是挂起......或者它真的非常低效。
我要使用的网格单元是 1000 m x 1000 m(因此每个单元中心的 +500 和 -500)。
有谁知道如何网格化然后计算每个网格单元中的点数?
points_df.head()
Out[1]:
category geometry
0 cat POINT (476755.37 173256.16)
1 cat POINT (459671.16 268477.14)
2 cat POINT (516320.74 200363.71)
3 cat POINT (505964.05 202886.12)
4 cat POINT (442114.96 290854.97)
#calculate grid cell centers
x_cen = np.linspace(500, 659500, 660)
y_cen = np.linspace(500, 1059500, 1060)
cell_centers = []
for x in x_cen:
for y in y_cen:
cell_centers.append({'center': (x, y)})
#create dataframe of cell centers
grid_df = pd.DataFrame(cell_centers)
#create an empty column to hold the counts per cell
grid_df['counts'] = [0 for n in range(len(grid_df))]
#count the number of points that fall within each grid cell
for index1, row1 in grid_df.iterrows():
for index2, row2 in points_df.iterrows():
if row2.geometry.centroid.x > row1.center[0] - 500 and row2.geometry.centroid.x < row1.center[0] + 500 and row2.geometry.centroid.y > row1.center[1] - 500 and row2.geometry.centroid.y < row1.center[1] + 500:
if row2.category == 'cat':
row1.counts += 1
我将不胜感激任何帮助或想法!
解决方案
推荐阅读
- javascript - 无法使用 Wordpress Media Rest API 从 React 上传图像
- ssl - Adafruit MQTT 库错误连接失败
- location - 我想从 whatsapp 检索位置信息
- eclipse - Eclipse 4.12 使用热键注释掉 .gradle 文件中的多行
- javascript - 相机胶卷功能获取重复图像
- unicode - 每个代码点都有对应的名称吗?
- python - 如何在plolty3.10中绘制排序条形图
- postgresql - 使用非可合并连接和非哈希连接条件连接时包括不匹配的记录
- angular - 如何在 Ionic 中将 await 与 post 请求一起使用
- c++ - 为什么允许拥有一个自身具有不完整类型静态成员的类?