I have a series of points representing animal observations. Many of them overlap, having the exact same coordinates, and this is causing me trouble when I want to run some analytical tools which requite no identical points. I was wondering if there's any tool that can add some "noise" to the coordinates, that's to say, adding some random decimal values at the end in order to obtain slightly different coordinates which are still close enough in space so as to not really modify the observation. I've heard about such a tool, but I can't find it, at least in ArcGis 10. Maybe there's another software that can do it? Thanks!
The Generate Conditional Random Points tool from Geospatial Modelling Environment should do the job for you. If you specify the
BVUNIFORM option for the
distrib atttribute (distribution) you can supply a radius around the input points within which new points will be generated in a uniform distribution. The number of points generated (the
sample attribute) can either be a set amount, or the name of a field which contains the number of points to be generated.
Alternately a similar operation can be performed from within ArcGIS standard commands if you have an ArcInfo or Spatial Analyst or 3D Analyst license;
- Firstly buffer your points by the radius you want the output points
to be measured in. Make sure that the Dissolve Type is
- Explode the buffers with Multipart to Singlepart
- Use a Spatial Join through Join Data or the Spatial Join Tool to join the original points to the exploded buffers, giving you buffers with a point count (call it pcb say)
- Use the Create Random Points tool with the Constraining Feature class being pcb, and the Number of Points as the pcb
COUNTfield. You can also set a Minimum Allowed Distance for the points as well to prevent them overlapping.
I think you could do it simply in the attribute table. Firstly add fields with existing X and Y coordinates (if you don't have them already) by Add XY Coordinates (Data Management tools). Then you can add a new field and using Field calculator turned to Python you can create random values which you wish by the arcgis.rand() function (described in the help Calculate Field (Data Management) and Create Random Value Generator). Then you just add two new fields X_rand, Y_rand and calculate them adding or subtracting these random numbers from initial X and Y.
Here is a quick python script which uses arcpy and python's random number generator to create an X and Y coordinate field in the dataset and then add a small random value to each coordinate value.
import arcpy, random #input shapefile fc = "C:\\Users\\Stuart.Grieve\\polygon_test\\new_shapefile.shp" #Add a POINT_X and POINT_Y field to the dataset arcpy.AddXY_management(fc) # Create a search cursor rows = arcpy.UpdateCursor(fc) # Create a list of fields fields = arcpy.ListFields(fc, "", "All") #Loop through the rows and add a random value to the x and y coordinates for row in rows: for field in fields: if 'POINT' in field.name: row.setValue(field.name,row.getValue(field.name)+random.random()/1000) rows.updateRow(row)