1

I have a set of polygons like this:

Polygons

The broad goal is to find how much of each polygon's perimeter is bordered by each of the other polygons, including polygons across the street. In other words, I want to find "bordering" polygons—not just those that share an edge, but those that "border" each other across the street as well. This sounds like a classic buffer problem, but the streets have variable lengths so I don't think a simple buffer would cut it. I have found a couple ways to formulate this problem, but each has its own flaws:

  1. Create a "voronoi diagram", but with polygons as inputs. This can be done with the Euclidean Allocation tool in ArcGIS, but a) this requires conversion to raster format and then back, which requires far too much processing time for the whole dataset (a large metropolitan county); and b) it does not return exactly what I want. For example, see below, after running Euclidean Allocation and converting the result back to polygons:

Euclidean Allocation

This gives me what I want in terms of finding the "across the street" polygons, but note how the polygons on the same side of the street now have artificially longer boundaries. This is important as I need to know the fraction of perimeter touched by each polygon.

  1. Buffer each polygon only into empty space. I suspect this would be more computationally feasible if such a tool existed but a) it doesn't look like there is such a tool; and b) it would lead to the same flawed result as before.

  2. Convert the polygons to lines and then points, and then run a Voronoi diagram. This approach probably could work, but I haven't yet found a workflow that gets me what I want. It would also only be an approximation, but I'd be willing to accept that. There would also be quite a large number of points.

  3. For each polygon, find the nearest polygon in all directions. Basically, for each edge in the polygon, shift it outwards in the exact perpendicular direction until it touches another. For edges that are already shared with another polygon, do nothing. But I don't think such a tool exists.

I have searched around and I'm quite surprised that I haven't found an answer, considering that "finding parcels across the street" is probably a common GIS task. I should mention that I have access to most ArcMap functionality.

Curious to hear any of your thoughts!

5
  • I think you should look into the Polygon Neighbors tool and use it on a feature class that includes both your parcel and street polygons.
    – PolyGeo
    Nov 21 '21 at 23:51
  • Not exactly the same question, but the accepted answer may help you from this one: gis.stackexchange.com/questions/297533/… Nov 22 '21 at 1:19
  • @SonofaBeach I actually already tried Euclidean Allocation (see the second image) but it has the big flaw that the conversion to raster and back is simply infeasible for a dataset of the size that I have (100000s of polygons).
    – Ike348
    Nov 22 '21 at 2:57
  • @PolyGeo How would this help? It would tell me which polygons border which streets, but I don't see how to extend it to which polygons border which polygons across the street
    – Ike348
    Nov 22 '21 at 2:58
  • The table created by Polygon Neighbors includes rows for all the parcel polygons that border a street polygon i.e. parcel polygons on both sides of each street. You would need to apply some post-processing to that table using ArcPy. You would also be greatly advantaged if your street polygon feature class included coplanar polygons defining each intersection.
    – PolyGeo
    Nov 22 '21 at 3:37
0

Your Option 4 is probably the closest to what I would suggest.

What I would recommend is:

  • Create linear features that represent the polygon outline and use tools that work with the linear features. eg: Parcel edge and road edge.

You could create the linear features by using Polygon to line translation and then use Polygon Neighbors tool to identify the Parcel Edges, with the remainder being Road Edges.

The next bit is probably the most difficult and will require some programming and/or combination of tools.

In short, buffer the road edges until they hit another road edge.

This 'other' road edge will be the land parcel 'across the street'. You will need to implement some exclusion criteria/business rules, such as

  • Max Buffer distance
  • Exclude road casements which are coincident to current road casement (ie: The neighbour!)
  • A 'buffer corridor' which is essentially perpendicular to the road edge. also Clip the buffer to not include current parcel polygon. This will give you a buffer direction 'into' the road.
  • Dissolve all road edges such that you only have one road edge to deal with.

Some situations which will be difficult/interesting.

  • Corner blocks - these potentially have two 'across the street'
  • Two 'across the street' polygons. (Do you - Pick the road edge that is closest? Or all of them).
  • Land parcels that actually have a street at the front AND behind. (ie: Two spatially disconnected road edges).
2
  • This is a curious idea and is a new approach that I hadn't thought of. So what I'm seeing is 1. convert polygons to lines; 2. mark all lines bordering "universal polygon" as "road edges"; 3. buffer road edges and only road edges. However, when I buffer, is there any way to "split" the result such that the polygons don't overlap, but aren't dissolved either?
    – Ike348
    Nov 22 '21 at 3:04
  • the way you will need to do it is in a For loop. For each road edge, buffer and find intersects, return poly. Then move onto next road edge......Ive done this in the past, but programmatically (and not in ArcMap so I can't share any code sorry!)
    – nr_aus
    Nov 22 '21 at 3:10

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.