If a mapper is on a field survey, how should they explicitly indicate that the road segment they’re standing beside has no speed limit sign in sight? In most of the country, speed limits are routinely signposted. However, the speed limit may be posted on a sign farther away, such as at the entrance to the neighborhood or the city limits, or it may be established by state law or local ordinance based on certain criteria. The specific situations when this occurs vary from state to state.
The global community previously debated what to do about the complex system of speed limit laws in the U.S. but didn’t come to a clear agreement on a solution. A straw poll at the time resulted in a majority against speed_limit_implied=yes.
In the U.S., it has long been common practice to fill in maxspeed=* mph with the correct value whether or not it is signposted. Some mappers prefer to first blanket the map with speed limit tags based on heuristics, such as applying maxspeed=25 mph to all the highway=residential ways within the city limits. Afterwards, they’ll inspect individual streets in street-level imagery or in field surveys, correcting each one as it turns out to have a higher or lower speed limit. By contrast, other mappers prefer to map maxspeed=* based on imagery or field survey. Only once they’ve finished examining all the streets do they backfill any missing speed limit based on state or local law. Occasionally, two mappers working in the same locality have fought bitterly over which approach to take.
A field editor such as StreetComplete makes it easy for mappers on the ground to survey speed limits and could potentially head off these conflicts. By design, StreetComplete would always apply some tag to the roadway, even if all it means is that the user couldn’t answer the question specifically. This prevents the application from asking a subsequent user for an explicit speed limit that they can’t provide either. Since a user standing by the curb won’t have a compendium of state statutes handy, it doesn’t require them to come up with a numeric speed limit, but they do have to choose a symbolic speed zone.
@westnordost has compiled a digest of state speed limit laws and developed the osm-legal-default-speeds library to parse that digest into machine-readable rules. A router would use that library to estimate a travel time along the roadway even if no sign is present.
The next release of StreetComplete will come with a question about speed limits. If the user can’t see a speed limit sign from where they’re standing, they have to choose between “built-up” and “not built-up”. These two options correspond to legal provisions about built-up areas in many states. It’ll result in tags like maxspeed:type=US-VA:rural and maxspeed:type=US:CA:urban, which until now have been very rare.
This feature promises to increase coverage of speed limits in the U.S. However, I’m concerned that the average user will have very little awareness of whether they’re standing in a “rural” or “urban” district according to the relevant speed law. For example, is a suburban residential area “urban”? Is a business strip along a rural highway still “rural”? Only Iowa, New Jersey, and Wisconsin have a distinct suburban speed limit. Most states only additionally distinguish between residential and business districts.
The main purpose for this “built-up” or “not built-up” choice is to indicate “I couldn’t tell on the spot.” If both US-*:rural and US-*:urban mean roughly the same thing, then it doesn’t really matter if the user sometimes chooses a value inconsistent with whatever invisible line is being drawn by state law. Unfortunately, the difference between these values can be upwards of 40 miles per hour in some states, all things being equal. I’m concerned that this is what osm-legal-default-speeds will be telling routers to assume based on the tagged values. I don’t think it’s entirely unlikely that some applications might even misuse the library to display a wildly incorrect speed limit to the user.
Can we come up with an alternative tag to mean “no speed limit sign here”, to avoid muddling the distinction between rural and urban in maxspeed:type=*? @westnordost has indicated an openness to switching to an alternative that we come up with, but we would need to come to a decision before the next release puts the question in users’ hands.






