【发布时间】:2013-03-07 00:46:18
【问题描述】:
我想将多边形的值合并到一个精细的规则网格中。 例如,我有以下坐标:
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 非常慢)
【问题讨论】:
-
看看你之前的问题,它有一个有用的数字来显示比例,似乎每个网格像素都应该与一个多边形相关联,在这种情况下,你可以找到网格像素的中心,并将其与最近的多边形中心相关联。
-
这是一个很好的观点。不幸的是,一些多边形共享是网格像素的很大一部分,因此我取它们的平均值。我上面没有提到的是,我将落入一个网格像素的所有值相加,然后从总数中取平均值。我认为这更现实一些。
-
只是忘了...通过为每个网格像素找到最近的多边形中心,计算应该会显着提高吗?所以我认为最好反过来。
-
我不是专家,但我认为匹配距离比计算重叠要快得多。我在我的研究中做了类似的事情,它并不太慢,但我只有大约 1k 个粒子。
-
我肯定会更多地研究使用距离,也许我弄错了。虽然,目前上述代码并未计算任何重叠。到目前为止,它只需要 1 秒,因为它只是分配值。此外,多边形看起来不像正方形,因此中心可能比其他边更靠近某些边。