How the Street Liability Map Was Created
Making this map took a lot of trial and error, and manual labor, and some time was also wasted doing more than I needed on shared costs. But hopefully more will be gained from the experience in the long run.
This is how I created this map.
(1) I got the following data from the City GIS Coordinator:
- streets – this had the street names, widths, and pavement types
- right of way
(2) I broke all the parcel polygons into lines.
(3) I selected all parcel lines within 80 ft of right-of-ways (perhaps 50 ft would have sufficed and saved time), and marked all selected.
(4) I colored those that were selected with a different color, and then manually selected or removed any that were not along the right of way, and when I was done I exported it.
(5) I broke the streets into segments.
(6) I calculated and added to the metadata the angle of each street segment and the angle of each property line.
(7) I did a one-to-many spatial join of streets to parcel lines, and then chose the angles of the streets that were closest to the angles for the parcel lines, which I exported as a new layer.
(8) I concatenated the parcel id with the street name, and dissolved all the lines based on that. What was left were the property lines that were abutting streets, with the street names and data attached. A corner lot for example might be abutting two streets – now this parcel has two lines, one for each street, each with the name and data of the abutting street.
(9) Using only the streets that matched the addresses, I performed all the calculations (you can see how I calculated in the page explaining this map). They actually had the exact lengths according to deed descriptions, but these were not attached to properties, and were annotations. In the end, it was better to just use the slighly inexact drawn parcel lines, and calculate their lengths, which were only barely off.
(10) For all properties with 2 or more sides, I marked them. In the map, these properties are outlined in purple. If any had more than 5 or more sides, I excluded them – these usually resulted from very curvy roads, sometimes with dozens of sides, and were thus erroneous.
(11) For shared infrastructure, I first added circles. I simply took the total liability of each circle, and subtracted it from the abutting liability, and divided the result by the number of parcels in the circle. The result was added back to each of the parcels in the circle.
(12) Next I created this map, which divides the parcels of the whole town into what can be called “shared infrastructure areas”. I added a number for each area to identify it as separate.
(12) As the parcels all had numbers, I now summed each area’s total liability, and subtracted that from the total abutting liability, and then divided the result by the number of parcels in each area, which resulted in a number that I added each of the parcels in each area. This resulted in the added shared use costs.
(13) Next I did intersections. Spent a little too much time on this. Basically I created points for all intersections, and then added the data. I somehow determined which were T-intersections, and which were 4-way intersections. For 4-ways I multiplied the widths by themselves, and for T-intersections, I did that and divided it by 2. And then performed all the remaining calculations, and then added the result according to the “shared infrastructure areas.” I excluded any intersections that intersected collector and arterial roads, as they took precedence and would be included in the final step. In restrospect, I should have simply determined all intersections, and treated them all as 4-ways; very few were T-intersections, and they add very little to the overall liability.
(14) Finally, I took all of the collector and arterial roads, and divided their liabilities across the whole town, adding a total for all parcels. I excluded non-local roads.
(15) The map was uploaded and styled using CartoDB, an excellent mapping resource, and then was produced on a separate webpage with buttons.