Hi List,

I am looking into the Shapely library, it's great.  I do need to, however, 
access other functionality from libgeos, and have been flailing around trying 
coerce ctypes and GEOS to work together.  I was about to post a question... but 
found the/a solution, so I'm posting it here for posterity.

For it to work, shapely/geometry/__init__.py must include the following:

from base import geom_factory

---------------- test_polygonize.py --------------------
import shapely
from shapely.geometry import LineString, geom_factory
from shapely.wkt import loads
from shapely.geos import lgeos
from ctypes import byref, c_void_p, c_double

def Polygonize(linestr_array):
    """
    Finds all valid polygons defined by an array of LineString objects.
    """
    geom_array_type = c_void_p * len(linestr_array)
    geom_array = geom_array_type()
    
    for i,l in enumerate(linestr_array):
        geom_array[i] = l._geom
        #a = c_double()
        #lgeos.GEOSLength(l._geom, byref(a))
        #print l._geom, a
        
    product = lgeos.GEOSPolygonize(byref(geom_array), len(linestr_array))
    return geom_factory(product)

def _test():
    lines = [LineString([[0, 0], [1, 1]]),
             LineString([[0, 0], [0, 1]]),
             LineString([[0, 1], [1, 1]]),
             LineString([[1, 1], [1, 0]]),
             LineString([[1, 0], [0, 0]])]
    print Polygonize(lines)
    
if __name__ == "__main__":
    _test()
---------------------------------------------------


Cheers,

Nino


Nino Walker :: Urban Mapping, Inc. 
690 Fifth Street Suite 200 :: San Francisco CA 94107 
www.urbanmapping.com

_______________________________________________
Community mailing list
[email protected]
http://lists.gispython.org/mailman/listinfo/community

Reply via email to