I have a dataset of point features with photo attachments of street signs from volunteers through the Survey123 app. The app records their location which ultimately creates the point feature.

Part of the project involves identifying and removing photo submissions of the same signs, which I think can be accomplished by identifying the points that overlap each other or are near each other - this would indicate that a photo was taken at the same location which means the chance of the same sign being photographed is higher and could be manually reviewed.

The select by location tool doesn't seem to work properly as any configuration just selects all the records.

Is there a tool that could accomplish what I'm trying to do?

  • 1
    I've used a method for detecting duplicate and near duplicate points for many years now, first you must define what 'near' is, buffer the points dissolving the buffers, explode the buffers into multi-part, use spatial join to copy the points adding the buffer id, use summary statistics with the buffer id as the case field and point id/count as the statistic field, select from the table where count > 1 and join field back to the polygons.. that finds them, deciding on which to keep and which to remove is the hard part, define that and iterate the joined buffers select by location and remove. Aug 6, 2020 at 3:47
  • I'd suggest running near tool on itself. Repeat until min distance is greater than tolerance. Good luck with re-attaching photos.
    – FelixIP
    Aug 6, 2020 at 4:00
  • If you're going that way @FelixIP near will only find the same point, Generate Near Table pro.arcgis.com/en/pro-app/tool-reference/analysis/… with a search distance and closest='ALL' to find other points as well, supply the same layer as the in_features and near_features, then remove the rows from the near table where IN_FID = NEAR_FID then you have a table showing all the points that are close to each other but each point to point will occur twice A -> B and B -> A which are kind of fun to resolve. I use the buffer method as it needs only a standard license. Aug 6, 2020 at 5:09

2 Answers 2

  1. run near tool on itself
  2. remove neighbours


arcpy.Near_analysis("nodes", "nodes",  location="LOCATION")

enter image description here

Repeat process until no points within tolerance distance found

You might want to convert xy table to line, dissolve and shuffle through short ones.


Finding nearest points can be either a geometric or geometric-attribution problem which could need weights. Pure Geometric is usually an O(n^2) solution which depending on the size of your dateset can be time consuming. I’d recursively .pop() your point container til bool([]) meaning every point has either found a nearest point or you’re left with a remainder (which is a result of not finding a neighbor) to manually review. The data and parameters are very important to consider. This is a greedy algorithm.

  • What will happen to 2nd overlapping poinr, when first is removed and the rest is miles away?
    – FelixIP
    Aug 6, 2020 at 6:58

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.