[geos-devel] Bug in GEOSEquals predicate ?

Pascal Leroux pa.leroux at gmail.com
Mon Mar 16 14:09:09 EDT 2009


Does it mean that, when I get a geometry collection, the very first thing I
have to do is to split it into simple/multiple but homogeneous geometries to
go on ?

In the script I've posted, I could have use "contains" or "within" with the
two polygons instead of "equals" with the intersection, but in others cases,
I'm afraid it is not so easy/simple !

Can you give me an advice ?

Pascal

2009/3/16 Sean Gillies <sgillies at frii.com>

> The GEOS C API returns a integer value of 2 to indicate an error. It's good
> to learn that geometry collection predicates aren't supported.
>
>
> On Mar 16, 2009, at 9:46 AM, Martin Davis wrote:
>
>  GEOS does not support evaluating predicates on GEOMETRYCOLLECTIONS (due to
>> the potential complexity and lack of obvious semantics of heterogeneous
>> collections).
>>
>> In JTS trying to do this throws an exception.  I'm not sure how GEOS
>> reacts - or possibly shapely is not handling this gracefully?
>>
>> Pascal Leroux wrote:
>>
>>> Hi all
>>>
>>> while searching for intersections between polygons (buildings), I have
>>> found shapes that make "equals" predicate crash. With simpler shapes, it
>>> occurs too :
>>>
>>> >>> from shapely.geometry import Polygon
>>> >>> p1 = Polygon(((0,0),(0,10),(10,10),(10,0),(8,0),(8,8),(2,8),(2,0)))
>>> >>> p2 = Polygon(((2,0),(2,8),(8,8),(7,4),(8,0)))
>>> >>> inter = p1.intersection(p2)
>>> >>> inter.is_valid and p1.is_valid and p2.is_valid
>>> True
>>> >>> inter.wkt
>>> 'GEOMETRYCOLLECTION (POINT (8.0000000000000000 0.0000000000000000),
>>> LINESTRING (8.0000000000000000 8.0000000000000000, 2.0000000000000000
>>> 8.0000000000000000), LINESTRING (2.0000000000000000 8.0000000000000000,
>>> 2.0000000000000000 0.0000000000000000))'
>>> >>> inter.equals(p1)
>>> False
>>> >>> inter.equals(p2)
>>> Traceback (most recent call last):
>>>  File "<stdin>", line 1, in <module>
>>>  File
>>> "/usr/lib/python2.5/site-packages/Shapely-1.0.11-py2.5.egg/shapely/predicates.py",
>>> line 34, in __call__
>>>   return bool(self.fn(self.context._geom, other._geom))
>>>  File
>>> "/usr/lib/python2.5/site-packages/Shapely-1.0.11-py2.5.egg/shapely/predicates.py",
>>> line 21, in errcheck
>>>   raise PredicateError, "Failed to evaluate %s" % repr(self.fn)
>>> shapely.geos.PredicateError: Failed to evaluate <_FuncPtr object at
>>> 0x96a3bf4>
>>>
>>> I have got a Bus Error on MacOSX (libgeos version 3.0.0) and a
>>> Segmentation Fault on Ubuntu (libgeos version 3.0.3) with an equivalent code
>>> written in C (so I think Shapely is not involved).
>>>
>>> Any idea ? Did I miss something ?
>>>
>>> Pascal
>>> ------------------------------------------------------------------------
>>>
>>> _______________________________________________
>>> geos-devel mailing list
>>> geos-devel at lists.osgeo.org
>>> http://lists.osgeo.org/mailman/listinfo/geos-devel
>>>
>>
>> --
>> Martin Davis
>> Senior Technical Architect
>> Refractions Research, Inc.
>> (250) 383-3022
>>
>> _______________________________________________
>> geos-devel mailing list
>> geos-devel at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/geos-devel
>>
>
> _______________________________________________
> geos-devel mailing list
> geos-devel at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/geos-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/geos-devel/attachments/20090316/8521a474/attachment.html


More information about the geos-devel mailing list