Thanks for the detailed feedback!
Tag Mapping
I’ve added the detailed tag mapping plan to the wiki here as requested.
Intersection Splits
Regarding the concern about the near-intersection splits, it seems like there are two subpoints:
- The precision of the source SFMTA dataset, ie. whether it has enough precision at the intersection to justify splitting the corresponding OSM ways to match.
- To what granularity curbs or parking restrictions ought to be mapped in the first place, especially as it pertains to intersections.
Source Geometry Precision
For the source geometry precision, I investigated more closely, including measuring all eight incoming curb endpoints at several ordinary four-way intersections.
It turns out endpoints are not arbitrary fixed offsets from the intersection. SFMTA maintains a separate Blockfaces dataset, described as curb-line geography created using manual drawing, street-centerline offsets, and a blockface-generation tool. Its underlying SFMTA curb layer distinguishes straight blockface segments from separately modeled intersection curb returns.
The time-limit geometries here closely follow those straight blockfaces. At Green Street and Baker Street, for example, all eight time-limit endpoints were within approximately 0.2–0.8 m of the corresponding current SFMTA blockface endpoints. I found the same pattern at 22nd Street/Chattanooga Street, 19th Street/Mississippi Street, and Howth Street/Niagara Avenue, generally within about 1 m.
Across 400 ordinary four-way intersections where all eight source endpoints could be identified:
- The median endpoint distance from the OSM intersection center was 11.15 m.
- The median full gap between opposing blockfaces was 22.04 m.
- The endpoints moved outward as the crossing street became wider.
- The two curb endpoints on the same approach were usually closely aligned.
The gaps therefore appear to represent the physical intersection and corner/curb-return geometry excluded from SFMTA’s straight blockface model. They are not just a constant buffer added to every intersection.
Based on that, I am leaning toward retaining the source-supported blockface boundaries rather than snapping every endpoint to the OSM junction node. Snapping would extend a positive SFMTA time-limit rule into an area that the source deliberately excludes from the blockface. For granular curb applications, such as estimating parking lost to a bike lane or identifying a valid robotaxi pickup location, I would prefer not to make the imported rule look spatially broader than the source supports.
You make a good point about marking parking=no on intersections to coherently explain the inclusion of these splits. I think that makes a lot of sense in most cases, but I’d like to handle that as a separate task ideally. Although the gap generally contains intersection, crosswalk, and curved-corner space where parking is unavailable, this dataset does not distinguish the exact reason or legal boundary. Some restrictions arise from the intersection itself; others may involve crosswalks, daylighting, red curbs, curb extensions, driveways, hydrants, or other features.
I would instead treat explicit intersection and other short no-parking intervals as a follow-up curb-mapping project. SFMTA has described a broader Digital Curb Program, which may eventually provide a better basis for importing more complete curb-use information. I was informed that this is launching publicly in the next few months, and would provide a rich source of granular data for import. So followup imports could address intersection restrictions together with daylighting, driveways, hydrants, color curbs, loading zones, and other granular curb uses.
Weighing Pros/Cons, Precedent for Granular Way Splitting
There is precedent in OSM for this level of parking detail, though there doesn’t appear to be a clear consensus. For most cities, there is very little curb rule coverage, yet alone granular coverage (There’s some feedback loop between little OSM curb consumption by applications and little motivation for curb mapping. Culturally it seems like curb mapping is less emphasized relative to other features, and the tooling/syntax is not the best for it at this time. But this can be discussed separately.) The street-parking documentation allows roadways to be split where parking properties change, while noting that short implicit restrictions may alternatively be derived by data consumers. So we have two potential approaches. For one example of granular mapping of even implicit restrictions, see Berlin, one of the cities with the most OSM curb rule coverage. Berlin has extensive granular parking mapping and an open methodology for deriving usable parking segments after subtracting junction clearances, bus stops, driveways, street furniture, and similar obstacles:
Berlin also contains explicitly mapped short junction restrictions, for example:
Personally, I’ve also done some manual mapping of Santa Rosa, CA on the ground with this level of granularity:
This does impose a maintenance cost through additional way segments. I think that tradeoff is justified where the boundaries come from meaningful curb geometry and the splitting is done safely. Ultimately better tooling does become necessary as splits increase in the long term. But shying away from this leads to other proprietary platforms capturing most of the granular rules/inferences necessary to reason about the curb. The current import is careful to preserve all existing relations when performing the split (eg. bus routes, turn restrictions).
So the proposed treatment is intentionally asymmetric: preserve the positively supported time-limit interval now, do not extend it across the intersection, and do not yet infer the complementary parking=no geometry. Explicit, granular no-parking mapping would follow when suitable curb and restriction sources can support it.
If this is not amenable to the community, I can try and infer an extension of parking rules across intersections to avoid the split. However, this introduces the risk of making wrong inferences and accidentally extending across intentional gaps in the dataset. There are some unmapped zones near intersections such as this one on Hayes St where parking is explicitly disallowed (confirmed by checking on the ground), and we’d want to be careful not to extend the blockface incorrectly there.
If these inferences were made, it would also require potential cleanup in the future if we do want to go ahead and include granular intersection zones.
I would be in favor of conservatively sticking to snapping the existing SFMTA dataset near intersections as is, and later mapping explicit no parking zones at intersections and other areas based on other granular data. This introduces the least accuracy risk right now and leaves the door open to further granular mapping, albeit at the cost of more splits.
I appreciate any further feedback! It’s worthwhile to get curb conventions right.