Skip to content

random location in polygons sp spsample splancs csr

3 messages · Patrick Giraudoux, Roger Bivand

#
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
#
On Sun, 17 Feb 2008, Patrick Giraudoux wrote:

            
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.
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?

  
    
#
Thanks for those detailed explanation and the time taken to write them.
Yes sure, I went up to 10, but no success.
The easiest way is to send the data and the script off list. I will do it.
I did not try this one....

Actually, I found my way out easy with csr() in splancs, and did not 
fight too much with spsample. My question on the list was just for 
general information
I was wondering too... and chose r-help because I though the question 
was of 'general' interest enough. This is debatable indeed...

Thank you anyway for your answer, and see you in a few minutes off list...

Cheers,

Patrick