Part 3: Technical overview
- Neighborhood connectivity
- Predicting rat-runs
- Defining a neighborhood
- Assessing overall impact
- Heuristics for placing filters
Architecture
OpenStreetMap into a graph
- Edges: road segments
- Nodes: junctions
- one-way streets, lane configuration
A neighborhood
- the perimeter
- usually “major” roads designed to handle more traffic
- the interior
- reduce traffic through here
Cells
![]()
Everywhere reachable by driving within the neighborhood, without leaving
Cells
Disconnected cells
![]()
- A cell must touch the perimeter somewhere!
- Otherwise, drivers can’t get in / out
Calculating cells
- Pretty straightforward graph floodfill
- Start from an unvisited road segment in the interior
- expand
- don’t cross modal filters, non-driveable roads, or the perimeter
Floodfill
Floodfill
Floodfill
Floodfill
The result
![]()
The graph of the neighborhood partitioned into strongly-connected components
Cells as areas
![]()
Can we match this?
Voronoi diagrams
![]()
(Balu Ertl on Wikipedia, CC BY-SA 4.0)
Not straightforward to apply to line segments
Approximating with grids
- Diffusion on a 10 meter grid
- Stop when there’s a collision
- Record the adjacency for the 4-color theorem
Approximating with grids
Approximating with grids
Approximating with grids
Approximating with grids
![]()
Marching Squares to turn the grid into nice contours
Edge cases with calculating cells
![]()
One-way streets
Edge cases with calculating cells
![]()
Roads without motor vehicles
Edge cases with calculating cells
![]()
Is this one cell?
Edge cases with calculating cells
![]()
Does this path leave the neighborhood?
Edge cases with calculating cells
![]()
Decision: separate cells
Predicting rat-runs
![]()
- What’s a rat-run?
- Why are some streets quiet?
Predicting rat-runs
Rat-run definition
- A shortest path starting and ending on the perimeter road
- Not the bigger picture
- Does this path save somebody time?
- How many people might take this shortcut?
Rat-run definition
![]()
- The start and end must be on different roads
- Name changes
Rat-run definition
![]()
In freeflow conditions, the perimeter road is faster
Rat-run definition
![]()
Force the shortest path to stay inside the neighborhood
Rat-run results
Rat-run results
Rat-run results
Defining a neighborhood
Defining a neighborhood
![]()
- This process will cross railroads, water
- If it didn’t, we’re fine with heavy traffic on the nearest local road
Defining a neighborhood
![]()
Sometimes major roads just end
Defining a neighborhood
![]()
Spaces in between motorway loops or dual carriageways
Boundary adjustment
- Plenty of reasons the heuristics aren’t perfect
- Road classification varies regionally
Boundary adjustment
Maybe road classification is worth revisiting!
- Different priorities about moving vehicles through an area
- Should that high street also be a through-route?
- Lots of resistance to LTNs is really resistance to the chosen boundary
Boundary adjustment
![]()
Don’t be too prescriptive; let users adjust
Boundary adjustment
Boundary adjustment
![]()
- Per block
- Partitioning into contiguous neighborhoods
- Adding a block to one neighborhood removes it from another
Blockfinding
- Trace around the edge of a road
- Uses the shape of roads and intersections, inferred from OpenStreetMap
- A block internally tracks a list of (road, left/right)
Merging two blocks
- Find the common slice of the perimeters
- “Rotate” the perimeter until the common part matches up
- Slice and stitch together
Merging two blocks
Merging two blocks
![]()
- Collapsing dead-ends
- Clockwise and counter-clockwise blocks
Blockfinding limitations
![]()
Only traces roads, not natural features
Blockfinding limitations
![]()
Edge of the study area
Blockfinding limitations
![]()
- Bridges / tunnels
- Trace the 2D area of the planar graph?
- Skip them?
Blockfinding limitations
Blockfinding limitations
![]()
You can’t always draw the boundaries you want
Assessing overall impact
![]()
- Show all rat-runs at once
- Rank neighborhoods by number of internal rat-runs
Assessing overall impact
- Is the rat-run realistic?
- How many people will try to take it?
- With new filters, how will traffic detour overall?
- Maybe spillover to another neighborhood
Assessing overall impact
![]()
- Where do driving trips begin and end?
- For neighborhood-scale detours, MSOA zones are too large
Assessing overall impact
![]()
- Calculate all driving routes before and after filters
- Look for quieter and busier streets
Assessing overall impact
- 2011 census data, commuting for work only
- Urban Observatories traffic counts
- Calibrate / validate
- Where do the 5,000 vehicles/hour along a road start and end?
- Bring your own demand model (doesn’t need to be public data)
Heuristics for placing filters
Heuristics for placing filters
- Human judgment
- Prioritize near parks, areas with prior problems
- Can the bin collection truck turn around?
- The use of automation
- Seed ideas
- Choice overload
Where should the filter go?
Where should the filter go?
![]()
- Greedy: the road with the most rat-runs
- Whack-a-mole
Where should the filter go?
- Only one entrance per cell
- Expensive, likely unpopular
- Very different results for residents
- Simpler crossings along the perimeter
Heuristics for placing filters
![]()
Split large cells (intuition)
Heuristics for placing filters
![]()
Minimum cut of the graph
Heuristics for placing filters
![]()
- Trivial solutions near the perimeter
- How large are the two resulting cells?
Heuristics for placing filters
![]()
Gridded streets?
Heuristics for placing filters