Ejemplos de Overpass QL

Consultas que puedes copiar, cada una ejecutada contra nuestro endpoint antes de ponerla en esta página. Cubren lo que más piden las aplicaciones: elementos cerca de un punto, dentro de un recuadro, dentro de una ciudad o a lo largo de una línea, y recuentos. Lo que el endpoint admite y lo que no está en la página de alternativa a la API de Overpass.

Enviar una consulta

Envía la consulta por POST como data a https://geo.runningcat.dev/v1/overpass/interpreter con tu clave.

Python

import requests

query = """
[out:json][timeout:25];
node["amenity"="drinking_water"](around:2000,46.204,6.143);
out center;
"""
answer = requests.post(
    "https://geo.runningcat.dev/v1/overpass/interpreter",
    data={"data": query},
    headers={"Authorization": "Bearer YOUR_KEY"},
    timeout=60,
)
answer.raise_for_status()
for element in answer.json()["elements"]:
    print(element["id"], element.get("tags", {}).get("name"))

JavaScript

const query = `[out:json];
node["amenity"="cafe"](50.05,19.92,50.07,19.96);
out;`
const answer = await fetch('https://geo.runningcat.dev/v1/overpass/interpreter', {
  method: 'POST',
  headers: { Authorization: 'Bearer YOUR_KEY' },
  body: new URLSearchParams({ data: query }),
})
const { elements } = await answer.json()

Un cliente que no pueda enviar cabeceras puede poner la clave en la dirección: /v1/overpass/interpreter?key=YOUR_KEY.

Alrededor de un punto

Agua potable a menos de 2 km de la estación de Ginebra: 185 fuentes en menos de 2 segundos. Con nwr en lugar de node, out center devuelve también las fuentes mapeadas como áreas con un único punto.

[out:json][timeout:25];
node["amenity"="drinking_water"](around:2000,46.204,6.143);
out center;

En un recuadro

Cafeterías del centro de Cracovia. El recuadro va en el orden sur, oeste, norte, este, como en Overpass. 234 cafeterías en menos de medio segundo.

[out:json];
node["amenity"="cafe"](50.05,19.92,50.07,19.96);
out;

El ajuste [bbox] aplica un recuadro a todas las consultas del script; aquí cuenta las mesas de picnic en lugar de listarlas.

[out:json][bbox:50.0,19.8,50.1,20.1];
node["leisure"="picnic_table"];
out count;

Dentro de una ciudad o un parque

area[...] encuentra un límite administrativo o un área protegida por sus etiquetas, y (area.name) conserva lo que queda dentro. Panaderías dentro de la ciudad de Cracovia: 408 tiendas en unos 3 segundos.

[out:json][timeout:60];
area["name"="Kraków"]["admin_level"="8"]->.city;
nwr["shop"="bakery"](area.city);
out center;

Añadir admin_level o boundary=protected_area al filtro del área acelera la búsqueda. Los ids de área también funcionan: 3600000000 más el id de una relación, o 2400000000 más el id de una vía.

Para hacerlo al revés y preguntar qué límites contienen un punto:

[out:json];
is_in(46.204,6.143);
out tags;

A lo largo de una línea

around con varios pares de coordenadas mide la distancia a la línea que los une. Aseos y agua potable a menos de 300 m de un recorrido de Ginebra a Chamonix, en una sola unión:

[out:json];
(
  node["amenity"="toilets"](around:300,46.204,6.143,46.07,6.40,45.924,6.869);
  node["amenity"="drinking_water"](around:300,46.204,6.143,46.07,6.40,45.924,6.869);
);
out;

Para una ruta grabada larga, el endpoint de POI a lo largo de una ruta toma la línea GeoJSON y devuelve cada parada con su kilómetro.

Relaciones de rutas con geometría

Rutas de senderismo del valle de Chamonix, las tres primeras con su geometría. Cada miembro es una vía que lleva su geometría, así que puedes dibujar la ruta sin pedir los nodos.

[out:json];
rel["route"="hiking"](45.85,6.8,46.0,6.95);
out geom 3;

Expresiones regulares

Nombres que empiezan por "saint" en mayúsculas o minúsculas, con ,i:

[out:json];
nwr["name"~"^saint",i]["amenity"="place_of_worship"](45.85,6.8,46.0,6.95);
out center;

Conjuntos con nombre

Una consulta puede guardar su resultado con ->.name, y la siguiente puede filtrar ese conjunto. Un conjunto solo dentro de una unión, como (.a; .b;);, no se admite; pon las dos consultas dentro de la unión.

[out:json];
node["amenity"="bicycle_parking"](46.19,6.12,46.22,6.16)->.parking;
node.parking["covered"="yes"];
out;

Lugares abiertos a una hora dada

Añade open_at a la dirección como fecha y hora locales, YYYY-MM-DDTHH:MM en la zona horaria de cada lugar, y la respuesta conserva solo los lugares cuya etiqueta opening_hours dice que están abiertos a esa hora. Esto no forma parte de Overpass. Panaderías de Viena abiertas a las 06:59 de un martes, que es la forma de pedir las que abren antes de las 7:

POST /v1/overpass/interpreter?open_at=2026-11-10T06:59

[out:json][timeout:60];
area["name"="Wien"]["admin_level"="4"]->.city;
nwr["shop"="bakery"](area.city);
out center;

Los lugares sin etiqueta opening_hours, o con una que no se puede leer, se descartan. El objeto open_at de la respuesta cuenta los lugares que estaban abiertos, cerrados y desconocidos, para que veas cuántos no tenían horario. Las reglas de festivos y vacaciones escolares (PH, SH) se leen sin tener en cuenta los festivos.

Cuando se rechaza una consulta

Una consulta que el endpoint no puede responder recibe el estado 400 y un remark que indica el motivo, por ejemplo static error: line 3: recursion ">" is not supported: ways come without their nodes; use out geom or out center. Una consulta que tarda más de 30 segundos, o que devolvería más elementos de los que permite el plan (10 000 en Free, 25 000 en Developer, 50 000 en Pro), recibe el estado 200 sin elementos y un remark que empieza por runtime error:, como envía Overpass. La guía de errores de Overpass trata el 429 y el 504.

El plan gratuito incluye 500 solicitudes al día, también para apps comerciales. Crea una cuenta con Google o con tu correo y genera tus claves al instante.