ES:API de Overpass/Áreas

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

Las áreas son una extensión de la API de Overpass: Constituyen un nuevo tipo de datos área además de los tipos de datos de OSM nodo, vía y relación. Por tanto, estos datos no se extraen y actualizan de la API principal, sino que se calculan mediante un proceso especial en el servidor de la API de Overpass.

Las áreas se pueden usar en las consultas conforme a la guía de lenguaje y a la referencia de lenguaje.

Expliquemos con más detalle el proceso de cálculo: El proceso de cálculo se ejecuta en un bucle infinito en el servidor de la API de Overpass, donde cada ejecución dura entre 4 y 12 horas. Antes se ejecutaba la siguiente secuencia de código, que hoy en día ha sido sustituida por una versión más sofisticada (véase el enlace de arriba):

Nota: esta secuencia está destinada a ser ejecutada exclusivamente en el servidor. Cualquier otro usuario de la API de Overpass (como Overpass turbo) no puede desencadenar la creación del área ni influir directamente en las reglas de creación del área. Si crees que las reglas de creación del área están incompletas, deberías plantear una Github incidencia. El código siguiente es un ejemplo, consulta el archivo correspondiente en GitHub para una lista actualizada.

<?xml version="1.0" encoding="UTF-8"?>
<osm-script timeout="86400" element-limit="1073741824">

<union>
  <query type="relation">
    <has-kv k="admin_level"/>
    <has-kv k="name"/>
  </query>
  <query type="relation">
    <has-kv k="type" v="multipolygon"/>
    <has-kv k="name"/>
  </query>
  <query type="relation">
    <has-kv k="postal_code"/>
  </query>
  <query type="relation">
    <has-kv k="addr:postcode"/>
  </query>
</union>
<foreach into="pivot">
  <union>
    <recurse type="relation-way" from="pivot"/>
    <recurse type="way-node"/>
  </union>
  <make-area pivot="pivot"/>
</foreach>

<query type="way">
  <has-kv k="area" v="yes"/>
  <has-kv k="name"/>
</query>
<foreach into="pivot">
  <union>
    <item set="pivot"/>
    <recurse type="way-node" from="pivot"/>
  </union>
  <make-area pivot="pivot"/>
</foreach>

</osm-script>

Recorramos el archivo: Derivamos un área de cada relación que

  • tenga una etiqueta admin_level y una etiqueta name,
  • tenga una etiqueta type con valor multipolygon y una etiqueta name,
  • tenga una etiqueta postal_code o
  • tenga una etiqueta addr:postcode.

Este es el cometido del primer bloque de unión.

En el siguiente bloque foreach, es donde el área se crea realmente: la forma se construye a partir de los miembros tipo vía de la relación, las etiquetas se copian de la relación misma, el objeto pivot.

El segundo bloque de unión selecciona todas las vías que tienen una etiqueta area con valor yes y una etiqueta name. Aquí creamos un área para cada vía. Las etiquetas se toman de la vía respectiva, así como la forma.