gpt4 book ai didi

python - 在多边形内生成坐标

转载 作者:行者123 更新时间:2023-11-28 17:48:04 25 4
gpt4 key购买 nike

我想将多边形的值合并到一个精细的规则网格中。例如,我有以下坐标:

data = 2.353
data_lats = np.array([57.81000137, 58.15999985, 58.13000107, 57.77999878])
data_lons = np.array([148.67999268, 148.69999695, 148.47999573, 148.92999268])

我的常规网格如下所示:

delta = 0.25
grid_lons = np.arange(-180, 180, delta)
grid_lats = np.arange(90, -90, -delta)
llx, lly = np.meshgrid( grid_lons, grid_lats )
rows = lly.shape[0]
cols = llx.shape[1]
grid = np.zeros((rows,cols))

现在我可以很容易地找到对应于我的多边形中心的网格像素:

centerx, centery = np.mean(data_lons), np.mean(data_lats)
row = int(np.floor( centery/delta ) + (grid.shape[0]/2))
col = int(np.floor( centerx/delta ) + (grid.shape[1]/2))
grid[row,col] = data

但是,可能有几个网格像素仍然与多边形相交。因此,我想在我的多边形内生成一堆坐标(data_lons、data_lats)并像以前一样找到它们对应的网格像素。您是否建议随机或系统地生成坐标?我失败了,但仍在努力。

注意:一个数据集包含大约 80000 个多边形,因此它必须非常快(几秒钟)。这也是我选择这种方法的原因,因为它没有考虑重叠区域......(就像我之前的问题 Data binning: irregular polygons to regular mesh 非常慢)

最佳答案

我通过简单地计算角像素之间的坐标来研究一个快速而肮脏的解决方案。看一看:

dlats = np.zeros((data_lats.shape[0],4))+np.nan
dlons = np.zeros((data_lons.shape[0],4))+np.nan
idx = [0,1,3,2,0] #rearrange the corner pixels

for cc in range(4):
dlats[:,cc] = np.mean((data_lats[:,idx[cc]],data_lats[:,idx[cc+1]]), axis=0)
dlons[:,cc] = np.mean((data_lons[:,idx[cc]],data_lons[:,idx[cc+1]]), axis=0)

data_lats = np.column_stack(( data_lats, dlats ))
data_lons = np.column_stack(( data_lons, dlons ))

因此,红点代表原始角 - 蓝色点代表它们之间的中间像素。

enter image description here

我可以再做一次并包含中心像素 (geo[:,[4,9]])

dlats = np.zeros((data.shape[0],8))
dlons = np.zeros((data.shape[0],8))

for cc in range(8):
dlats[:,cc] = np.mean((data_lats[:,cc], geo[:,4]), axis=0)
dlons[:,cc] = np.mean((data_lons[:,cc], geo[:,9]), axis=0)

data_lats = np.column_stack(( data_lats, dlats, geo[:,4] ))
data_lons = np.column_stack(( data_lons, dlons, geo[:,9] ))

enter image description here

这非常有效,我可以像这样将每个点直接分配给相应的网格像素:

row = np.floor( data_lats/delta ) + (llx.shape[0]/2)
col = np.floor( data_lons/delta ) + (llx.shape[1]/2)

然而,最终分箱现在需要大约 7 秒!!!我怎样才能加快这段代码的速度:

for ii in np.arange(len(data)):
for cc in np.arange(data_lats.shape[1]):
final_grid[row[ii,cc],col[ii,cc]] += data[ii]
final_grid_counts[row[ii,cc],col[ii,cc]] += 1

关于python - 在多边形内生成坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15226755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com