2/10/2010

Deciding if a Point is Inside a Polygon - Pure Python

Method using matplotlib.nxutils

from matplotlib.nxutils import points_inside_poly
points_inside_poly([[0, 0], [0, 1]], [[1, 0], [1, 1], [0, 1]])


Using python-shapely (http://trac.gispython.org/lab/wiki/Shapely)
(http://gispython.org/shapely/manual.html#polygons)

$ sudo apt-get install python-shapely


in python,

from shapely.geometry import Polygon, Point
polygon2 = Polygon(((0, 0), (0, 1), (1, 1), (1, 0)))
print polygon2.contains(Point(0.1, 0.1)) # print True



another method :

ref : http://www.ariel.com.au/a/python-point-int-poly.html


#!/usr/bin/python
# determine if a point is inside a given polygon or not
# Polygon is a list of (x,y) pairs.
def point_inside_polygon(x,y,poly):

n = len(poly)
inside =False

p1x,p1y = poly[0]
for i in range(n+1):
p2x,p2y = poly[i % n]
if y > min(p1y,p2y):
if y <= max(p1y,p2y):
if x <= max(p1x,p2x):
if p1y != p2y:
xinters = (y-p1y)*(p2x-p1x)/(p2y-p1y)+p1x
if p1x == p2x or x <= xinters:
inside = not inside
p1x,p1y = p2x,p2y

return inside


.