Currently there are two helpful utility functions here.
-
Point-in-polygon test
-
Random point generator. Right now it performs better if the polygon covers a large portion of its bounding box. The test is performed using this algorithm.
- Generate a bounding box
- Generate a random point within this bounding box
- Perform a point-in-polygon test on this point. If the test succeeds, return the point, if not loop to step a and perform again.
** If anyone know of a better way to do above, let me know. I'd love to hear some better ideas especially when dealing with complex concave polygons.
USAGE:
Point-in-polygon test:
polygon = Polygon((0,0), (0,4), (4,4), (4,0), (0,0))
point = geo.Point(2,2)
assert polygon.contains(geo.Point(2,2))
Random point within a polygon
polygon = Polygon( geo.LatLon(42.39321,-82.92114),
geo.LatLon(42.39194,-82.91669),
geo.LatLon(42.39147,-82.91796),
geo.LatLon(42.39090,-82.91974),
geo.LatLon(42.39321,-82.92114))
point = polygon.random_point()
assert polygon.contains(point)
INSTALLATION: You can install the package either by cloning this repository and running the standard
python setup.py install
or install from pypi
pip install geo-utils