CargoRocket
CargoRocket | |
---|---|
License: | MIT License (free of charge) |
Platforms: | Android, iOS, and Web |
Languages: | English and German |
Website: | https://cargorocket.de |
Source code: | CargoRocket GitHub |
Programming languages: | Java, R, and React Native |
Specialized navigation for cargo bikes. Avoid barriers and too narrow cycleways which are not passable by cargobikes. |
For the special needs of cargobikes, CargoRocket develops a routing software which calculates appropriate routes for those bikes.
CargoRocket is developing a CargoBikeIndex which scores the streets for it's "cargobikability". For this, different indicators have been investigated and defined for now. Based on this research this model was elaborated to coincide with the specific OpenStreetMap Tags. Based on the Tags which are relevant for CargoBikes (see Cargobike), a priority has been elaborated.
Additional to the CargoBikeIndex, a routing software based on GraphHopper is in development to use the relevant tags to provide better navigation for cargobikes.
Tagging Outcomes
When developing the application, currently there have been the following tagging outcomes. the following ratings represent the ones of CargoRocket how they used in their products (April 2021). This can be a base reference for other cargobike applications, as these are based on tests on real conditions.
General Overview
These types of infrastructure could potential be problematic while using a cargobike and (most of them) can be tagged in OpenStreetMap. With some notes of outcomes and suggested improvements in tagging scheme which emerged while developing.
Type | OSM Tags (Selection) | Notes |
---|---|---|
Cycleway | highway=cycleway or | Tagging in OSM for cycleways varies very much. Especially whether cycleways are mapped as an own way or are part of highway. |
Barriers (width) | barrier=cycle_barrier and | Tagging width for barrier=cycle_barrier is not available yet, also very hard to describe via tags. However, a new proposal is trying to establish tagging for that.
Because of the wide variety of cargobikes, there is no specific width every cargobike can pass. |
Traffic calming | traffic_calming=* | Analogous to barriers in general, traffic calming tags to reduce the cargobikability for streets including this key. |
Cycleway width | width=* or
cycleway:width=* / cycleway:<side>:width |
It's hard to determine if this width is a a definite limit or not. For example if a shared foot-/cyclepath has segregated=yes, how can we determine if it has a physical segregation (e.g. green area or a curb) or just lane markings.
It is also harder to tag than most of other tags, since you need some type of measuring tape or an app. |
Incline | incline=* (Neither used nor recommended) | For incline no OSM tag is used. For routing applications and street scoring other approaches like SRTM is a better solution.
With the arrival of electrification of bikes in general this becomes less important with time. |
Surface condition | surface=* and | Problem of smoothness=* is, that it's not very objective and sometimes can be hard to determine when mapping. Maybe some new tag which objectifies the tagging in terms of potholes for example would be an option. |
Kerb/Curb | barrier=kerb, kerb=* and
height=* / kerb:height=* |
Especially for multi-track bikes kerbs can be a huge pain. They appear often on intersections, where also multiple can be in a row (e.g. on traffic islands). For routing it is easier when they are tagged as nodes, not as intersecting ways. |
Traffic (Motor vehicles) | traffic:hourly=* (not recommended and not used) | It's hard to determine the number of vehicles passing a street only based on |
Pedestrians | highway=pedestrian | In pedestrian downtown areas, where biking is allowed, usually the allowed maxspeed=* is very low. So it is not attractive for quick passing. Although additional factors can be markets (e.g. amenity=marketplace) which is time depending. |
Cross slope | incline:across=* | With multi-track cargobikes cross slope can be very unwieldy. |
Oneway streets | highway=* and
oneway:bicycle=no and |
Based on the width of the street itself and whether parking is allowed for motor vehicles (see street parking) it should be possible to determined if opposite driving is easy or not. |
Constructions | highway=construction (not useful) | Problem is, that many constructions are temporarily (like e.g. 2 days to 2 weeks), where tagging these is not practical. Ways with highway=construction are usually not passable and therefore not
considered when routing. |
New Tags
Definitiveness of wayside
While developing a cargobike application, the need for enhanced tagging emerged. Currently there is a problem with bollards. Some of them are located on ways, which have grass verge on the side of the way. So these barriers can be passed, if the driver is willing to use this green verge to drive around the barrier. This information is currently not derivable from the tagging scheme. Therefore we propose a new tag maxwidth:definite=yes (for barriers), width:definite=yes (for ways) and cycleway:right:width:definite=yes respectively cycleway:left:width:definite=yes (both ways). This tag implies, that the width of the way or barrier is definitely not passable by any circumstances, because there are other barriers on wayside. With value no passing over green verge is possible.
Describing Cycle Barriers
See Cargobike#Current_tagging_issues.
Ratings
In CargoRocket applications tags are rated in a specific way. For different kinds of cycle infrastructure, which the OSM tags are modelling from the real world, an own rating from 0 (impassible) to 5 (optimal) was developed. There is a total rating which is calculated using sub-ratings. These sub-ratings are calculated in the following manner.
Road Tags
Tags which describe the class and more in-depth attributes of roads and ways but not the condition of them.
Highway | Tags | Rating Street Type (0: impassible - 5: optimal) | Comment |
---|---|---|---|
general tags applicable to all highways | |||
* | bicycle_road = yes | 5 | any street marked as bicycle road |
motorroad = yes | 0 | any streets marked as motorroad | |
access IN (agricultural, customers, delivery, private, permit, bus, public_transport, emergency, forestry) AND bicycle NOT IN ( yes, designated, permissive, dismount) | 0 | no access for unauthorized people | |
cycleways | |||
cycleway | default (no width specified) | 3 | |
width < 1.2 | 1 | ||
1.2 <= width < 1.6 | 3 | ||
1.6 <= width < 2 | 4 | ||
width >= 2 | 5 | ||
oneway = no AND width < 2.4 | 1 | ||
oneway = no AND 2.4 <= width < 3.2 | 3 | ||
oneway = no AND 3.2 <= width < 4.0 | 4 | ||
oneway = no AND width >= 4 | 5 | ||
* | cycleway = track (no width specified) | 3 | Tag cycleway can be combined with any other highway. Tag cyleway can also be speficied through cycleway:right, cycleway:left or cycleway:both. For better readability only cylceway is written in this table. |
cycleway = track AND cycleway:width < 1.2 | 1 | ||
cycleway = track AND 1.2 <= cycleway:width < 1.6 | 3 | ||
cycleway = track AND 1.6 <= cycleway:width < 2 | 4 | ||
cycleway = track AND cycleway:width >= 2 | 5 | ||
cycleway = track AND cycleway:oneway = no AND cycleway:width < 2.4 | 1 | Twoway cycleway track. | |
cycleway = track AND cycleway:oneway = no AND 2.4 <= cycleway:width < 3.2 | 3 | ||
cycleway = track AND cycleway:oneway = no AND 3.2 <= cycleway:width < 4.0 | 4 | ||
cycleway = track AND cycleway:oneway = no AND cycleway:width >= 4 | 5 | ||
cycleway = lane (no width specified) | 4 | Cycleway lane on the road. From a security perspective this might be less safe than a cycleway track. Though a narrow lane is better accessible for cargo bikes as they are not physically limited by the width of the track. | |
cycleway = lane AND cycleway:width < 1.2 | 2 | ||
cycleway = lane AND 1.2 <= cycleway:width < 1.6 | 4 | ||
cycleway = lane AND 1.6 <= cycleway:width < 2 | 4 | ||
cycleway = lane AND cycleway:width >= 2 | 5 | ||
cycleway = opposite_lane | 5 | A designated cycle lane in the opposite direction of a oneway street. | |
cycleway = opposite | 3 | A oneway street without a designated lane. Often those streets are narrow and opposite traffic is hard to pass. | |
cycleway = shared_lane | IGNORE | This indicates that there is no extra cycleway, instead the street is shared with cars. | |
cycleway = shared | IGNORE | This indicates that there is no extra cycleway, instead the street is shared with cars. | |
cycleway = share_busway | 3 | ||
cycleway = separate | IGNORE | This indicated that there is an extra Element in OSM which should be used instead for bicycles. | |
other highway values without additional cycleway Tag | |||
bridleway | default (bicycle not specified) | 0 | Cyclists and pedestrians not allowed on bridlways by default. |
bicycle IN ( yes, designated, permissive) | 2 | ||
busway | default (bicycle not specified) | 0 | Cyclists and pedestrians not allowed on busways by default. |
bicycle IN ( yes, designated, permissive) | 3 | ||
corridor | default (bicycle not specified) | 1 | Bicycles need to be pushed. |
bicycle IN ( yes, designated, permissive) | 1 | ||
escape | 0 | ||
footway | bicycle IN (NA, no, dismount) | 1 | Cyclists have to dismount, as they are not explicitly allowed. |
footway | bicycle IN ( yes, designated, permissive) | 2 | Cyclists share the path with pedestrians. |
footway | bicycle IN ( yes, designated, permissive) AND segretated = yes | 3 | Pedestrians and cyclists have separated ways. No further information on the cycleway is given - otherwise the above rating for cycleways apply. |
living street | bicycle != no | 4 | |
motorway OR motorway_link | 0 | ||
path | default | 2 | |
path | segregated = yes | 4 | Pedestrians and cyclists have seperated ways. |
pedestrian | bicycle = NA | 1 | Cyclists have to dismount, as they are not explicitly allowed. |
pedestrian | bicycle IN ( yes, designated, permissive) | 2 | Cyclists share the path with pedestrians. |
bicycle IN ( yes, designated, permissive) AND segretated = yes | 4 | Pedestrians and cyclists have seperated ways. | |
platform | 0 | ||
primary OR primary_link | bicycle != no | 1 | |
proposed | 0 | ||
residential | bicycle != no | 4 | |
road | bicycle != no | 2 | |
secondary OR secondary_link | bicycle != no | 2 | |
service | bicycle != no | 2 | |
steps | 0 | Stairs cannot be passed with cargo bikes. | |
tertiary OR tertiary_link | bicycle != no | 3 | |
track | default (tracktype not specified) | 1 | |
track | bicycle IN (no, dismount) | 1 | Cyclists have to dismount. |
track | tracktype = grade1 | 4 | |
track | tracktype = grade2 | 3 | |
track | tracktype = grade3 | 1 | |
track | tracktype = grade4 | 1 | |
track | tracktype = grade5 | 0 | |
trunk OR trunk_link | default (bicycle not specified) | 0 | If not stated otherwise bicycles are not allowed on trunks. |
trunk OR trunk_link | bicycle IN ( yes, designated, permissive) | 2 | |
unclassified | bicycle != no | 2 |
Surface Rating
Surfaces describe one aspect of conditions of roads and ways. Usually only paved streets are utilisable for cargobikes. Therefore water-bound ways or unpaved ways in general should be avoided.
Tag | Value | Rating Street Type (0: impassible - 5: optimal) |
---|---|---|
smoothness | excellent | 5 |
good | 4 | |
intermediate | 3 | |
bad | 2 | |
very bad | 1 | |
horrible | 0 | |
very horrible | 0 | |
impassable | 0 | |
surface | paved | 4 |
asphalt | 5 | |
paving_stones | 4 | |
concrete | 4 | |
concrete:plates | 4 | |
concrete:lanes | 2 | |
sett | 2 | |
cobblestone | 2 | |
cobblestone:flattened | 2 | |
unhewn_cobblestone | 1 | |
unpaved | 1 | |
compacted | 3 | |
dirt | 1 | |
earth | 1 | |
fine_gravel | 2 | |
grass | 1 | |
grass_paver | 1 | |
gravel | 1 | |
ground | 1 | |
metal | 3 | |
mud | 0 | |
pebblestone | 1 | |
salt | 1 | |
sand | 0 | |
rock | 0 | |
wood | 1 |
Barrier Rating
Rating barriers based on width of vehicle with some generalizations. They are used to multiply with the rating of the roads and ways. Therefore a street which is paved, has an excellent smoothness and a rating of 5, but has an cycle barrier as a node on it, would have a total rating of 0 (5 [road rating] * 0 [barrier multiplier = 0]).
Barrier | Multiplier | |
---|---|---|
Barrier | ||
cycle_barrier | 0 | |
bollard | (no maxwidth or maxwidth:physical specified) | 0.8 |
bollard | maxwidth OR maxwidth:physical < 0.9 m | 0 |
bollard | maxwidth OR maxwidth:physical < 1.0 m | 0.2 |
bollard | maxwidth OR maxwidth:physical < 1.2 m | 0.4 |
bollard | maxwidth OR maxwidth:physical < 1.5 m | 0.8 |
bollard | maxwidth OR maxwidth:physical >= 1.5 m | 1 |
block | (no maxwidth or maxwidth:physical specified) | 0.8 |
block | maxwidth OR maxwidth:physical < 0.9 m | 0 |
block | maxwidth OR maxwidth:physical < 1.0 m | 0.2 |
block | maxwidth OR maxwidth:physical < 1.2 m | 0.4 |
block | maxwidth OR maxwidth:physical < 1.5 m | 0.8 |
block | maxwidth OR maxwidth:physical >= 1.5 m | 1 |
lift_gate | (no maxwidth or maxwidth:physical specified) | 0,8 |
lift_gate | maxwidth OR maxwidth:physical < 0.9 m | 0 |
lift_gate | maxwidth OR maxwidth:physical < 1.0 m | 0,2 |
lift_gate | maxwidth OR maxwidth:physical < 1.2 m | 0,4 |
lift_gate | maxwidth OR maxwidth:physical < 1.5 m | 0,8 |
lift_gate | maxwidth OR maxwidth:physical >= 1.5 m | 1 |
kerb | (no height specified) | 0.4 |
kerb | kerb = raised | 0.2 |
kerb | kerb = lowered | 0.6 |
kerb | kerb = flush | 1 |
Traffic_calming | ||
bump | 0.6 | |
mini_bumps | 0.6 | |
rumble_strip | 0.6 |