# Determining distances between multiple points without crossing roads? [closed]

I'm working with civic addresses (points) in the county that I work for (there are nearly 10,0000 points). I am trying to find out how many of the points are within certain distances or less from each other. (Ex: 400 feet or less from each other).

The other challenge is that I do not want the calculation to include going across roads. They need to be on the same side of the road to meet the search criteria.

I've never done this sort of query so would really appreciate any help. A small snapshot of what I'm referring to is below.

I have access to full ArcGIS suite if necessary so have full range of tools at my disposal. I've done some coding before and can work with it, but I'm not good at creating it myself necessarily.

I'm really just starting to tackle this problem and haven't put too much into it yet. It seems that the NEAR and POINT DISTANCE might be the way to go?

I need to get access to the license to do these so am trying to do my research in advance to best utilize my time.

## closed as unclear what you're asking by PolyGeo♦, BradHards, Curlew, whuber♦Jun 29 '14 at 15:59

Please clarify your specific problem or add additional details to highlight exactly what you need. As it's currently written, it’s hard to tell exactly what you're asking. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.

• Welcome to gis.SE. Can you tell us what data you have to work with? In particular, how are you defining the points of interest and the roads? What tools (apart from arcgis mentioned in the tags) do you have? What experience / approaches are acceptable (e.g. can you code in C# or python). What research have you already done? What tests have you already performed? All of this useful information can be added to the question (just click edit below the question), and will help us to provide you an answer that solves your specific problem. – BradHards Nov 27 '13 at 20:48
• What version and license level (Basic, Standard or Advanced) do you have access to? This could make a significant difference to how I would attempt to answer this question. – PolyGeo Nov 27 '13 at 21:31
• The most brute force way to do this would be an RBAR solution: for a point, find all of the points within 400 feet. For each association, create a line between those two points. If that line intersects a road, then remove the secondary point from your list. You should end up with the correct answer using this algorithm. – ike Nov 27 '13 at 23:29
• I think @ike's is the answer to what I think is the question, but I think this question needs to be revised to explain clearly how the picture relates to it and whether it is only Euclidean distances that are being referred to. – PolyGeo Jun 29 '14 at 0:43
• The question suggests two interpretations which, although they sound similar, require substantially different solutions. Is it desired to find (1) all same-side neighbors of each house which are within 400 feet in a straight line or (2) all neighbors which can be reached in less than 400 feet of travel while remaining on the same side? The solutions can differ when the connected components of the complement of the streets are concave. The first is readily solved with a pair of queries whereas the second practically requires a costdistance calculation to be made for each house. – whuber Jun 29 '14 at 15:58

I would consider something that assembles this algorithm:

• Divide all the points into groups
• The different groups would be divided by roads.
• This would be the complex part of the solution.
• I would start with creating polygons of all the roads, then I guess ArcGIS would have a simple solution to this also.
• Within the group, find points within x ft of a given point (this would be easily achievable by a simple formula like Math.sqrt( dxdx + dydy ) or some ArcGIS functionality).

I don't have enough points on this stackexchange to make a comment, but I have a comment for ike's comment on your post:

The most brute force way to do this would be an RBAR solution: for a point, find all of the points within 400 feet. For each association, create a line between those two points. If that line intersects a road, then remove the secondary point from your list. You should end up with the correct answer using this algorithm.

This would not work, there might be a different path between two points that is not on a straight line that would not cross a road. Consider my fantastic drawing where it is possible to connect all points without crossing a road:

Edit: This made me think of something else: when you say "find out how many of the points are within certain distances or less from each" - do you mean air distance, or distance that you would have to e.g. lay a cable without crossing a road, again I would refer to the drawing.

• Excellent answer! Your solution is highly creative and easy to understand. – ike Dec 2 '13 at 18:10

I think if you're using ArcGIS you want to look at the Near Analysis

Another alternative, and perhaps someone can shed more light would be to convert your layers to rasters. I remember doing an old lab with raster analysis and it was something similar to what you're doing using proximity analysis. (I'm sorry it's been a long time since I've worked with Rasters!)

Here's a partial answer. Maybe as a group we can bake it the rest of the way.

1. Buffer the address points by your distance (400'). Use the option to keep the buffers separate, so we get a circle for every address point.
2. Buffer the roads by 5' to make them into polygons. (5' is arbitrary, but 10' is not far from how wide a road is.) On this one, let it merge the buffers. Go into the feature class properties and give the INSIDE field an alias, IN_ROAD.
3. UNION the two polygon layers.
4. In that resulting feature class, select and delete the polygons where IN_ROAD is populated. This will delete the road polygons and leave just the buffer circles, now broken into two (or more) parts wherever they crossed a road.

The part I haven't figured out is that now we want to delete the ones that are on the other side of the road. You could delete any that are less than half of the original area, but that will kill some that you don't want to, if the circle crossed two roads (corner lot).

What we want to do is select the polys that do not contain their own point, and get rid of them. But how? (Easy if we went to a python cursor.)

With that done, the next step would be a spatial join so that each poly winds up with the count of points that lie inside it. The ones with count > 1 are the ones where there was another point within 400'.