Point in polygon using shapely?

matlab, matplotlib, python, shapely

Solution

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

Problem

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 ``` 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?

Original source