How to tag fees for bicycles on ferries?

While discussing a new street complete quest some differences in understanding of the fee:bicycle / toll:bicycle tags came up: Quest: Do you need to pay to use this ferry? · Issue #6333 · streetcomplete/StreetComplete · GitHub

For this discussion and examples I will use the fee tag, but I assume any conclusion also applies to the toll tag.


For example, imagine a ferry where pedestrians and cyclist need to pay the same fee, as in there is no additional fee for bringing a bike on board. How would you tag this?

  • fee:foot=yes AND fee:bicycle=no. Here fee:bicycle is understood as “do you need to pay a fee to transport your bike?”
  • fee:foot=yes AND fee:bicycle=yes. Here fee:bicycle is understood as “do cyclists need to pay?”

Arguments for the former:

  • Depending on jurisdiction when you dismount the bicycle you might no longer be considered to be the “cyclist” but instead a regular “pedestrian” anyway.

Arguments for the latter:

  • For the vast majority of users, the information “do I need to pay” is more interesting than “do I need to pay extra for my bicycle”. This sheme allows for this more relevant information to be accessed more easily.
  • The existence or lack of an additional fee for bicycles can already be stored in the charge:bicycle field (see How to tag fees for bicycles on ferries? - #4 by wombatmaper)
  • This would presumably also apply to other vehicles (people in cars often also need to get out), and creates weird issues with ferries where, for example, pedestrians and cars require a fee, but the fee for the car is independent of the amount of people inside (and thus the people in the car could be considered “free” to transport).
2 Likes

There is some push for bicycle=dismount where pushing is allowed, but riding is not.
W.r.t. the fees, I don’t think that any ferry would or even reasonably could make that distinction.

That you have to pay extra for your bike can be deduced via charge:bicycle - charge:foot if anyone is interested in that. As you say, the more useful information is just the amount that needs paying.
You don’t explicitly mention it, but charge:bicycle imo should be the total cost of rider + bike.

If the charge is for the motor vehicle with all goods and people included, it’s just charge:motor_vehicle=*. If there are thresholds, I would map such charges via conditional tagging. E.g. car itself costs 20, driver and 1 passenger free, otherwise it costs 50:

charge:motor_vehicle=50
charge:motor_vehicle:conditional=20 @ (occupants < 3)

Note that the number of occupants is a property of the car.

That’s how I’d interpret and use these tags based on my experience with access tagging and conditionals in other circumstances.

That option would sound awfully inconsistent to me. If I understand your suggestion correctly, in one case (fee) :bicycle would mean “only the person, not the bicycle”, and yet in another (charge) :bicycle would mean “only the bicycle, not the person” ?

IOW, the combination fee:bicycle=yes + charge:bicycle=0 is nonsensical to me, as is fee:bicycle=no + charge:bicycle=5€


I strongly prefer consistency instead, i.e bicycle always means (just) bicycle”. So, IMO:

  • bicycle=no - bicycle itself is not allowed to be taken onboard (it says nothing about “the cyclist”, i.e. the person which was riding the bicycle just seconds ago[1]).

  • fee:bicycle=no - you don’t have to pay for the bicycle. Whether the person(s) who were riding the bicycle previously (i.e. “the cyclist(s)”) but are now on foot have to pay would not be indicated by this tag. This tag also says nothing about whether the passengers on the bicycle (e.g. kid in a back or front seat) has to pay for a ticket or not (so we don’t have to bother ourselves with defining whether they were cyclists or not).

  • charge:bicycle=5€ - you have to pay 5€ for the bicycle itself, regardless if that is single-person MTB bicycle, tandem bike for two riders, or cargo bike for rider and 2 passenger kids. It also says nothing about which amount (if any) each person that was on the bicycle (as a driver, or as a passenger) has to pay for themselves (as persons). Those would be indicated by other charge:* (and/or fee:*) tags.


On a somewhat related note, I’m not a big fan of charge:*:

  • The prices change way too often (especially re inflation in last decade or so), and
  • the specifics for calculating price are (at least over here) usually much too complex.
  • Also AFAIK no data consumer is even able to parse those charge:*:condition as suggested above, so meticulously tagging those is exercise in futility IMHO.
    Might as well just use charge:description with plaintext human-readable description instead (or much better charge:url, if available!)

  1. but as you note, in my jurisdiction I would assume they would dismount when boarding the ferry, thus becoming pedestrians, instead of driving bicycle in circles on a ferry ↩︎

1 Like

My bad, I expressed myself unclearly. No I personally would prefer using charge:bicycle to measure the total amount a cyclist (bike + rider) would need to pay. So charge:bicycle=5 and charge:foot=5 would imply that both pedestrians and cyclists would pay the same (and there is no additional fee for the bike), while charge:bicycle=6 and charge:foot=5 implies an additional cost of 1 to bring the bike onboard.

This solution also avoids any math for the data consumer.

I encountered this question recently. A problem is toll:*= is seen as traffic modes, not items. Consistency with other vehicles is desired.
One of my thought is to consider exploiting charge= units to clarify, and expand fee= beyond =yes

toll:bicycle=yes
charge=2 EUR
charge:bicycle=3 EUR/adult
fee:bicycle=included

vs

toll:bicycle=yes
charge=2 EUR
charge:bicycle=1 EUR/bicycle
fee:bicycle=additional

It can be formulated as how the prices are officially listed. This avoids further math and thinking.
Alternatively charge:bicycle=1 EUR/adult; 1 EUR/bicycle

This seems inconsistent with how we use bicycle=* in other context though. For example a path with bicycle=yes and foot=no implies that a person may ride the bike on this path, (otherwise the bike would need to be self driving?).

1 Like

The rider is not a pedestrian, so I don’t see any inconsistency.
If you consider the rider a property of the bike, it’s like the occupants for cars.

I like this idea. Keeps things simple and aligned with what is advertised. Though I might add that this should probably be handled as a special case for bikes, instead of some general tagging, since it’s not immediately obvious what “additional” refers to as base price (before addition of the bike).
Then again, if charge:foot isn’t too complicated, then it may also be included in charge:bicycle.

1 Like

What if there are multiple riders on the one bicycle (i.e. tandem bike)? What if there are multiple persons on one bicycle (which is different then above, e.g. child seat)?

So, in that example, in case of tandem bike, it would imply to me that the other rider of the same bicycle does not have to pay anything?

only because it makes it completely impossible for many of them to know if and what they are going to be charged :smiling_face_with_sunglasses:

I think it would be much more simple and usable if charge:bicycle was about bicycle only, even if it requires some trivial math (e.g. for your example, 1 eur per bicycle + 2 * 5 eur for each person = 11 eur total for that tandem)

What? bicycle=yes + foot=no IMHO means: you are allowed to ride the bicycle there, but the people are not allowed to walk on foot there. In fact, it is quite common tag combination e.g. on dedicated cycleways which do not allow pedestrians.

IOW, foot=* indicates only people moving on foot, not any kind of person moving in/on any kind of vehicle.

If your interpretation (as I understand it) (i.e. bicycle=* means any person who is, or very recently was, on a bicycle) was correct, it would mean that on such dedicated cycleway it would be OK to dismount and walk leisurely – and that is definitely not a case for any instance of foot=no I am aware of.

Sure, consistency is good. As I read toll:*, it is about vehicle used, i.e. (quote from the wiki):

Where only certain classes of vehicles are tolled then this can be indicated using toll:hgv=yes or toll:bicycle=no.

It does not seem to say anything about persons in (or driving) the vehicle (be it car or bicycle or whatever). It would make sense to me fee:* would work similarly to toll:* too.

Better tagging schema might be interesting, yes. In fact, you could drop confusing :* suffix entirely, e.g. just go with something like:

charge=5 EUR/adult; 2 EUR/child; 1 EUR/bicycle; 30 EUR/motorcar; 50 EUR/hgv

1 Like

Funnily enough, I happen to own a tandem, and when I have used a ferry or train, the fee has always been kind of … arbitrary. Most staff decided on an ad-hoc basis, and it seems impossible to map since there is never a actual policy around it, and might differ from staff to staff. Considering how rare such bikes are, I dont think we should engineer tags around such extremely rare edge cases. Maybe in future a fee:tandem tag could be added?

What if there are multiple persons on one bicycle (which is different then above, e.g. child seat)?

More common, but I guess this mostly depends on the age of the child right? Seems like there would need to be a conditional statement anyway.

I know, and I am pointing out the inconstancy in your tagging suggestion

IOW, foot=* indicates only people moving on foot, not any kind of person moving in/on any kind of vehicle.

Exactly, so not a person moving in/on a ferry right? Since ferries are vehicles. Then why use fee:foot for people moving in/on ferries?

My experience is tandem is counted as a bicycle on ferries, as it is on the trains[1].On airplanes, it is counted as oversized cargo, and price depends only on dimensions and weight[2] (regardless if it was bicycle or server rack).

Well, I just don’t see what you meant then? I’ve tried to explain why I don’t see any inconsistency (but in fact, strong consistency) with my interpretation; but we seem not to not be connecting :man_shrugging: . You said this:

Can you elaborate in more details how you’ve come from those two tags to conclusion that “my” interpretation is inconsistent (inconsistent with what, and inconsistent in which way? And how would a consistent interpretation look in your opinion?)

Because at least I (and @Jofban) completely fail to see the alleged inconsistency?

And especially your sentence with “self-driving bike” seems totally out of place (I can only see that meaning if one assumes that foot=yes would mean “any person regardless of their transport mode” which is totally opposite of how I interpret foot=yes (which is “only persons moving on foot”, i.e. not cyclists nor motorists persons)?

Maybe it is a language barrier (English is not my native tongue), but I completely fail to see how you make those connections? Why wouldn’t a fee:foot tagged on ferry terminal/route apply to people moving on ferry by foot?

To (attempt to) clarify, by “vehicle” in “not any kind of person moving in/on any kind of vehicle” above I’ve meant “[…] vehicle to be transported by the ferry” (e.g. usually “bicycle” or “motorcycle” or “motorcar”), and not the ferry itself[3]

So, to me (to try to explain by rephrasing):

  • fee:foot=yes tagged on some ferry terminal/route means that “people on foot” have to pay to use the ferry (even if they were in a car, on a bicycle, on a motorcycle, etc. just moments before the ferry left the terminal)
  • fee:motorcar=yes on some ferry terminal/route means that someone has to pay for the car itself. Whether the person who was driving the car before boarding and passengers on that car also have to pay would be indicated by fee:foot (as they exit the car during the ferry trip – at least over here)
  • fee:bicycle=yes on some ferry terminal/route means that someone has to pay for the bicycle itself. As for persons, same rules as motorcar above.

  1. whether you’ll have enough space in particular Croatian train is another problem, but that also affect you with “regular” bike. We don’t seem to have caught up to all those “multimodal transport” EU recommendations :cry: ↩︎

  2. “luckily”, you’re spared the calculations, because the price usually ends up being so enormous, that you’re much better off just buying the used desired type of bicycle upon arriving on your destination (and reselling it for half price before you return). Perhaps carry you favourite saddle if you’re planning on longer trips. ↩︎

  3. of course anything and anyone transported on the ferry is going to be “transported by the ferry”, if that is what you though it meant? ↩︎

I don’t think this statement is consistent with actual usage. In essence, I agree with @wombatmaper, so I’m gonna assume that this explanation is what they mean:

If indeed bicycle only refers to the vehicle itself, then bicycle=yes only means that the vehicle is allowed, saying nothing about the rider. So do we tag that the rider is also allowed there?

No, we don’t. Thus, it is implied that if a bicycle is allowed to drive somewhere, its rider is too. bicycle=yes as a transport mode therefore refers to both the vehicle as well as its rider. That seems consistent to me.

Here, the bicycle does refer only to the physical bicycle. The values here aren’t transport modes; note that it’s nonsensical to put charge=4 EUR/foot there (at least it’s not intuitive that it would refer to pedestrians).

In essence, there is a difference between the object and the transport mode, and both are called the same within OSM tagging. Differentiating them would probably only be possible via renaming the transport mode - not likely to happen.

1 Like

I don’t favor charge=50 EUR/hgv , as it causes complicated units with =50 EUR/hgv/axle
It’s simpler to split them into charge:motorcar= and charge:hgv=
I only considered =1 EUR/bicycle to solve bikes. Are there any confusion for how other vehicles are charged?
If needed, the opposite method would be to define charge:bicycle= as the base price. Make charge:adult= as additional. However, the treatment of charge= needs to be thought carefully here. Maybe charge:foot= needs to be used explicitly.
Yet another method would eg charge:cargo:bicycle=1 EUR / charge:cargo=1 EUR/bicycle (further allowing general cargo 1 EUR/cubic_metre to be added somewhere)

I’m not sure that fully accounts for ferries like this one across the River Shannon or this one across the River Lee, where there is a fixed price for a car including its passengers, and a separate price for foot passengers and cyclists. Perhaps it doesn’t matter much given that it’s a yes/no value and all forms of transport have to pay something (although arguably the 4th and 5th occupants of a car in the 2nd example travel “free”).

1 Like

Yes, that is what I mean. Just like motorcar=yes only means that the vehicle is allowed, saying nothing about the driver (or the passengers).

Does that make sense?

Imagine the opposite (if it would mean always a combination of both vehicle and a person): if motorcar=no meant “car with a driver is not allowed here” on some road, that would not forbid AI-driven cars. And I am pretty sure it is also meant forbid them, even if it is only a vehicle, without a person.

So do we tag that the rider is also allowed there?

We don’t currently tag the rider for the bicycle (nor the driver for motorcar/hgv) as we don’t have a reason to tag something that doesn’t matter.

Just like we don’t tag different access rules (or fees) for e.g. cars with automatic transmission vs. cars with manual transmission (or diesel vs. petrol vs. electric cars). As they don’t change the access rules, their existence doesn’t matter. Just like currently (AFAIK) there are no special access rules for cars without human drivers (e.g. Waymo and its ilk).

However, I can imagine the future where e.g. AI-driven cars are (dis)allowed on some roads, but not on others. So when/if it does become important to differentiate those cars, motorcar=* alone won’t be enough (but e.g. motorcar=* being deprecated, with human_driven_motorcar=* vs. ai_driven_motorcar as alternatives).

(the tags themselves and even their method will likely be different; like we for example have for low-emission zones; which is IMHO not ideal solution – it would work much better with motorcar=no + motorcar_low_emission=yes or something. But I digress)

While I can also imagine bicycles without human riders (well, there are several of them on youtube, so it does not need much imagination), I do not think they will become popular any time soon (but hey, I though the same about segways, e-scooters and their ilk, so I’ve been wrong at predicting markets before :grinning_face:)


But until such time such differentiation becomes real possibility in law, I do not think we need to specify whether cars and bicycles without human drivers should have separate tags. (nor invent separate tags for them – so let them remain undefined, as they are irrelevant)

But whether some transport class has fee or not - that is already quite widespread; i.e. bicycles, cars and their drivers and passengers have different rules already for many decades (e.g. it might be that people are free and bicycle and cars are charged, or only cars are charged, or all three are charged), so it makes sense to record that (as much as any fee tag have sense), and that data is IME quite stable usually.

As for the exact amounts (i.e. charge:*), as I noted before, while I can see improvements there, I’m afraid OSM has way too little resurveying mappers to keep that info up-to-date [1], as it changes quite frequently (especially with inflation rates common recently in many countries around the world). Maybe if most of the data can be scraped with automated imports or something it might work, but I don’t see it coming soon worldwide.


  1. and incorrect data is often worse then no data ↩︎

1 Like

I think we both agree that motorcar=no means “No car at all allowed here, whatever it may or may not contain”.
The difference arises with something like motorcar=yes which

This absolutely requires the information whether the driver is allowed, because motorcar=yes in this interpretation does not contain that information. A strict router cannot route me there, because it may just be that in fact I, as the driver, am not allowed there.

Let’s consider a slightly different interpretation:

motorcar=yes means “Every car allowed here, whatever it may or may not contain”.

Is an AI driven car allowed here? Yes. Is a human operated car allowed here? Also yes. Is there a limit on the number of passengers? No.
This interpretation doesn’t mention a driver or the passengers directly, but it says something very important: They are allowed as part of the car.

One more analogy to drive the point home:

Is an automatic transmission allowed? We don’t know, because either way would say something about the transmission system (that it is allowed).
But of course we do know, the transmission system is part of the vehicle, thus included in the statement “The vehicle is allowed”. I consider the driver and passengers part of the vehicle (if there are any).

I am sorry, I am also not that great at explaining things.

Another attempt

  • From my understanding you wish to use fee:foot=yes/no to indicate if humans need to pay to use the ferry, regardless of which form of transportation they are using.
  • And use foot is only used for people actually walking, not all humans. This does not apply to those using any other form of transportation.

These are two different definitions of pedestrians, and thus a contradiction.

The “self driving bike” was my example of what your suggestion for ferries would imply for access tags if the fee logic were transferred. My example, of a cycle path with foot=no would imply that no humans may use it, but bicycle=yes bicycles are, thus the bicycle must be self driving or similar. But this of course does not make sense, and is also not how we use the access tags.

Note that this also applies to ferries, since the foot and bicycle tags are already used for ferries.

It could also result in the weird case of foot=no and fee:foot=yes if a ferry that does not allow pedestrians to use it charges for every person in a vehicle.

TL;DR: does using fee:adults + fee:children (which also happen to be more popular than fee:foot by a little) fix all those confusions/problems?


Which is why I don’t subscribe to such interpretation.

  • According to it, IIUC, bicycle=yes would mean “bicycle and anything on it are allowed as a part of the bicycle”. Imagine if the bicycle had front basket, and dog in it. It would imply that dog is allowed too, right?

    I would think that it doesn’t imply dog=yes; and that whether dogs are allowed on said bicycle on said ferry/train/whatever is simply undefined. It might be that it is, it might be that it isn’t. There is no way to know unless dog=* is specified.

  • Or different example, imagine a pump track or downhill track tagged with bicycle=yes. Does it imply you can use it with a 3yo kid in a backseat? I would argue that it doesn’t. In fact, if anything, in my experience, many would have explicit restrictions on minimum age and/or no passengers.

  • Or, some bicycles have dashcams mounted (many do, in fact, at least over here). Does bicycle=yes also mean you can take pictures on any place marked with bicycle=yes? Afterall, it matches “Every bicycle allowed here, whatever it may or may not contain”.

    IMO, No, it does not mean that – it may well be that taking pictures is forbidden in that area, and you must turn off the dashcam (and sometimes unmount and store away, or even must turn turn away and return without camera).

So I would never take bicycle=yes to mean “bicycle and anyone and anything and everything you can put on it is allowed”. To me, it means “bicycle is allowed”, and the rest is undefined (and the lack of any extra tags means either “not mapped in detail yet” or “extra details are defined by local jurisdiction; go educate yourself before hitting the road, or accept the risk that your assumptions might be wrong”).

So it is for me! So I don’t get where there is disagreement between us? :sweat_smile:
Perhaps somewhere here lies to confusion?

Here lies the inconsistency for me.

Given that foot=* means the same for me (i.e. “people on foot only”), I’m puzzled.

Are people who arrived with bicycles cycling on those bicycles in circles on the ferry while it travels (thus they are “cyclists” and bicycle=yes applies in your interpretation), or are the on the foot during the ferry ride (and thus they are, for the time being, pedestrians - i.e. foot=yes)?

For cases I’ve seen it is always the latter. :sweat_smile:

Or are there jurisdictions where you are still considered a “cyclist” (with all legal implication of that) even when you’re separated from a bicycle by 100s of meters/yards (like you would be on a bigger ferry)?
I’m only aware of several European and surrounding countries, and in every one of them you are only legally considered a cyclist if you’re riding a bicycle. When you stow your bike away, you’re no longer a cyclist, even if you’re wearing a helmet and lycra.


Note that I did not suggest fee:foot=* above; in fact, if we prefer to count all people, regardless if they arrived in car/bicycle/foot I would suggest using fee:adult=* + fee:children=* instead (which in fact have more usages together than fee:foot=* has, and are also clearer and more versatile). Win-win, no? (and it also makes it even more clear[1] that fee:bicycle means bicycle, not human)

My suggestion above would also seem to fix that discrepancy too, i.e. you would tag that case with with foot=no + fee:adults=yes + fee:children=yes (or fee:children=no, if children get a free pass, of course)

Would that work for you?


  1. toll:bicycle wiki is I think perfectly clear it is about vehicle only, as I quoted wiki earlier, and as we both seem to agree that fee:xxx and toll:xxx should have same syntax, it should be clear by itself. But even clearer is always better. ↩︎

See the two lines above it.
They use different definitions for “foot” (fee:foot and foot).
That is the inconsistency.

ehhh what?

fee:adult has 36 uses, none of which are yes/no values and none of which are used on ferries.
fee:children has 9 entries. None of which are on ferries.

1 Like