RPP QC 2021 Project

Background

DDOT has maintained GIS data on the locations of RPP (Resident Parking Permit) locations for a number of years (RPP Blocks).  Unfortunately, the data are not regularly quality-checked (QC'd) and over the years, it has become apparent that there are inaccurate locations in the RPP Blocks GIS data.  Starting in December 2020 and continuing into February 2021, DDOT coordinated with a consultant (Kimley-Horn, working under a contract with DPW) to analyze the current state of RPP locations and provide a listing of corrections.

Pre-QC Automated RPP checks

DONE

Initial Automated Checks (via DDOT script)

As part of its continued efforts to build and perfect its linear referencing system (LRS), DDOT created a script that checked RPP signage on one or both sides of the street, matching RPP sign data to the SubBlock RPP data.

In the initial QC table table, filter for RPP_QC IS NULL; these will be the subblocks which need to be reviewed (4612 records total).  Many of these will be cases where 2 or more subblocks belong to a single street block.  The list were provided to the consultant (Kimley-Horn) for QC.

RPP QC Process

DONE

Overview

Using DDOT's Roadway SubBlock dataset representing the near-full extent of the District's roadway centerline network, a binary residential parking permit (RPP) layer was created [RPP_V1].

  • RPP_V1 = 1 where RPPSIDE <> ' ' OR where not flagged and overlap with existing RPP block data (not included in Roadway_SubBlock but marked as RPP in the map referenced by the public)
  • 10,000/34,427 SubBlocks = ~459 centerline-miles containing RPP

Building up the QC Workbook

  • Using Google Street View metadata, each SubBlock was assigned a date based on the most recent capture date of the Street View taken closest to the latitude and longitude of its centroid. SubBlocks with a Google Street View capture date [STREET_VIEW_DATE] older than January 2019 were removed, and the remaining SubBlocks constituted the SubBlocks to be reviewed individually via Google Street View [RPP_QC].
    • RPP_QC = 1 where RPP_QC = 1 AND STREET_VIEW_DATE >= January 2019
    • 3,479/4,612 SubBlocks (75% capture)
  • Below is a copy of the QC Workbook used by KH staff

QC Workflow Steps

  • Using Microsoft Excel and Google Street View, each of the 3,479 SubBlocks were reviewed by going to the Street View located closest to the centroid of each SubBlock and checking each side of the street for RPP and resident only parking (ROP) signs. Each SubBlock received one of the following values for both the "Even" and "Odd" side of the street:
    • 0 = no RPP/ROP present (may be no parking, unrestricted parking, metered parking, etc.)
    • RPP = RPP signs seen anywhere within the SubBlock
    • ROP = ROP signs seen anywhere within the SubBlock

Post-QC Review

  • Upon completing this initial review, a formulaic check was run to look for SubBlocks that were:
    • Previously marked as having RPP on both sides in RPPSIDE, AND
    • Marked as having no RPP/ROP present on either side of the street in the Street View QC, AND
    • Located directly before or after another SubBlock in RPP_QC that contained RPP/ROP
    • Formula: CHECK_1 = 1: IF(AND('BLOCKKEY' = 'PREVIOUS BLOCKKEY', 'RPP_QC' = 1), IF(OR('Even' <> 'Previous Even', 'Odd' <> 'Previous Odd'), IF(AND('Even' = 0, 'Odd' = 0), 1, 0), 0), 0)
    • 119/3,479 SubBlocks from RPP_QC were flagged
  • These flagged SubBlocks were reviewed again and marked as "OK" or changed to RPP/ROP, and then a second RPP attribute layer was created to reflect revised RPP SubBlocks [RPP_V2].
    • RPP_V2 = 1 where confirmed RPP by DDOT script or Street View QC process
    • Formula: RPP_V2 = 1: IF('RPP_V1' = 1, IF('RPP_QC IS NULL' = 0, 1, IF('RPP_QC' = 0, 'RPP_V1', IF(OR('Even' = "RPP", 'Even' = "ROP", 'Odd' = "RPP", 'Odd' = "ROP"), 1, 0))), 0)
    • 8,493/34,427 SubBlocks = ~389 centerline-miles containing RPP (~15% reduction from RPP_V1)

Qualitative Review

  • Finally, a qualitative review of this new RPP dataset (RPP_V2) was conducted in ArcGIS. The SubBlock linework was given symbology to show lines that were removed from RPP_V1 in red, lines maintained or added to RPP_V2 in green, and lines not in either RPP dataset in grey. The following were visually inspected:
    • Circles ["STREETTYPE" = 'CIR']... Particularly where red, green, and/or grey lines present within the same circle
    • Principal arterials ["FHWAFUNCTI" = 3]...Particularly where red and green lines were directly adjacent or where RPP/ROP seemed out of place based on engineering judgment
    • Residential alleys ["STREETTYPE" = {'ALY', 'CT', 'LN', 'MEWS'} AND RPP_V2 = 1]... Residential developments with no RPP/ROP signs, a private gate, and/or non-standard RPP/ROP signs were removed from RPP_V2.
    • General spot checks and revisions were conducted if/when out-of-character RPP/ROP SubBlocks were flagged.

Results

  • This multi-level QC process resulted in a final revised RPP SubBlock layer [RPP_V2] that represents:
    • 8,171/34,427 SubBlocks = ~373 centerline-miles containing RPP (~19% reduction from RPP_V2)

RPP Update Script

IN PROGRESS

Taking the results of the multi-level QC process described above, each corresponding Subblock was checked and the values found in the QC (RPP on Odd side/ Even side/ Both sides) was translated into Inbound and Outbound side and updated on the DDOT LRS RPP layer.

Below are the steps taken by the Python script:

  1. Make a dictionary to match against for ODD/EVEN address ↔ INBOUND/OUTBOUND LRS side.
  2. Iterate over each of the Subblocks in the QC sheet:
    1. Find Odd/Even QC Values in sheet
    2. Translate from Odd/Even to LRS Inbound/Outbound
    3. Store result in-memory
  3. Match RPPBlocks to Subblocks via LRS overlay
  4. Iterate over LRS Overlay result:
    1. Find subblock in-memory
    2. Take RPP values found and store/associate to each RPP Block
    3. Mark each RPP Block w/update note indicating QC-based change ("RPP-QC-2021 Update")