Sean Gillies wrote:
> Jaakko Salli wrote:
>> Sean Gillies wrote:
>>> Jaakko Salli wrote:
>>>> Sean Gillies wrote:
>>>>> Jaakko Salli wrote:
>>>>>> [EMAIL PROTECTED] wrote:
>>>>>>>> Jaakko Salli wrote:
>>>>>>>>> Brent Pedersen wrote:
>>>>>>>>>> On Wed, Jun 25, 2008 at 8:52 AM, Jaakko Salli <[EMAIL PROTECTED]>
>>>>>>>>>> wrote:
>>>>>>>>>>> Hi all,
>>>>>>>>>>>
>>>>>>>>>>> I have encountered strange problem with Polygon.contains(Point). It
>>>>>>>>>>> seems it stops functioning correctly after being called 21 times. At
>>>>>>>>>>> that point, instead of checking if point is inside the polygon, it
>>>>>>>>>>> just
>>>>>>>>>>> check if it is inside polygon's bounding box.
>>>>>>>>>>>
>>>>>>>>>>> Here is code to reproduce the issue (I have tried it with Python 
>>>>>>>>>>> 2.5.2
>>>>>>>>>>> and Shapely SVN trunk):
>>>>>>>>>>>
>>>>>>>>>>> from shapely.geometry import Point, Polygon
>>>>>>>>>>>
>>>>>>>>>>> # Form a 'L' shaped polygon
>>>>>>>>>>> points = [(0.0, 0.0),
>>>>>>>>>>>          (1.0, 0.0),
>>>>>>>>>>>          (1.0, 1.0),
>>>>>>>>>>>          (2.0, 1.0),
>>>>>>>>>>>          (2.0, 2.0),
>>>>>>>>>>>          (0.0, 2.0),
>>>>>>>>>>>          (0.0, 0.0)]
>>>>>>>>>>>
>>>>>>>>>>> poly = Polygon(points)
>>>>>>>>>>>
>>>>>>>>>>> # Create point that should be outside polygon, but
>>>>>>>>>>> # inside its bounding box
>>>>>>>>>>> pt_outside_but_inside_bbox = Point(1.5, 0.5)
>>>>>>>>>>>
>>>>>>>>>>> # Create point that should be outside polygon,
>>>>>>>>>>> # even outside its bounding box
>>>>>>>>>>> pt_outside_even_bbox = Point(2.5, 0.5)
>>>>>>>>>>>
>>>>>>>>>>> # At iteration number 22, poly.contains effectively becomes
>>>>>>>>>>> # poly_bounding_box.contains
>>>>>>>>>>> for i in range(1,100):
>>>>>>>>>>>    res1 = poly.contains(pt_outside_but_inside_bbox)
>>>>>>>>>>>    res2 = poly.contains(pt_outside_even_bbox)
>>>>>>>>>>>    print '#%i: poly.contains(pt_outside_but_inside_bbox) = %s'%(i,
>>>>>>>>>>> res1)
>>>>>>>>>>>    print '     poly.contains(pt_outside_even_bbox) = %s'%(res2)
>>>>>>>>>>>    if res1 != False:
>>>>>>>>>>>        print "poly.contains failed at try #%i!"%(i)
>>>>>>>>>>>        break
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Thanks,
>>>>>>>>>>>  Jaakko Salli
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> Community mailing list
>>>>>>>>>>> [email protected]
>>>>>>>>>>> http://lists.gispython.org/mailman/listinfo/community
>>>>>>>>>>>
>>>>>>>>>> thankfully, i dont see this with r1117. that scared me.
>>>>>>>>>> even upped the range to 100K and no problems.
>>>>>>>>>> fwiw, i'm using geos 3.0.0, not an rc...
>>>>>>>>> I'm using the geos DLL provided with the Windows installer
>>>>>>>>> (also using Windows XP SP2, if that matters).
>>>>>>>> I have now built geos 3.0.0 DLL with msys+MingW32. Seems to have fixed
>>>>>>>> the issue.
>>>>>>>>
>>>>>>>> Sorry for bothering :)
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>>   Jaakko
>>>>>>> Jaakko, would you be willing to put that DLL online so I can download 
>>>>>>> and
>>>>>>> compare it to the one I am distributing?
>>>>>> Here you go:
>>>>>>
>>>>>> http://personal.inet.fi/private/jmsalli/geos_dlls.zip
>>>>>>
>>>>>> I didn't use any configure options, but did run 'strip -d' after make was
>>>>>> done.
>>>>>>
>>>>>> Jaakko
>>>>> Jaakko,
>>>>>
>>>>> I'm back in my office, trying to reproduce the problem, and have run
>>>>> into something that disturbs me ...
>>>>>
>>>>> Save the attached doctest file and run it like
>>>>>
>>>>>   >>> import doctest
>>>>>   >>> doctest.testfile('ops-repeat.txt')
>>>>>
>>>>> On Linux (w/ Python 2.5, GEOS 3.0) the test passes. The test also passes
>>>>> when I use your new DLLs. I can confirm that if I use the geos.dll I
>>>>> have been distributing, the test fails on the 22nd interation. I have no
>>>>> idea WTF is going on in that case :(
>>>>>
>>>>> I'm not a Windows platform expert at all ... will your DLLs work on all
>>>>> Win32 systems? I'm testing on Windows 2000 here.
>>>>>
>>>>> Cheers,
>>>>> Sean
>>>> Sorry, I can only test with XP, but since it works on your Windows 2000 
>>>> I can't think of any reason why low-level stuff like this would not work 
>>>> on all modern NT-based versions of Windows (ie. Win2K and later). 
>>>> Win95-based ones are another matter, although I still think that it will 
>>>> work.
>>>>
>>>> One thing however: On Windows, Python 2.5 extensions are supposed to be 
>>>> built with Visual C++ 7, but your included makefile failed for me. So, I 
>>>> tried mingw, and was surprised that the resulting DLLs worked. Mingw 
>>>> links with the same CRT as VC7, so that probably helped.
>>>>
>>>> Jaakko
>>> Jaakko,
>>>
>>> I'd like to use your DLLs for future Shapely windows installers. Can the
>>> size of the second be reduced at all?
>> Do you know any additional configure flags that I can use to reduce the 
>> binary size?
>>
>> Currently, using CXXFLAGS=Os and strip, I get following sizes:
>>
>> geos.dll            348kb
>> libgeos-3-0-0.dll   1,24Mb
>>
>> I did some profiling with hotshot to see how -Os affected performance.
>>
>> With -Os:
>>
>>    ncalls  tottime  percall       cumtime  percall filename:lineno(function)
>>     88725 1131.105    0.013      1131.105    0.013 base.py:74(next)
>>     14742 1096.408    0.074      1096.408    0.074 
>> polygon.py:13(geos_linearring_from_py)
>>    190944  220.017    0.0011522   220.017    0.001 base.py:283(_get_geom)
>>     32868  144.263    0.004       144.263    0.004 
>> base.py:24(geometry_type_name)
>>     29484  134.660    0.005       134.660    0.005 base.py:65(update_cseq)
>>     31176   34.807    0.0011164    34.807    0.001 
>> polygon.py:173(_init_geom)
>>
>> With -O2:
>>
>>    ncalls  tottime  percall       cumtime  percall filename:lineno(function)
>>    138775 1671.761    0.012      1671.761    0.012 base.py:74(next)
>>     23058 1722.861    0.075      1722.861    0.075 
>> polygon.py:13(geos_linearring_from_py)
>>    298320  334.852    0.0011224   334.852    0.001 base.py:283(_get_geom)
>>     51348  217.887    0.004       217.887    0.004 
>> base.py:24(geometry_type_name)
>>     46116  207.142    0.004       207.142    0.004 base.py:65(update_cseq)
>>     48732   52.525    0.0010778    52.525    0.001 
>> polygon.py:173(_init_geom)
>>
>> Not much in this case (few percents).
>>
>> (number of calls in tests don't match as I did it by moving some objects 
>> in gui)
>>
>> Let me know if you want these new DLLs uploaded.
>>
>> Jaakko
>
> Yes, please :)
>
> Sean
Up there now

http://personal.inet.fi/private/jmsalli/geos_dlls.zip

Jaakko

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

Reply via email to