Looking to get some feedback on tools or methodology one might use to denote a sensitive area without disclosing the specific location of a feature. For instance, how best to make a buffer that's not based on a centroid.

Let's say I have a feature I want to hide but I need to know generally where it is. Might only have a single point, maybe even a small polygon defining it's boundary. I might wish to make a polygon buffer several miles wide but I want the specific location of the feature it contains more or less randomized. Inside the poly, somewhere, certainly not right in the middle.

3 Answers 3


I have used the following workflow for sensitive data with success:

  1. buffer your current points/polys that you wish to obscure
  2. use the Create Random Points tool with the buffers as your constraining feature class and 1 as the number of points
  3. buffer the random points

This returns buffers that are completely randomized while also allowing for control in the precision of your data depending upon level of sensitivity via buffer size.

  • This was the first workflow I came up with, and it might be the best option after all. To be fair, I think the other suggestions here would be fine too. Good to have some options. Thanks.
    – MattS
    Sep 8, 2016 at 15:01

The first thing that comes to mind is a grid system.

Create a grid that covers the entire area you are concerned with and return only the grid cells that intersect the 'hidden' feature. This could be a single cell for a point or many cells for a large polygon or line.

The size of the grid cells will determine how general the location is. The grid doesn't have to be square either, you could use rectangles or even a hex-grid.


You could create 2 columns RAND_X and RAND_Y and randomize the number you would like inside with range values of your choice, let's say for example a range of [-3000 to 3000] for a random value in a range of maximum 3 km. RAND_X value would be something you add to your X coordinates, RAND_Y value something you would add to your Y coordinates.

This way, you would have your central point moved in a limited perimeter .. but not in the middle of your area or at the place of your point. Just choose wisely your range and don't forget negatives values.

You can then create a buffer around this area for example.

You can use this text in a .cal file to use it in the Field Calculator :

def Randomizer(intMin,intMax):
    import random
    return random.randint(int(intMin),int(intMax))


Source of script (i just changed a bit the names in my .cal script).


Below an example :

Randomized possible positions

  • This is also an interesting method I might explore. I'm trying to understand, though... would you (or could you) set a different 'randomized' distance for each feature or are you setting it equal across the whole feature class?
    – MattS
    Sep 8, 2016 at 15:22
  • The offset distance in X and Y is different for each feature, in this method. The aim is that you can't guess if there is an offset pattern for all features, for example. The only thing that is not random is the max range values you set (here it's 3000 for example). In my example i choose to blur the location of the source point in a area that is 3 km around the source point (a round area) but should you set the range value in X different than Y you would have an ellipse.
    – gisnside
    Sep 8, 2016 at 16:25

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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