我有一个包含两列的地理数据框:几何和类别。
“几何”列包含每个点的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
我将不胜感激!