The Department of Public Works would like to know how many properties in the city have a sidewalk at both the front and back. To get at this, I'm looking for a method to find parcels with frontage on more than one road. I'm working in ArcInfo 9.3.1 (file geodatabase). I'm looking for a solution that doesn't require scripting or downloading other tools. Street centerlines and parcel polygons are available; there is no sidewalk layer.

Using some of the ideas from this forum, I have developed and tested a process. Some of the results are puzzling (corner lots may or may not be included in the final results-I think DPW doesn't want corner lots included) and I'm concerned about scaling it up to the full 42000 parcels (I tested 1223 parcels). Are there steps to add to this method to improve the results? Is there another way to accomplish the same thing that could be more automated through model builder?

  • Run Feature to Line tool on parcel polygons feature class (two lines are created for boundaries shared by polygons and lines retain parcel id)
  • Build a geodatabase topology with this newly created parcel line feature class using the rule “must not have overlaps” then validate topology (interior lines will be in error)
  • In ArcMap, add topology and feature class and open error inspector then search for errors > select all errors > right click > select features > delete (to delete interior lines)
  • Run Frequency on remaining features in parcel line feature class with parcel id as frequency field – select records in table where Frequency > 1 and export to new table
  • Join Frequency>1 table to parcel polygons based on parcel id, keeping only matching records – export join results
  1. If your road network is divided by segments, dissolve the buffers based on road name or some common attribute so that individual segments of roads do not count as two separate roads in the next step.

  2. Buffer your street centerlines by a standard amount - more than half the typical ROW width, but no so large that it would overlap parcels that do not front on it. You may want to choose different buffers for different classes of roads. When you buffer, don't merge the polygons.

  3. Spatially join the parcels to the road buffers, choosing "one to many". The "count" field on the results should allow you to identify all parcels with two frontages.

Now you have a table with rows for every overlap between a parcel and a road. You could easily summarize this to find all parcels overlapping two or more roads using either GIS or a database. But eliminating corner lots will be more tricky. Here's one broad method:

  1. Set up topology for the buffer layer with a rule "must not intersect".

  2. Export all errors to a new feature class of intersections.

  3. Spatial join the intersections to the buffer layer, choosing "one to many".

At this point you have two tables: one with all frontages and one with all intersections between roads. It won't be easy, but you can write a SQL query that selects finds all parcels that have two frontages where those frontages do not intersect. The results would be the set of all parcels that have multiple frontages that do not intersect.

One advantage of this method is that it avoids choosing parcels with edges that are not on roads, such as where a parcel is adjacent to an alley, a water features, a railroad ROW, etc. A disadvantage is that the buffering won't be perfect, and you'll still have to visually check it for errors.

I'm not sure how to write the SQL - perhaps someone else can chime in on that.

Edit Thoughts on the SQL:

It would be fairly simple to solve for parcels with two frontages as below. Then you might need to manually look at parcels with more than two frontages, but hopefully there would be few, and most would be corner lots anyway.

This might work for selecting only non-corner parcels with two frontages:

select ParcelID from parcels
where parcelID not in (
    ((select Parcels1.parcelID, intersections.intersectionID from
     intersections left join
        (Select first(RoadID) as Road1, last(RoadID) as Road2, count(*) as frontages, ParcelID
        from Parcels
        where count(*) = 2
        group by ParcelID) as Parcels1
    on intersections.RoadID = Parcels1.Road1) as int1
inner join
    (select Parcels2.parcelID, intersections.intersectionID from
    intersections left join
        (Select first(RoadID) as Road1, last(RoadID) as Road2, count(*) as frontages, ParcelID
        from Parcels
        where count(*) = 2
        group by ParcelID) as Parcels2
    on intersections.RoadID = Parcels2.Road2) as int2
on int1.intersectionID on int2.intersectionID))
  • 1
    +1 Very creative solution: nice use of buffering. A union of the parcels and the streets buffer would do the trick, too. – whuber Aug 11 '11 at 17:33
  • I like that the buffer method avoids choosing parcels on alleys or other non-street ROW. More help with the intersections would be great, though. The topology shows the intersections as errors, but how do the errors get exported? Selecting the features causing the errors returns the buffer not the intersection. Is there a way to determine intersections without using code or downloading new tools? – cwb Aug 11 '11 at 20:52
  • Oh, sorry - I forgot that I used a script when I previously I exported topology errors. Just for reference, the tool for doing that is here. – Patrick Aug 11 '11 at 21:03
  • 1
    @whuber's suggestion gives me an idea for solving this without using a long SQL statement. Intersect the buffers and the parcels, including all attributes. The resulting feature class should have the attributes you need to determine which polygons represent intersections. Once you have that set of intersections, you can simply remove the parcels that intersect them from your set of all parcels. – Patrick Aug 11 '11 at 21:15
  • If you use this method, do the spatial join in step 3 as "one to one". This will give you a count of the number of frontages for each parcel, allowing you to select only the parcels with at least two frontages. – Patrick Aug 11 '11 at 21:16

I was able to deliver results to Public Works so the staff can review it according to their criteria. Here is an outline of my final procedure.

  1. Separate street centerlines by road class into new feature classes (US & State Highway, Major City Street/City Street, Private Drive/Driveway, ignore Interstate, Ramp, Path, Cemetery)

  2. Create buffer around each road class feature class: End type FLAT, Dissolve type LIST on street name id field, buffer size depends on road class

  3. Merge the buffer feature classes

  4. Intersect the merged buffer feature class with parcel polygons

  5. Run Frequency tool on Intersect feature class with frequency field = parcel id field

  6. Export selections from Frequency table based on frequency field (ignore frequency = 1, select frequency = 2, frequency = 3, frequency = 4, frequency = 5+)

  7. Join each frequency table to parcel polygons on parcel id field -keep matching records only & export joined feature class

  8. Review each exported feature class - watch for areas where buffer didn’t cover parcels such as cul-de-sacs

frequency 5+ includes corner lots with additional back frontage or odd shapes, large lots (golf course) or corner lots with buffer artifacts, corner lots which include two corners, parcels with roads running through

frequency 4 will be corner lots

frequency 3 includes parcels abutting corner lots, large multipart parcels split by road, artifacts from cross street buffer, parcel with 3 entrance roads

frequency 2 includes parcels with frontage on two roads, but watch for corner parcels where corner parcel boundary is too far from buffer to intersect, road within a parcel, 2 entrances to parcel on same road, road changes name in front of a parcel, interstate parcels

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.