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
