Patrick Giraudoux
2008-Feb-17 16:36 UTC
[R] random location in polygons sp spsample splancs csr
Dear all, I had to place points at random, one in each of larger number of polygons (actually in objects of class 'SpatialPolygonsDataFrame' , see sp library), and tried first to do it using spsample (from sp). Surprisingly, every 5-15 trials, the output was a NULL value. The doc says that ' this may occur when trying to hit a small and awkwardly shaped polygon in a large bounding box with a small number of points', but in my case, the shapes were not really awkward, and the bounding box just the smallest rectangle including the shape, just the number of points was 1 in each polygon. Thus I tried csr (from splancs) after having extracted the polygon coordinates of each shape from the Spatial object, and everything went smoothly, with hit success every trial. Has anybody (anybody will probably be Edzer or/and Roger...) an idea why here splancs looks like outperforming spsample ? Patrick
Roger Bivand
2008-Feb-17 17:34 UTC
[R] random location in polygons sp spsample splancs csr
On Sun, 17 Feb 2008, Patrick Giraudoux wrote:> Dear all, > > I had to place points at random, one in each of larger number of polygons > (actually in objects of class 'SpatialPolygonsDataFrame' , see sp library), > and tried first to do it using spsample (from sp). Surprisingly, every 5-15 > trials, the output was a NULL value. The doc says that ' this may occur when > trying to hit a small and awkwardly shaped polygon in a large bounding box > with a small number of points', but in my case, the shapes were not really > awkward, and the bounding box just the smallest rectangle including the > shape, just the number of points was 1 in each polygon.Dear Patrick, All the different packages providing functions for generating random 2D points in an irregular polygon or polygons do it similarly - they increase the number of points to be drawn at least in proportion to the ratio of the area of bounding box of the polygon to the area of the polygon. Next, they return the points found from the bounding box area that fall within the polygon. If too many points are found within the polygon, they thin them. If, on the other hand, they are unlucky, they iterate until they meet or exceed the number needed. Handling holes in the polygon(s) is an added attraction as are multiple polygons in a window (spsample methods do this, as do similar methods in spatstat). Could you provide an example with a set.seed() value that does what you say, or at least the code you used? The spsample methods for polygons have an iter= argument that can be used to make then "try harder", did you try it (with what values - the help page senctence you quote is from the iter= description)? Did you try asking for multiple points and then choosing a single point at random? This would be equivalent to increasing iter while asking for a single point.> > Thus I tried csr (from splancs) after having extracted the polygon > coordinates of each shape from the Spatial object, and everything went > smoothly, with hit success every trial. >This is because - see the code csr -> ranpts -> gen - it simply iterates until the number of generated points within the polygon exceeds the number required. If the polygon is easy to "hit", this isn't costly, the alternative is easy to see. Hope this helps Roger PS. Perhaps R-sig-geo is a more appropriate list?> Has anybody (anybody will probably be Edzer or/and Roger...) an idea why here > splancs looks like outperforming spsample ? > > Patrick > > > > > >-- Roger Bivand Economic Geography Section, Department of Economics, Norwegian School of Economics and Business Administration, Helleveien 30, N-5045 Bergen, Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43 e-mail: Roger.Bivand at nhh.no