I need to do some Getis-Ord analysis but first I need to aggregate my points. I know of XToolsPro, but the aggregate points function is locked and you must purchase a license to use it. I am wondering if there is a free tool out there, or a workaround in ArcMap that I am missing to aggregate points.

Some context: What I have are over 8,000 points, many of which have different attributes, but may share the same (approximate) geospatial location. For this analysis, I just need to aggregate any points overlapping one another based upon a field containing a numeric value to be summed. For example:

Point A overlaps Point B and Point C.  
Point A field value = 1.4
Point B = 2.4, and 
Point C = 5.2.  

The Aggregate of points A,B, and C would return point D with a value of 9.0

I hope this makes sense. Maybe I could get away with using something really basic but just haven't pieced it together yet. Any help you can offer would be appreciated!


ArcGIS v10 will do this. First run "Add XY coordinates". Then run Dissolve, select Point_X and Point_Y as the dissolve fields, add a statistics field, Sum. I just tested it on overlapping Points. The output has a single Point at each overlap location while the numeric field is summed, for that location.

| improve this answer | |
  • +1 It's nice to hear that 10 years after removing this functionality from their software, ESRI has put it back again. (It existed in ArcView 2/3 as part of the table summarize operation.) – whuber Sep 1 '11 at 14:09
  • Thanks @klewis! One thing though--the points don't exactly overlap each other (meaning the x-y coordinates are close but not equal to each other), but I just need to aggregate the points that fall within 100 feet of each other. It doesn't appear as though the dissolve feature as a way of dissolving within a certain distance threshold. I am assuming then that I would need to do some cleaning up using some proximity analysis? – myClone Sep 2 '11 at 5:35
  • 2
    This is a free tool that performs Kmeans clustering, along with many other tools. It needs ArcGIS 10,but works with an ArcView level license. I haven't tried the software but it has tools that are only available with an ArcInfo license. You must install GME, R and Statconn. spatialecology.com/gme/kmeans.htm BTW, Arc 10.1 will have kmeans clusering. forums.arcgis.com/threads/20288-fuzzy-c-means-cluster-analysis – klewis Sep 8 '11 at 23:20

There are many ways to go about it. One straightforward efficient one consists of:

  1. Compute the x and y coordinates as fields in the attribute table.

  2. Concatenate these coordinates into an identifier.

  3. Summarize the table on this identifier, requesting the sum of the numeric field as well as the first instances of both x and y.

  4. Create a point event theme of the summary table, using (x,y) for coordinates.


In a comment, @myClone writes

the points don't exactly overlap each other (meaning the x-y coordinates are close but not equal to each other), but I just need to aggregate the points that fall within 100 feet of each other.

In general there is no unique solution. Consider, for example, three points in a line where each is separated by 75 feet from its neighbor:

*     *     *    
a     b     c

Do you cluster all three, despite distance(a,c) > 100? If not, which solution do you choose: (a,b), (c) or (a), (b,c)?

Two approaches, giving different answers in such cases, are:

(i) Buffer all points by 50 = 100/2 feet, requesting that buffers be merged. Spatially join the buffers back to the points: this endows each point with the attribute of the merged buffer containing it. This achieves the aim of step (2) in my original solution. Proceed from there exactly as before. In the example this would cluster a, b, and c together.

(ii) Create a 100 by 100 foot grid and identify the points by their grid cells. This doesn't require actually drawing the grid or even storing its features, because the cell in which (x,y) lies is determined by the ordered pair (Floor((x-x0)/100), Floor((y-y0)/100)) where (x0,y0) is any grid origin you like. Combine these coordinates to identify the cell, again reaching step (2) in my original solution. Proceed as before.

Clearly method (ii) does not quite aggregate all point-pairs within 100 feet, because it's capable of aggregating pairs up to 100 * Sqrt(2) = 141 feet of each other. You can compensate by reducing the grid size to 100/Sqrt(2) = 71 feet, but then some pairs within 100 feet will not be aggregated. Pick your poison.

Note that the solutions in method (ii) depend on the grid origin and spacing. Using a 100 foot grid, it would yield either {(a,b), (c)} or {(a), (b,c)}, depending on the origin. Using a 71 foot grid, it would keep all three points separate, regardless of origin.

There are other methods, which I'll lump together in groups:

(iii) Use a statistical clustering procedure, such as k-means or hierarchical clustering, to do the job. There is loads of practical information about this on our sister site, stats@SE. Typically the stats software accepts (id, x, y) triples as input and outputs (or can be persuaded to output) a table of (id, cluster) triples. Join this output table back to the point attribute table, once more bringing us back to step (2) in the original solution, etc.

(iv) Some geostatistical software, such as GSLib, includes various "declustering" routines intended to prepare data for variography and Kriging. Their output can usually be imported back into the GIS software and made into a point layer.

The methods described so far give you full control over what is going on, allowing you to proceed with your work knowledgeably and professionally (without having to reverse-engineer your software tools).

Finally, it is worth mentioning that

(v) recent copies of ArcGIS have a tool for declustering. As I recall, it's unclear how it works; you have to read the underlying code to figure out what's going on.

| improve this answer | |

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.