Ecosistema de software y herramientas de OpenStreetMap
Marco Hernandez
Introduccion
La Wiki de OpenStreetMap define OpenStreetMap (OSM) como “un mapa libre y editable de todo el mundo que está siendo creado por voluntarios en gran parte desde cero y lanzado con una licencia de contenido abierto.” En cierto modo, es como una versión de Google Maps de código abierto y datos abiertos. Excepto que, a diferencia de Google Maps, no es un producto cohesivo que ofrezca innumerables capacidades desde el principio. OpenStreetMap es un vasto ecosistema de paquetes de código abierto creado por pequeños equipos de mantenedores dispares que desarrollan componentes enchufables impulsados por multitud de tecnologías y lenguajes de programación. Aunque esto lo hace mucho menos cohesivo que un producto como Google Maps, lo hace más potente y personalizable.
Este artículo analizará varias piezas del ecosistema de OpenStreetMap. La información de OSM está distribuida por muchos sitios y enlaces difíciles de encontrar: esto es un intento de consolidar gran parte de esa información en un solo lugar.
openstreetmap.org El sitio web de OpenStreetMap permite a los usuarios ver y editar los datos de OpenStreetMap. Puedes pensar en ello como Wikipedia para mapas. Construido sobre Ruby on Rails, el sitio es el repositorio central de datos de OpenStreetMap en el que dependen todas las demás herramientas del ecosistema OSM. El sitio web también es una pequeña muestra de capacidades OSM como el renderizado de mapas, la tematización (disponible en el panel de “capas”) y las direcciones (que permiten al usuario elegir entre múltiples servicios de enrutamiento).
La mayoría de los usuarios no consumirán las capacidades de OpenStreetMap a través de su sitio web: los datos proporcionados por el sitio web están destinados a ser consumidos por desarrolladores de aplicaciones que crean sus propias aplicaciones basadas en mapas.
Datos de OpenStreetMap Los datos aportados por los usuarios de OpenStreetMap son el núcleo de su ecosistema. Con casi todo el software que rodea a OSM compuesto por piezas intercambiables, los datos son la cualidad definitoria de OSM.
El subdominio planet.openstreetmap.org proporciona exportaciones semanales de los datos de OpenStreetMap de todo el planeta. Se ofrece tanto en archivos XML comprimidos como en un formato Protobuf personalizado que utiliza una extensión .osm.pbf. En el momento de escribir esto, los archivos XML comprimidos tienen poco más de 150 GB y, según la Wiki, se descomprimen a más de 2 TB. Los archivos Protobuf .osm.pbf son algo más de la mitad de tamaño, siendo el más reciente algo más de 80 GB en el momento de escribir esto. Además de ser más pequeño, .osm.pbf también se puede procesar más rápido, por lo que suelen ser el formato más deseado.
Debido a que el conjunto de datos completo de Planet es tan grande, OSM también ofrece conjuntos de cambios semanales mucho más pequeños que pueden aplicarse a la exportación de un planeta existente de forma continua para mantenerlo sincronizado.
Los datos exportados suelen importarse a una base de datos PostgreSQL con la extensión PostGIS habilitada. Los datos suelen importarse a PostgreSQL usando osm2pgsql. Los datos completos de Planet pueden superar un terabyte cuando se importan en Postgres (fuente, fuente, fuente), y el proceso de importación puede llevar horas o días dependiendo de tu hardware, las optimizaciones de Postgres y las banderas de importación. La herramienta Osmosis de OSM puede reducir el tamaño de los datos extrayendo solo los datos que te interesan, como los datos dentro de una caja delimitadora, o extrayendo solo las cámaras de velocidad. La Wiki de OSM contiene una lista de otras herramientas de extracción de datos para reducir el conjunto de datos a las cosas que le interesan a un desarrollador.
La forma más sencilla de mantener un conjunto de datos pequeño y una importación rápida es descargar un conjunto de datos de una única zona geográfica. OpenStreetMap no ofrece extractos geográficos, pero sitios como download.openstreetmap.fr, Geofabrik y BBBike ofrecen extractos geográficos actualizados regularmente. Puedes encontrar más fuentes de extractos en la página Planet.osm de la wiki de OSM, la página de Proveedores de datos procesados y la página de Tiles de Servicio de Switch2OSM.
Renderizando un OpenStreetMap en la web Para ver un mapa OSM, necesitas una biblioteca de mapas y un servidor de tiles. Las bibliotecas de mapas crean mapas interactivos usando tiles proporcionados por un servidor de tiles. Los servidores de tiles toman datos de OpenStreetMap y renderizan fragmentos de un mapa en cuadrados individuales que pueden ser usados por una biblioteca de mapas.
Bibliotecas de mapas A diferencia de productos comerciales como Google Maps, OpenStreetMap no tiene una biblioteca de mapas “oficial” que se te obligue a usar. Entre las bibliotecas de mapas OSM más populares para la web están Leaflet, que es el visor de mapas predeterminado en openstreetmap.org, y OpenLayers, que se considera más potente pero tiene una curva de aprendizaje más pronunciada. Alternativas como MapLibre tienen SDKs para web, Android e iOS. Otras bibliotecas de mapas populares pueden encontrarse en la wiki de OSM y en Awesome OSM.
Las teselas consumidas por estas bibliotecas de mapas pueden ser losas raster (imágenes hechas de píxeles) o teselas vectoriales (compuestas por geometrías y metadatos). Aunque los mosaicos raster generalmente pueden usarse por cualquier biblioteca de mapas que los soporte (como Leaflet), existen esquemas competidores para los mosaicos vectoriales, y una biblioteca de mapas vectoriales puede no soportar todos los esquemas de mosaicos vectoriales.
Mosaicos raster OpenStreetMap mantiene oficialmente 2 paquetes de servidores de tiles raster de primera mano llamados mod_tile y Tirex. El renderizado de estas herramientas se impulsa con la biblioteca de generación de mapas Mapnik de código abierto. Mapnik requiere que los estilos se proporcionen mediante una configuración XML, y Mapbox creó un lenguaje similar a CSS llamado CartoCSS que se compila en configuraciones de Mapnik para facilitar la construcción de estas configuraciones XML. CartoCSS fue eliminado gradualmente por Mapbox a partir de 2016 en favor de sus mosaicos vectoriales. A pesar de que CartoCSS no ha recibido un commit desde 2020 y el proyecto GitHub fue archivado en 2024, la web de OpenStreetMap sigue utilizándolo para definir sus estilos Mapnik. Un proyecto llamado openstreetmap-carto mantiene las hojas de estilo para la capa estándar del mapa en openstreetmap.org. Para ver más sobre cómo encajan estas piezas, consulta la página de resumen de componentes en la wiki de OSM.
A pesar de ser de primera mano, estos componentes no son necesarios y pueden sustituirse por varios paquetes de código abierto (mbtileserver, TileServer GL, etc.) o servidores comerciales de mosaicos como servicio (Mapbox, Stadia Maps, etc.). Mientras los servidores de mosaicos raster sigan las convenciones de nombres de archivo y rutas de URL, son intercambiables. Puedes encontrar paquetes adicionales de servidores de tiles en la Wiki de OSM.
OpenStreetMap ofrece un servidor de tiles raster gratuito en https://tile.openstreetmap.org/ ideal para que los desarrolladores aprendan a crear mapas sin tener que montar su propio servidor de tiles ni pagar a un proveedor externo. Para mantenerlo gratuito para todos, los usuarios deben cumplir su política de uso de tiles, que prohíbe descargas masivas de tiles y cabeceras sin caché. Dado que este servidor de mosaicos no ofrece garantías de disponibilidad, las aplicaciones comerciales deberían considerar seriamente usar un proveedor de mosaicos raster de pago o alojar su propio servidor de mosaicos rasterizados. Si estás pensando en alojar tu propio servidor de tiles para una carga de trabajo de producción pesada, la wiki de OSM tiene las especificaciones que requieren para ejecutar sus propios servidores de tiling de producción. Cabe destacar que no todos los tiles necesitan ser pre-renderizados por el servidor de tiles: una página de uso de disco de tile recientemente eliminada en la Wiki estima que pre-renderizar cada tile ocuparía 54TB, y menos del 2% de todos los tiles totales se ven realmente.
Teselas vectoriales OpenStreetMap no mantiene oficialmente ningún paquete de servidor de tiles vectoriales de primera mano, pero existen varios paquetes de código abierto para generar y servir tiles (tilemaker, mbtileserver, Martin, etc.), junto con varios proveedores de tiles como servicio. Las Teselas Vectoriales fueron un proyecto que surgió originalmente del proveedor comercial de mapas Mapbox para habilitar nuevas capacidades de mapas, como rotar un mapa manteniendo la orientación del texto. Puedes leer más sobre la historia de los mapas vectoriales en la entrada del blog de daniel-j-h.
Mapbox creó un formato llamado Mapbox Vector Tiles (MVT) basado en el Protobuf de Google. Es el estándar de facto de la industria para las losetas vectoriales y tiene una extensión .mtv. Estas fichas pueden tener diferentes esquemas (datos incluidos dentro de la tesela MVT). Si MVT es como un archivo CSV, los esquemas son como los nombres de las columnas. Los esquemas de mosaicos vectoriales populares incluyen Shortbread y OpenMapTiles.
OpenStreetMap ofrece un servidor de tiles vectoriales Shortbread gratuito en https://vector.openstreetmap.org ideal para que los desarrolladores aprendan a crear mapas sin tener que configurar su propio servidor de tiles ni pagar a un proveedor externo. Al igual que el servidor de mosaicos raster de OSM, los usuarios deben cumplir su política de uso de losas que prohíbe descargas masivas de mosaicos y cabeceras sin caché. Puedes ver una demo de su servidor de tiles vectoriales aquí.
Para saber más sobre las losetas vectoriales, visita la página de Mosaicos vectoriales de la wiki de OSM.
Mapas estáticos Alternativamente, es posible renderizar un mapa estático en una imagen en lugar de usar una biblioteca de mapas para un mapa interactivo (similar a la API Static de Google Maps). La página de imágenes de mapas estáticos de la wiki de OSM proporciona una lista de servicios y paquetes de software para habilitar esta funcionalidad, pero si ya usas Mapnik, puede ser más sencillo hacerlo usando sus enlaces Node o Python.
Para saber más sobre renderizado de mapas raster, vectoriales o estáticos, visita la página de Renderizado de la wiki de OSM.
Geocodificación La geocodificación es el proceso de tomar el nombre o dirección de un lugar y devolver su longitud y latitud.
OpenStreetMap mantiene un proyecto de código abierto basado en Python llamado Nominatim para geocodificación con OpenStreetMap. Nominatim utiliza osm2pgsql para importar sus datos. Desafortunadamente, los servidores de tile y Nominatim no pueden compartir una base de datos: sus esquemas de base de datos son incompatibles. Nominatim también soporta geocodificación inversa, que toma una longitud y latitud y devuelve lo que hay en esa ubicación.
OpenStreetMap ejecuta un servidor Nominatim gratuito, pero el uso permitido está restringido: un máximo absoluto de 1 petición por segundo. Además, los clientes que envían repetidamente la misma consulta pueden ser bloqueados. Por ello, puede que quieras considerar el autoalojamiento o utilizar alguno de los proveedores comerciales listados en la página de Geocodificación de la wiki de OSM.
Enrutamiento El enrutamiento crea indicaciones para ir del punto A al punto B, muy parecido a las indicaciones de Google Maps. Existen diferentes herramientas de ruta para coches, bicicletas y más.
Aunque OpenStreetMap no mantiene ninguna herramienta de enrutamiento de primera mano, su sitio web incluye OSRM, GraphHopper y Valhalla. Se puede encontrar software adicional de enrutamiento en la página de Enrutamiento de la wiki de OSM.
Licencia de OpenStreetMap Aviso legal: No soy abogado y esto no constituye asesoramiento legal. La siguiente sección es mi comprensión personal del ODbL, que puede ser incorrecta. No tomes mi interpretación como un hecho.
Los datos de OpenStreetMap están cubiertos por la Licencia Open Data Commons Open Database (ODbL). Por lo que he leído y entendido limitado, parece la GPL para los datos, pero con un poco menos de aplicación viral de copy-left. Puedes usar los datos para cualquier propósito (incluido el comercial), pero debes atribuir la fuente. Puede crear una base de datos de derivados modificando o extrayendo datos, pero debe poner a disposición la base de datos de derivadas, y esa base de datos debe atribuir la fuente original. Sin embargo, las cosas creadas con la Base de Datos o la Base de Datos de Derivados (Obras Producidas) pueden estar licenciadas bajo términos diferentes a los de la OBbL siempre que se hayan cumplido las obligaciones previamente listadas.
Una parte interesante de la ODbL es la idea de una Base de Datos Colectiva, donde los datos de la base de datos ODbL no se modifican pero se combinan con datos de otros conjuntos de datos independientes que se ensamblan en un todo colectivo. Una base de datos colectiva no se considera una base de datos derivada, por lo tanto, los conjuntos de datos no OBdL incluidos que se utilizan junto con bases de datos OBdL no están sujetos a los requisitos de la OBdL. Podemos ver esto en acción en la página de reconocimientos de datos de Apple Maps, donde primero listan los colaboradores de OpenStreetMap y luego muchos anuncios comerciales y listados abajo.
El sitio de Open Data Commons incluye un resumen legible por humanos de la licencia ODbL 1.0, pero te recomendaría leer la licencia completa y consultar a un abogado si tienes preguntas. Sin duda, toma todo lo que he dicho con cautela.
Requisitos de atribución Las cosas creadas con OpenStreetMap deben atribuir OpenStreetMap y dejar claro que los datos están cubiertos por la licencia OBdL. Para los mapas, esto se hace normalmente colocando un hipervínculo que diga OpenStreetMap en la esquina inferior derecha del mapa y enlazando a la página de Copyright de OSM, que contiene información sobre las fuentes de datos de OpenStreetMap así como el ODbL. La Fundación OpenStreetMap tiene una página de Directrices de Licencia/Atribución en su página web que trata directrices para otras Obras Producidas, como mapas estáticos y motores de enrutamiento.
Por dónde empezar El mejor lugar para empezar tu camino con el desarrollo de OpenStreetMap es la web de Switch2OSM. Aborda los fundamentos de OSM en términos mucho más sencillos que este artículo, y tiene instrucciones para empezar con los mosaicos usando Leaflet, OpenLayers y MapLibre. Switch2OSM también tiene tutoriales para configurar tu propio servidor de tiles en Docker, Debian y Ubuntu, pero para muchos casos los desarrolladores pueden usar los servidores de tile gratuitos de OpenStreetMap sin tener que configurar los suyos propios.
Espero que esta publicación te haya sido útil. Por favor, comentad si encuentras información incorrecta: llevo aproximadamente una semana explorando el ecosistema de OpenStreetMap, así que mi comprensión es limitada. Esta publicación fue un intento de organizar todo lo que he aprendido y llevar un registro de los enlaces a cada página que me resultó útil para moldear mi comprensión de OSM.