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!

  • 5
    Can you add columns X and Y coordinate columns to your dataset then populate those columns by calculating the coordinates. – dchaboya Oct 11 '12 at 1:45

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;

  1. Firstly buffer your points by the radius you want the output points to be measured in. Make sure that the Dissolve Type is ALL
  2. Explode the buffers with Multipart to Singlepart
  3. 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)
  4. Use the Create Random Points tool with the Constraining Feature class being pcb, and the Number of Points as the pcb COUNT field. 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.

Then you use the new fields to update the shapes as explained in Move points to XY coordinate.


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

# 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:

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.