On Jan 24, 2010, at 8:00 AM, Sean Gillies wrote: > > On Jan 21, 2010, at 10:42 PM, Patrick Hartling wrote: > >> Patrick Hartling wrote: >>> Sean Gillies wrote: >>>> On Jan 21, 2010, at 5:35 PM, Patrick Hartling wrote: >>>> >>>>> Howard Butler wrote: >>>>>> On Jan 21, 2010, at 9:30 AM, Patrick Hartling wrote: >>>>>> >>>>>>> We have run into a strange problem with the is_empty property on >>>>>>> Shapely >>>>>>> goemetry objects failing on Linux. We are using r1485 from the >>>>>>> Shapely 1.2 >>>>>>> branch with GEOS 3.1.1 and Python 2.6.2 on 64-bit Ubuntu Linux >>>>>>> 9.04. The >>>>>>> code below demonstrates the problem: >>>>>>> >>>>>>> import shapely.geometry >>>>>>> assert shapely.geometry.Point(1,1).is_empty == False >>>>>> What about this? Maybe the chaining is causing the reference to >>>>>> go >>>>>> bad. >>>>>> >>>>>> p = shapely.geometry.Point(1,1) >>>>>> p.is_empty >>>>> The result is the same in that case: is_empty still returns False. >>>>> >>>>> -Patrick >>>> An "empty" geometry is an odd beast. Not quite the same as None, >>>> it's >>>> a reflection of whether the geometry has coordinates or a sequence >>>> of >>>> coordinates. A Point with x and y values set is definitely not >>>> empty. >>>> The following is correct: >>>> >>>>>>> from shapely.geometry import Point >>>>>>> p = Point(0, 0) >>>>>>> p.is_empty >>>> False >>>> >>>> Thanks for trying the code, Patrick. I'm going to try to make a >>>> second >>>> alpha release of 1.2 tonight or tomorrow and will notify this list. >>> >>> Using r1521 of the Shapely 1.2 branch, I get the same failure with >>> is_empty: >>> >>>>>> from shapely.geometry import Point >>>>>> p = Point(0, 0) >>>>>> p.is_empty >>> True >>> >>> I think that the next logical thing for me to try is to run this in >>> GDB and >>> see what is happening in GEOS. >> >> I figured out what was going wrong. The return type on some of the >> ctypes >> declarations did not match the actual GEOS C function, and this >> caused bogus >> results to be extracted from the stack frame. On x86_64 Linux, int >> is 64 >> bits wide. GEOS C functions that return a boolean value have char as >> the >> return type. By using the attached patch (made against r1521 of the >> 1.2 >> branch), my test code works, and 5 Shapely test suite failures are >> fixed. I >> have not tried this patch on Windows or Mac OS X yet, however, but I >> can >> check on them soon. >> >> -Patrick >> >> >> -- >> Patrick L. Hartling >> Senior Software Engineer, Priority 5 >> http://www.priority5.com/ >> >> The information transmitted in this communication is intended only for >> the person or entity to which it is addressed and contains proprietary >> material. Any review, retransmission, dissemination or other use of, >> or >> taking of any action in reliance upon, this information by persons or >> entities other than the intended recipient is prohibited. If you >> received this in error, please destroy any copies, contact the sender >> and delete the material from any computer. >> Index: shapely/ctypes_declarations.py >> =================================================================== >> --- shapely/ctypes_declarations.py (revision 1521) >> +++ shapely/ctypes_declarations.py (working copy) >> @@ -134,46 +134,46 @@ >> lgeos.GEOSRelatePattern.restype = ctypes.c_char >> lgeos.GEOSRelatePattern.argtypes = [ctypes.c_void_p, >> ctypes.c_void_p, ctypes.c_char_p] >> >> - lgeos.GEOSDisjoint.restype = ctypes.c_int >> + lgeos.GEOSDisjoint.restype = ctypes.c_int8 >> lgeos.GEOSDisjoint.argtypes = [ctypes.c_void_p, ctypes.c_void_p] >> >> - lgeos.GEOSTouches.restype = ctypes.c_int >> + lgeos.GEOSTouches.restype = ctypes.c_int8 >> lgeos.GEOSTouches.argtypes = [ctypes.c_void_p, ctypes.c_void_p] >> >> - lgeos.GEOSIntersects.restype = ctypes.c_int >> + lgeos.GEOSIntersects.restype = ctypes.c_int8 >> lgeos.GEOSIntersects.argtypes = [ctypes.c_void_p, ctypes.c_void_p] >> >> - lgeos.GEOSCrosses.restype = ctypes.c_int >> + lgeos.GEOSCrosses.restype = ctypes.c_int8 >> lgeos.GEOSCrosses.argtypes = [ctypes.c_void_p, ctypes.c_void_p] >> >> - lgeos.GEOSWithin.restype = ctypes.c_int >> + lgeos.GEOSWithin.restype = ctypes.c_int8 >> lgeos.GEOSWithin.argtypes = [ctypes.c_void_p, ctypes.c_void_p] >> >> - lgeos.GEOSContains.restype = ctypes.c_int >> + lgeos.GEOSContains.restype = ctypes.c_int8 >> lgeos.GEOSContains.argtypes = [ctypes.c_void_p, ctypes.c_void_p] >> >> - lgeos.GEOSOverlaps.restype = ctypes.c_int >> + lgeos.GEOSOverlaps.restype = ctypes.c_int8 >> lgeos.GEOSOverlaps.argtypes = [ctypes.c_void_p, ctypes.c_void_p] >> >> - lgeos.GEOSEquals.restype = ctypes.c_int >> + lgeos.GEOSEquals.restype = ctypes.c_int8 >> lgeos.GEOSEquals.argtypes = [ctypes.c_void_p, ctypes.c_void_p] >> >> - lgeos.GEOSEqualsExact.restype = ctypes.c_int >> + lgeos.GEOSEqualsExact.restype = ctypes.c_int8 >> lgeos.GEOSEqualsExact.argtypes = [ctypes.c_void_p, >> ctypes.c_void_p, ctypes.c_double] >> >> - lgeos.GEOSisEmpty.restype = ctypes.c_int >> + lgeos.GEOSisEmpty.restype = ctypes.c_int8 >> lgeos.GEOSisEmpty.argtypes = [ctypes.c_void_p] >> >> - lgeos.GEOSisValid.restype = ctypes.c_int >> + lgeos.GEOSisValid.restype = ctypes.c_int8 >> lgeos.GEOSisValid.argtypes = [ctypes.c_void_p] >> >> - lgeos.GEOSisSimple.restype = ctypes.c_int >> + lgeos.GEOSisSimple.restype = ctypes.c_int8 >> lgeos.GEOSisSimple.argtypes = [ctypes.c_void_p] >> >> - lgeos.GEOSisRing.restype = ctypes.c_int >> + lgeos.GEOSisRing.restype = ctypes.c_int8 >> lgeos.GEOSisRing.argtypes = [ctypes.c_void_p] >> >> - lgeos.GEOSHasZ.restype = ctypes.c_int >> + lgeos.GEOSHasZ.restype = ctypes.c_int8 >> lgeos.GEOSHasZ.argtypes = [ctypes.c_void_p] >> >> lgeos.GEOSGeomType.restype = ctypes.c_char_p > > Thanks! It's fixed in r1529 > > http://trac.gispython.org/lab/changeset/1529
Nice. Thank you! -Patrick -- Patrick L. Hartling Senior Software Engineer, Priority 5 http://www.priority5.com/ The information transmitted in this communication is intended only for the person or entity to which it is addressed and contains proprietary material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon, this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please destroy any copies, contact the sender and delete the material from any computer. _______________________________________________ Community mailing list [email protected] http://lists.gispython.org/mailman/listinfo/community
