Точка в многоугольнике, используя стройные? - PullRequest
0 голосов
/ 11 сентября 2018

Я запускаю следующий скрипт, который, по моему мнению, должен возвращать TRUE для точки в многоугольнике, но он возвращает FALSE.

from shapely import geometry

polygon = [(-1571236.8349707182, 8989180.222117377), (1599362.9654156454, 8924317.946336618), (-1653179.0745812152, 8922145.163675062), (-1626237.6614402141, 8986445.107619021)]

Point_X = -1627875.474
Point_Y = 8955472.968

line = geometry.LineString(polygon)
point = geometry.Point(Point_X, Point_Y)

print(line.contains(point))

Когда я строю полигон и точку в Matlab, я получаюследующая форма

enter image description here

from matplotlib import pylab as plt
poly = [[-1571236.8349707182, 8989180.222117377],
    [1599362.9654156454, 8924317.946336618],
    [-1653179.0745812152, 8922145.163675062],
    [-1626237.6614402141, 8986445.107619021]]

x = [point[0] for point in poly]
y = [point[1] for point in poly]

p1 = [-1627875.474, 8955472.968]
p2 = [-1627875.474, 8955472.968]
plt.plot(x,y,p1[0],p1[1],'*r',p2[0],p2[1],'*b')
plt.show()

Есть идеи, почему фигурный скрипт возвращает FALSE?

1 Ответ

0 голосов
/ 11 сентября 2018

Вы проверяете, находится ли ваша точка на объекте LineString.

Если вы хотите проверить, находится ли точка в многоугольнике, вы должны использовать contains методы класса Polygon

from shapely import geometry

polygon = [(-1571236.8349707182, 8989180.222117377), (1599362.9654156454, 8924317.946336618), (-1653179.0745812152, 8922145.163675062), (-1626237.6614402141, 8986445.107619021)]

Point_X = -1627875.474
Point_Y = 8955472.968

line = geometry.LineString(polygon)
point = geometry.Point(Point_X, Point_Y)
polygon = geometry.Polygon(line)

print(polygon.contains(point))

выход

True

см. https://shapely.readthedocs.io/en/latest/manual.html

...