多边形到二进制掩码
Polygon to binary mask
我使用 shapely.geometry 制作了一个多边形,然后将其放入 geopandas 数据框中。
我制作了一个与多边形区域大小相同的数组
我怎样才能把这个多边形变成一个二元掩码,这样我也可以把我的数组塑造成一个多边形?
感谢您的宝贵时间。
我明白了。不是最有效的方法,但它奏效了。
首先,我在网格上制作了一个蒙版,对不在多边形中的数据设置了 False(使用包含方法)。
其次,我将数组乘以该掩码,然后将 0 作为 NaN。
这是我的代码示例:
# g is anarray with flatten x y coordinates
g = np.stack([
xi.flatten(),
yi.flatten(),])
# Function to check if in polygon, return bool
def func1d(row, args):
return args.contains(Point(row[1], row[0]))
# Take mask array and apply along axis, poly is the polygon that we want to use
mask = np.apply_along_axis(func1d, 1, g, args=poly)
g[:,2] = g[:,2]*mask
g[g==0]=[np.NaN] # get 0 be nans (should be a better way to do this but was ok here)
output = g[~np.isnan(g).any(axis=1)] # filter to only save the polygon data
我使用 shapely.geometry 制作了一个多边形,然后将其放入 geopandas 数据框中。 我制作了一个与多边形区域大小相同的数组
我怎样才能把这个多边形变成一个二元掩码,这样我也可以把我的数组塑造成一个多边形?
感谢您的宝贵时间。
我明白了。不是最有效的方法,但它奏效了。
首先,我在网格上制作了一个蒙版,对不在多边形中的数据设置了 False(使用包含方法)。 其次,我将数组乘以该掩码,然后将 0 作为 NaN。
这是我的代码示例:
# g is anarray with flatten x y coordinates
g = np.stack([
xi.flatten(),
yi.flatten(),])
# Function to check if in polygon, return bool
def func1d(row, args):
return args.contains(Point(row[1], row[0]))
# Take mask array and apply along axis, poly is the polygon that we want to use
mask = np.apply_along_axis(func1d, 1, g, args=poly)
g[:,2] = g[:,2]*mask
g[g==0]=[np.NaN] # get 0 be nans (should be a better way to do this but was ok here)
output = g[~np.isnan(g).any(axis=1)] # filter to only save the polygon data