我想从二进制数据中提取代表海岸线的有序多边形(土地1,水0)。目的是通过获取从点A开始并返回点A的数组来描述多边形的海岸线。
我使用scipy.ndimage.binary_erosion
遵循了此方法,如下所述:
Isolating coastal grids using convolving window (python)
要提取点,我在经度和纬度数组之外的网格上使用了布尔矩阵:
# Get Coastline
erosion = scipy.ndimage.binary_erosion(waterlevel)
coast = waterlevel != erosion
# Read out Coastline-Points
m_lon, m_lat = np.meshgrid(lons,lats)
coastline_points = np.dstack((m_lon[coast],m_lat[coast]))
我卡住的部分是按有序方式提取点,提取多边形。 我的方法像我期望的那样工作,但是很明显它将连接不同的多边形。
def distance(point, array1, array2):
dist = (point[0]-array1[:])**2 + (point[1]-array2[:])**2
return np.argmin(dist)
def sort_it(start,array1,array2):
queue = [start]
result = []
while array1.size > 0:
point = queue.pop(0)
idx = distance(point,array1,array2)
queue.append((array1[idx],array2[idx]))
result.append(point)
array1 = array1[np.arange(len(array1))!=idx]
array2 = array2[np.arange(len(array2))!=idx]
return result
那我怎样才能正确提取多边形呢?
谢谢。