将numpy中的meshgrid转换为Shapely的多边形对象

4
我正在尝试创建一个numpy网格并将其转换为Shapely多边形。我可以使用非常暴力的方法来解决这个问题,但感觉一定有一个好的技巧来完成这个任务,只是我还没有想出来。
以下代码可获得点的网格(假设在Jupyter中运行):
import numpy as np
from matplotlib import pyplot

fig = pyplot.figure(figsize=(10, 10))
ax = fig.add_subplot(111, aspect='equal')

x,y = np.mgrid[-5:-1:8j, 1:5:8j]
ax.plot(x,y, 'o', color='#000000')
pyplot.show()

现在需要将所有这些点水平和垂直地连接起来形成Shapely多边形。我最初的尝试是生成一个Shapely MultiLineString来绘制垂直和水平线,并对其执行polygonize操作。这仅导致创建主外部多边形-这是由于MultiLineString仅包含外部多边形上的顶点造成的。
我知道使用栅格和GDAL可能更合理,但我的情况要求最终结果为Shapely多边形。
感谢任何帮助解决方案的提供!
1个回答

7
你需要在构建 MultiLineString 之前定义每一行。
import numpy as np
from shapely.geometry import MultiLineString
from shapely.ops import polygonize

x = np.linspace(-5, -1, 8)
y = np.linspace(1, 5, 8)

hlines = [((x1, yi), (x2, yi)) for x1, x2 in zip(x[:-1], x[1:]) for yi in y]
vlines = [((xi, y1), (xi, y2)) for y1, y2 in zip(y[:-1], y[1:]) for xi in x]

grids = list(polygonize(MultiLineString(hlines + vlines)))

1
我该如何从网格中提取坐标? - Coddy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接