Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Point in polygon using shapely?

I am running the following script which I believe should be returning TRUE for the point being in the polygon but it is returning 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))

When I plot the polygon and point in Matlab I get the following shape

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()

Any idea why the shapely script is returning FALSE?

like image 274
user2512696 Avatar asked Jun 09 '26 09:06

user2512696


1 Answers

What you are testing is whether your point is on the object LineString.

If you want to test that the point is in the polygon you must use the contains methods of class 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))

ouput

True

see https://shapely.readthedocs.io/en/latest/manual.html

like image 143
PilouPili Avatar answered Jun 10 '26 21:06

PilouPili



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!