Take the 2-minute tour ×
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

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!

share|improve this question
3  
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
add comment

3 Answers

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)
share|improve this answer
add comment

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.

share|improve this answer
add comment

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.
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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