ES:API de Overpass/Ejemplos avanzados

From OpenStreetMap Wiki
Jump to navigation Jump to search
Overpass API logo.svg
edit
API de Overpass · Referencia de lenguaje · Guía de lenguaje · Términos técnicos · Áreas · Ejemplos de consultas · Ejemplos avanzados · Edición dispersa · ID permanente · Preguntas frecuentes · más (español) · Sitio web
Estado de servidores · Versiones · Desarrollo · Diseño técnico · Instalación · Capa de compatibilidad XAPI · Esquemas de transporte público · Aplicaciones · Código fuente e incidencias
Overpass turbo · Asistente · Atajos de Overpass turbo · Hojas de estilo MapCSS · Exportar a GeoJSON · más (español) · Desarrollo · Código fuente e incidencias · Sitio web

Recursividad más compleja

Ejemplo: La llamada al mapa más simple posible

Esta llamada incluye todos los nodos del recuadro delimitador, todas las vías que tengan tales nodos como miembros y todas las relaciones que tengan tales nodos y tales vías como miembros. Por favor, observa que no todas las vías o relaciones devueltas se muestran en OpenLayers debido a que OpenLayers requiere que todos los nodos de una vía o miembros de una relación estén presentes.

pruébalo tú mismo en Overpass turbo
(
  node(50.746,7.154,50.748,7.157);
  <;
);
out meta;

Mostrar resultado: (OpenLayers no se muestra), JSON, XML.

El operador «<» hace aquí toda la resolución inversa requerida de los vínculos de pertenencia de las vías y relaciones. También se podría dividir esto en una recursividad paso a paso hacia atrás:

  • En primer lugar, obtén todas las relaciones que se vinculan a los nodos recién encontrados: rel(bn);
  • Luego, obtén los vínculos con los nodos que acabas de encontrar: way(bn);
  • Finalmente, obtén todas las relaciones vinculadas a las vías recién encontradas: rel(bw);

Para completar la lista de la resolución de membresía inversa, rel(br); encontraría las relaciones que tienen como miembros las relaciones recién encontradas.

pruébalo tú mismo en Overpass turbo
(
  node(50.746,7.154,50.748,7.157);
  rel(bn)->.x;
  way(bn);
  rel(bw);
);
out meta;

Mostrar resultado: (OpenLayers no se muestra), JSON, XML.

Vías completadas, pero no relaciones

Esta llamada incluye todos los nodos del recuadro delimitador, todos las vías del recuadro delimitador, todos los nodos miembros de estas vías que estén o no dentro del recuadro delimitador, y todas las relaciones que tengan tales nodos o tales vías como miembros. Por el momento, la llamada de vía con un recuadro delimitador hace que la consulta sea a veces lenta. Por favor se paciente mientras los desarrolladores trabajan en mejorar el tiempo de consulta. Observa además que no todas las relaciones devueltas se muestran en OpenLayers debido a que OpenLayers requiere que todos los nodos de una vía estén presentes.


pruébalo tú mismo en Overpass turbo
(
  node(50.746,7.154,50.748,7.157);
  rel(bn)->.x;
  way(50.746,7.154,50.748,7.157);
  node(w)->.x;
  rel(bw);
);
out meta;

Mostrar resultado: Mapa de OpenLayers, JSON, XML.

Vías y relaciones completadas

Esta llamada incluye todos los nodos del recuadro delimitador, todas las vías que se refieren a cualquiera de esos nodos, todos los nodos miembros de estas vías estén o no dentro del recuadro delimitador, todas las relaciones que tengan tales nodos o tales vías como miembro, y su nodo y vía miembro, e incluso los nodos de estas vías. Ten en cuenta que debido a las relaciones involucradas, se incluyen objetos que se pueden encuentran eventualmente bastante lejos del recuadro delimitador.

pruébalo tú mismo en Overpass turbo
(
  node(50.746,7.154,50.748,7.157);
  <;
  >;
);
out meta;

Mostrar resultado: Mapa de OpenLayers, JSON, XML.

Aquí «<» hace la resolución de membresía hacia atrás y «>» hace la resolución de membresía hacia adelante. En particular, «>» recoge para todas las relaciones recién encontradas sus nodos miembros, sus vías miembros, y los nodos miembros de estas vías miembros. Esto también puede ser dividido en sus bloques básicos:

  • «node(w)» recoge los nodos que son miembros de las vías recién encontradas
  • «node(r)» hace lo mismo con las relaciones recién encontradas
  • «way(r)» recoge las vías que son miembros de las relaciones recién encontradas

La declaración rel(r) recoge las relaciones que son miembros de las relaciones recién encontradas, pero no se invoca aquí. Ahora, la misma consulta que antes de una manera más gradual:

pruébalo tú mismo en Overpass turbo
(
  node(50.746,7.154,50.748,7.157);
  rel(bn)->.x;
  way(bn);
  rel(bw);
);
(
  ._;
  way(r);
);
(
  ._;
  node(r)->.x;
  node(w);
);
out meta;

Mostrar resultado: Mapa de OpenLayers, JSON, XML.

También las relaciones en las relaciones

Esta llamada incluye además todas las relaciones en las relaciones que después de cinco pasos de descenso llegan a los miembros en el recuadro delimitador. Sus miembros no se incluyen deliberadamente porque eso podría dar como resultado una parte significativa de todos los datos del mapa de Alemania; es decir, varios cientos de megabytes de datos. Obsérvese también que cinco niveles de descenso suelen ser más que suficientes para obtener todos los vínculos de retroceso. Si dudas de tener todos los vínculos de retroceso, solo tienes que añadir otra declaración rel(br); y ver si se devuelven más datos.

pruébalo tú mismo en Overpass turbo
(
  node(50.746,7.154,50.748,7.157);
  rel(bn)->.x;
  way(bn);
  rel(bw);
);
(
  ._;
  way(r);
);
(
  ._;
  node(r)->.x;
  node(w);
);
(
  ._;
  rel(br);
  rel(br);
  rel(br);
  rel(br);
);
out meta;

Mostrar resultado: Mapa de OpenLayers, JSON, XML.

Consultas sobre el estado del servidor

Si estás alojando un servidor de la API de Overpass, puede ser útil consultarlo para comprobar su estado.

Última actualización de los datos

Cada consulta devuelve una marca de tiempo 'osm_base' que te informa de la última vez que se actualizaron los datos (véase esta pregunta (en) en el Foro de Ayuda de OSM para más detalles). En XML sería `<meta osm_base="2020-07-01T11:54:03Z"/>` y en JSON aparece bajo 'osm3s.timestamp_osm_base'. Puedes hacer cualquier consulta para recuperar esta fecha, usa `out count;` para minimizar la cantidad de datos devueltos al no incluir ningún nodo.

pruébalo tú mismo en Overpass turbo
(
  node(50.746,7.154,50.748,7.157);
  <;
);
out count;