How is bike_network == MISSING evaluated?

After testing, it is not clear to me what data in OpenStreetMap is evaluated with bike_network == MISSING?

Is it the RELATION with KEYS: cycle_network, route, type, network? For “network” most common types are rcn and lcn. I would presume route=bicycle. cycle_network is a text field contains the name of the network to which many routes may belong. Not all route=bicycle will necessarily belong to an official network, but are a signed route ie. cycle_network may be missing.

Is it using the highway TAG which can have many values including living_street, pedestrian, footway, path or cycleway. For any of these, the WAY may have the TAG bicycle=designated or bicycle=yes. Neither of these things say if the living_street, pedestrian, footway, path or cycleway is part of a route.

Which of this data is used by GraphHopper routing?

Take a look here: https://github.com/graphhopper/graphhopper/blob/7e0d17a79165146df1b6f09d4ccf1d356e2fced2/core/src/main/java/com/graphhopper/routing/util/parsers/OSMBikeNetworkTagParser.java#L42-L56

The bike_network encoded value is based on relations tagged as route=bicycle and the network tag. GraphHopper distinguishes network=lcn/rcn/ncn/icn. All ways that are not part of such a relation will be flagged with bike_network==MISSING.

The OSM highway tag is used to set the road_class encoded value (can be LIVING_STREET, FOOTWAY etc.). Access tags like bicycle=designated are used to determine the speed/priority of ways as well as the bike_access encoded value.

2 Likes

Thanks. Very helpful. :slight_smile: