Удаление точек с сетчатой ​​сеткой вне многоугольника Shapely

У меня есть сетка 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

Но у меня возникают проблемы с получением этой информации и изменением исходной сетки

1 ответ

Решение

Вы уже довольно близки; вместо того, чтобы печатать 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 хотя точки, лежащие на краю многоугольника, не считаются "внутри" него.

Другие вопросы по тегам