I maintain BeachScout, a beach-finding app built on OSM data, and to do that I pre-generate per-country extracts…, and to do that I pre-generate per-country extracts of everything beach-related — 381,331 places across the countries I cover. That gave me an easy way to look at how dog=* is actually used on beaches, and the numbers surprised me enough that I thought they were worth sharing.
Coverage is very thin. Of those 381,331 places, 1,910 carry a dog tag. Under 1%. In a seven-country sample of 30,776 beaches, 597 were tagged — Germany is the best covered at around 5%, Greece had a single one, Serbia none at all.
Value distribution across the 1,910:
932 no
600 yes
248 leashed
75 designated
34 unleashed
3 official
plus a small tail of hand-typed values.
Prohibitions outnumber permissions almost everywhere. Germany 162 no against 119 yes; Croatia 69 against 28. People seem to map the ban more diligently than the permission. For a beach visitor the ban is arguably the more valuable message anyway — better to know before driving out with the dog in the car.
The question I actually have is about the seasonal values. The tail includes things like:
no@(may 01-sep 30)
no @ mar 15 - oct 15
partially
0
1
The first two are clearly conditional restrictions and clearly meant honestly by whoever mapped them. Rendering them as a flat “dogs not allowed” would be wrong for half the year. Right now I detect them and show a generic “rules change with the season, check local signs” message, which is honest but throws away information the mapper took the trouble to record.
Is there an established convention I should be parsing here instead — dog:conditional=*, or the opening-hours syntax proper? And is partially / 0 / 1 worth cleaning up systematically, or is the volume too small to bother?
Happy to share the extraction script or the full value list if it’s useful to anyone.
[formatting corrected by the moderator]