我有一个10 x 10网格,我想删除一个形状多边形之外的点:
import numpy as np
from shapely.geometry import Polygon, Point
from descartes import PolygonPatch
gridX, gridY = np.mgrid[0.0:10.0, 0.0:10.0]
poly = Polygon([[1,1],[1,7],[7,7],[7,1]])
#plot original figure
fig = plt.figure()
ax = fig.add_subplot(111)
polyp = PolygonPatch(poly)
ax.add_patch(polyp)
ax.scatter(gridX,gridY)
plt.show()
以下是结果图:
我希望最终结果如下:
我知道我可以将数组重新整形为100 x 2网格点阵列:
stacked = np.dstack([gridX,gridY])
reshaped = stacked.reshape(100,2)
我可以轻松地看到该点是否位于多边形内:
for i in reshaped:
if Point(i).within(poly):
print True
但我无法获取此信息并修改原始网格
答案 0 :(得分:2)
你已经非常接近;而不是打印True,您可以将点附加到列表中。
output = []
for i in reshaped:
if Point(i).within(poly):
output.append(i)
output = np.array(output)
x, y = output[:, 0], output[:, 1]
似乎Point.within
并未考虑位于多边形边缘的点是"在"它虽然。