Double amenity

What is the right way to tag something that belongs to double category, assuming I don’t want to arbitrarily choose one category and ignore secondary one?

Examples: cheese and meat shop, toy and gift shop, gas station and car wash.

One way I’ve come across:

Another way:

Or you could go for 2 nodes, especially if both have different opening hours. And probably both items are in slightly different locations (a few meters) in the fuel/car_wash case, so why not ?

There have been plenty of discussions in the past on using a _1 or a semi-colon. Nothing was decided.
Most data consumers will have problems with _1 and semi-colons.

It’s different for e.g. a shop that sells e.g. cheese and meat over the same counter. I then map the major one or use the semi-colon.

I’m afraid there is no right nor good way to do it. The first solution you mention with xxx_1=yyy is completely wrong. It’s something the ID editor does but I believe the ID programmers are the only folks promoting such tag. The second solution is a bit better but the semicolon solution is not really defined and could have different interpretations depending on context. So in general, except for clearly defined cases, that solution should be avoided, too.

For the fuel and car wash I would probably add two separate nodes. Although being on the same site they are fairly different facilities. You could also use one node with amenity=fuel and car_wash=yes although such tag would probably not be understood by many data consumers. It is used over 400 times already, though.

For the cheese and meat shop example there is no good solution. You probably need to go with a more general tag like shop=convenience or invent your own value like shop=cheese_and_meat.

Looks like there is already precedence for using semi colon:

And belatedly I found OSM wiki note on the topic, confirming the main answers:

  1. use separate nodes when possible
  2. otherwise use semicolor

Thank you for the feedback!