[GIS] How to generate random points with minimum distances between points in multiple polygons

arcgis-desktopland-surveypointqgissampling

I am looking to create random points for a random stratified survey. There are three different categories being surveyed; for each, I have a single shapefile, each containing a number of polygons.

I would like to generate a number (undetermined) of random points in each shapefile, with a minimum distance of 250m between points (regardless of what category/shapefile they are in). In other words, I would like there to be an equal number of random points in shapefile1, shapefile2, and shapefile3, with no point within 250m of another (i.e., a point in shapefile1 should not be within 250m of another point in shapefile1 or a point in shapefiles2 or 3). If possible, I would like to create the maximum number of random points possible given my minimum distance of 250m limitation.

So far, I have been able to generate random points (using ArcMap and qgis), however the minimum distance between points seems to apply only to points within each polygon, rather than all polygons in three different shapefiles.

Best Answer

In ArcGIS, this can be done with Create random point if you have spatial analyst or 3D analyst or Advanced(ArcInfo) licence

select each shapefile as "constraining_feature_class" and set the "minimum_allowed_distance"to 250 m.

In QGIS, from what I know, you can use "Vector ‣ Research Tools ‣ Random points" with a constraining feature class, but not for distance. Again, you can use this tool in a loop to add points one by one until you reach the required number.

On the other hand, a solution for simple random sampling with distance contraint is to recursively add your random point and erase the buffer around your random point from the feature class until all your features are completely erased. As mentioned by @Whuber, this will not optimize the number of sample points, but you can control the number of points per strata.

Finally, the optimal number of points with a distance constraint can be achieved by systematic sampling : create a grid (with fishnet) with evenly spaced points (in your case 250 m) and randomly select a rotation angle and shift value betwen 0 and 250 in X and Y direction. This will optimize the number of point samples (and you could randomly subselect some points to reach a given number inside each startum). However, note that systematic sample could be biased because of the spatial autocorrelation.