Overpass query example

Cycleways and bike lanes

Map the cycling infrastructure of a city: separate cycleways plus lanes and tracks along roads. Example: Copenhagen.

Cycling infrastructure is tagged in two ways. Separate paths are ways with highway=cycleway. Lanes and tracks along a road are tags on the road itself, such as cycleway=lane or cycleway:right=track. A union collects both.

The query

[out:json][timeout:60];
area["name"="Københavns Kommune"]["admin_level"="7"]->.a;
(
  way["highway"="cycleway"](area.a);
  way["cycleway"~"^(lane|track)$"](area.a);
  way["cycleway:both"~"^(lane|track)$"](area.a);
  way["cycleway:right"~"^(lane|track)$"](area.a);
);
out geom;

Run it

Running the query…

Live result from overpass.ch, cached for up to 12 hours. Map data © OpenStreetMap contributors (ODbL).

How it works

  1. The municipality of Copenhagen has admin_level 7.
  2. The four lines cover separate paths and the common ways to tag lanes on roads.
  3. out geom; returns the line geometry, ready for a map.

Variations

  • Add cycleway:left, and shared paths: way["highway"="path"]["bicycle"="designated"].
  • Total length in kilometres: see length of all cycleways.

Run it from your code

curl https://api.overpass.ch/v1/YOUR_API_KEY/interpreter \
  --data-urlencode 'data@query.overpassql'

Save the query as query.overpassql. It works the same in Overpass Turbo, QGIS and JOSM.

More examples

All examples →