Point in polygon using shapely?

10,423

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

Share:
10,423

Related videos on Youtube

user2512696
Author by

user2512696

Updated on June 04, 2022

Comments

  • user2512696
    user2512696 almost 2 years

    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?

    • Qwerty
      Qwerty over 5 years
      It might be because your shape isnt closed. It doesn't know if it's convex or concave, so it can't really make a shape out of what you've given it. You might need to make sure it begins and ends at the same point.
    • user2512696
      user2512696 over 5 years
      I tried that -- unfortunately, I get the same answer (FALSE) when I add the beginning point as a fifth coordinate as well.
  • user2512696
    user2512696 over 5 years
    That works! Thanks so much -- I misunderstood the LineString object.