Hi Pascal, I don't see why we can't try to use UnaryUnion when it's available. Can you add this to https://github.com/Toblerity/Shapely/issues so I don't lose track while I'm workshopping and traveling this weekend?
On Mon, May 28, 2012 at 3:35 AM, Pascal Leroux <[email protected]> wrote: > Hi all, > > Using a list containing polygons AND multipolygons, I have made the Python > interpreter crash (bus error on MacOSX, segmentation fault on Linux/Ubuntu). > Shapely.ops.cascaded_union only accepts a Polygon instance list or a > MultiPpolygon instance as a parameter. > > In addition to that, GEOSCascadedUnion is deprecated from version 3.3.0 and > GEOSUnaryUnion must be used instead. > > Why not to define in shapely.ops a function "unary_union" that would call > (wrap) GEOSUnaryUnion function ? > > I've modified ctypes_declarations.py and ops.py to use GEOSUnaryUnion and it > seems to work : > > plx@sony:~$ python > Python 2.7.3 (default, Apr 20 2012, 22:44:07) > [GCC 4.6.3] on linux2 > Type "help", "copyright", "credits" or "license" for more information. >>>> from shapely.wkt import loads >>>> mp=loads('MULTIPOLYGON (((0 0,0 1,1 1,1 0, 0 0)), ((2 2, 2 3, 3 3, 3 2, >>>> 2 2)))') >>>> p=loads('POLYGON ((2 0, 2 1, 3 1, 3 0, 2 0))') >>>> from shapely.ops import unary_union as u2 >>>> u2((mp,p)) > <shapely.geometry.multipolygon.MultiPolygon object at 0xb6c9f9ac> >>>> >>>> u2((mp,p)).wkt > 'MULTIPOLYGON (((0.0000000000000000 0.0000000000000000, 0.0000000000000000 > 1.0000000000000000, 1.0000000000000000 1.0000000000000000, > 1.0000000000000000 0.0000000000000000, 0.0000000000000000 > 0.0000000000000000)), ((2.0000000000000000 0.0000000000000000, > 2.0000000000000000 1.0000000000000000, 3.0000000000000000 > 1.0000000000000000, 3.0000000000000000 0.0000000000000000, > 2.0000000000000000 0.0000000000000000)), ((2.0000000000000000 > 2.0000000000000000, 2.0000000000000000 3.0000000000000000, > 3.0000000000000000 3.0000000000000000, 3.0000000000000000 > 2.0000000000000000, 2.0000000000000000 2.0000000000000000)))' >>>> >>>> multi=loads('MULTIPOLYGON (((0 0, 0 1, 1 1, 1 0, 0 0)), ((1 1, 2 1, 2 0, >>>> 1 0, 1 1)))') >>>> u2(multi).wkt > 'POLYGON ((0.0000000000000000 0.0000000000000000, 0.0000000000000000 > 1.0000000000000000, 1.0000000000000000 1.0000000000000000, > 2.0000000000000000 1.0000000000000000, 2.0000000000000000 > 0.0000000000000000, 1.0000000000000000 0.0000000000000000, > 0.0000000000000000 0.0000000000000000))' >>>> >>>> >>>> from shapely.ops import cascaded_union as cu >>>> u2(multi).equals(cu(multi)) > True >>>> >>>> # with polygons and multipolygons, cascaded_union : > ... >>>> >>>> cu((mp,p)) > Erreur de segmentation (core dumped) > plx@sony:~$ > > > Cascaded_union might be kept for compatibility reasons but it could call > GEOSUnarayUnion too ? > > > _______________________________________________ > Community mailing list > [email protected] > http://lists.gispython.org/mailman/listinfo/community > -- Sean Gillies _______________________________________________ Community mailing list [email protected] http://lists.gispython.org/mailman/listinfo/community
