Los nuevos mosaicos vectoriales de OpenStreetMap
(tech.marksblogg.com)- OpenStreetMap ofreció durante mucho tiempo mosaicos ráster basados en PNG estáticos, pero ahora empezó a alojar mosaicos vectoriales en formato Mapbox Vector Tiles (MVT), lo que amplía las formas de usar los mapas
- Los mosaicos vectoriales permiten que el usuario ajuste estilos y reglas de renderizado, y abren la posibilidad de extraer información dentro del mosaico o implementar funciones como cambio de idioma de las etiquetas
- El sitio web principal de OSM todavía usa mosaicos ráster, pero los nuevos mosaicos vectoriales pueden probarse directamente en una demo web separada, QGIS y Leafmap
- En un ejemplo de mosaico z14 cerca del Burj Khalifa, un MVT de 114 KB se convirtió en un JSON de 1.4 MB, y la capa de POI incluye 474 registros y varias claves de capas de nivel superior
- Con
tiles2columnsse pueden descargar los mosaicos vectoriales de OSM de un cuadro delimitador específico y convertirlos a GeoPackage o Parquet, lo que facilita usar datos OSM actualizados directamente en análisis basados en archivos
Dónde cambian los mosaicos de OSM
- Hasta ahora, OpenStreetMap ofrecía mapas mediante mosaicos ráster PNG estáticos con reglas de renderizado y estilos predefinidos
- El nuevo alojamiento ofrece Mapbox Vector Tiles, es decir, mosaicos vectoriales en formato MVT
- Al usar mosaicos vectoriales, el usuario final puede controlar de forma más directa la representación del mapa
- Ajuste de estilos y reglas de renderizado
- Extracción de información base incluida en cada mosaico
- Visualización de imágenes de mapa más nítidas
- Posibilidad de cambiar el idioma de las etiquetas
- El sitio web principal de OSM todavía ofrece mosaicos ráster
- Los nuevos mosaicos vectoriales pueden verse en una demo web desde la mayoría de los teléfonos y equipos de escritorio
Herramientas usadas en la práctica
- Los ejemplos visualizan y analizan datos de OSM con Python y varias herramientas geoespaciales
- Las herramientas básicas instaladas incluyen
jq,python3-pipypython3-virtualenv - En el entorno virtual de Python se instalan los siguientes paquetes
leafmap[maplibre]mapbox_vector_tilemorecantilenotebook
- DuckDB se usa junto con las siguientes extensiones
- Para el renderizado de mapas se usa QGIS 3.40
- QGIS es una aplicación de escritorio que funciona en Windows, macOS y Linux
- El número de ejecuciones de la aplicación por usuarios de todo el mundo ronda los 15 millones al mes
Abrir mosaicos vectoriales en QGIS
- En QGIS se pueden agregar mosaicos vectoriales de OSM con
Layer Menu -> Add Layer -> Add Vector Tile Layer - En la nueva conexión, se usa el siguiente valor como URL de estilo
- Como URL de origen se especifica el siguiente endpoint MVT
- La hoja de estilos es opcional; incluso sin ella, QGIS puede renderizar los datos vectoriales con colores arbitrarios
- En QGIS se detectó un problema de desalineación en el renderizado de íconos
- Otras herramientas de mapeo renderizan correctamente los sprites de ese estilo
- En QGIS, los íconos se ven como íconos negros borrosos
- El issue relacionado está en QGIS #59492
Renderizado con Leafmap y Jupyter Notebook
- Se crea la carpeta de configuración de Jupyter Notebook, se establece una contraseña y luego se ejecuta el servidor en
127.0.0.1 - Notebook funciona con los permisos del usuario que lo ejecutó y puede exponer el directorio actual y sus subarchivos, por lo que se usa la modalidad de ejecutarlo desde una carpeta vacía
- En Leafmap se usa
leafmap.maplibregly se especificacolorful.jsoncomo URL de estilo para renderizar los alrededores del Burj Khalifa - En el renderizado de Leafmap, los íconos de POI se muestran correctamente
Convertir MVT en datos analizables
- Se usa como ejemplo un mosaico de zoom level 14 cerca del Burj Khalifa
- Al pasar las coordenadas aproximadas
[55.27, 25.2]amorecantile tiles 14, se obtienen las coordenadas de mosaico[10707, 7006, 14] - Con ese valor se descarga el siguiente mosaico
- El archivo MVT de 114 KB se convierte en un archivo JSON de 1.4 MB mediante
mapbox_vector_tile.decodey una función de transformación de coordenadas - Las claves de nivel superior del mosaico convertido incluyen las siguientes capas
addressesbridgesbuildingsferrieslandoceanpier_linespier_polygonsplace_labelspoispublic_transportsitesstreet_labelsstreet_polygonsstreetsstreets_labels_pointswater_polygonswater_polygons_labels
Explorar la capa de POI con DuckDB
- Después de extraer la capa
poisen un archivo JSON separado, se abre conST_READde DuckDB para analizarla - Los POI con valor en
cuisinese consultan como 67 filas- Los ejemplos de
amenityincluyenrestaurant,fast_foodycafe - Los ejemplos de
cuisineincluyenfrench,greek,american,lebanese,coffee_shop,asian,persian,chickenypizza
- Los ejemplos de
- En el resultado de
SUMMARIZEde DuckDB se puede comprobar el grado de completitud de los datos de POI- El total de registros de POI es de 474
- Las proporciones de null en
name,name_deyname_enson 29.96% cada una - La proporción de null en
amenityes 31.86% - La proporción de null en
cuisinees 85.86% - La proporción de null en
geomes 0.00%
- Según
approx_unique,nametiene 258 valores,name_de264,name_en245,amenity27 ycuisine39
Extraer un cuadro delimitador con tiles2columns
- El osm_split existente era una herramienta que convertía archivos OSM PBF creados por GeoFabrik en archivos GeoPackage con nombre
- Para cuando los archivos PBF de GeoFabrik se pueden procesar, los datos pueden tener varios días de antigüedad
- Los nuevos mosaicos vectoriales de OSM se actualizan poco después de que se editen los datos base
- tiles2columns es una utilidad basada en Python que descarga mosaicos de OSM de un cuadro delimitador específico y los convierte en archivos GeoPackage o Parquet
- Un ejemplo de cuadro delimitador alrededor del norte de Dubai descarga 42 mosaicos y genera archivos GeoPackage de unos pocos MB
streets.gpkg: 6.8 MBbuildings.gpkg: 6.2 MBpois.gpkg: 1.4 MBstreet_labels.gpkg: 1.4 MBland.gpkg: 744 KB
- Los archivos GeoPackage generados pueden agregarse directamente a un proyecto de QGIS
- Los archivos están separados por las claves usadas en los archivos MVT de OSM, lo que facilita identificar, aplicar estilos y analizar cada capa de forma independiente
- Los atributos de cada geometría se almacenan en columnas separadas
- Un ejemplo de consulta de POI con nombre en
pois.gpkgdevuelve 6,329 filas e incluye nombres comoKiku,Fujiya Restaurant,Mövenpick Grand Al Bustan DubaiyMcDonald's
2 comentarios
La Fundación OpenStreetMap comenzó oficialmente a operar teselas de mapas vectoriales
Opiniones en Hacker News
Tengo sentimientos algo encontrados sobre los tiles vectoriales. Todavía no he encontrado una combinación de estilo y esquema de generador de tiles que muestre el nivel de detalle que ofrecen los tiles ráster originales.
Con solo ver las capturas del artículo, la diferencia es evidente. La primera tiene mucha información: puntos de interés como estatuas, tiendas, teatros y miradores; caminos marcados como puentes; diferencias de color entre césped y parques; grosor de línea según el tipo de vía; canchas; nombres de edificios y barrios; flechas de sentido único; partes de edificios; escaleras; árboles, etc.
La segunda apenas tiene una parada de tranvía y el nombre de una calle, y ese nombre además está renderizado incorrectamente.
He probado bastante los estilos de openmaptiles, el estilo predeterminado de protomaps, estilos de mapbox y generadores de protomaps, openmaptiles y mapbox, pero ninguno era tan legible y detallado como los tiles ráster de OSM.
Los estilos vectoriales son fluidos al hacer zoom y desplazarse, y son fáciles de modificar, pero se quedan cortos cuando uno quiere ver los datos reales del mapa, no solo usarlos como mapa base para datos propios.
Quizá sea por límites de recursos de cómputo. Mostrar un nivel de detalle como el de los tiles ráster de OSM podría consumir demasiados recursos tanto del lado del cliente como en la generación de tiles.
Me gustaría que OpenStreetMap imitara más de cerca el estilo ráster existente, en vez de ofrecer otro mapa base de bajo contraste y poco detalle, y espero que este lanzamiento público de tiles vectoriales permita mapas vectoriales más detallados.
Mantener una infraestructura moderna de generación de tiles ráster es bastante trabajo.
Hace tiempo desarrollé durante bastante tiempo un estilo muy detallado para planear viajes en bicicleta: https://stevebennett.me/2015/01/14/cycletour-org-a-better-ma...
Varias veces intenté reproducirlo con tiles vectoriales, pero era bastante difícil incluir suficiente detalle sin chocar con los límites de tamaño, y los tiles predeterminados de Mapbox tenían mucha menos información de la que necesitaba.
Dicho eso, los tiles vectoriales también tienen soluciones alternativas que no existen con los tiles ráster. Por ejemplo, se pueden activar y desactivar distintas capas y, aun así, las etiquetas pueden “saber” qué hay debajo para mantener la legibilidad.
Ajusté el estilo para que se pareciera bastante al aspecto de los tiles ráster originales, pero en la versión vectorial agregué muchas más funciones interactivas.
Lo interesante desde la perspectiva del diseño de estilos y tiles es que los trade-offs de rendimiento cambian por completo según dónde y cómo se renderizan los tiles. Es obvio, pero también afecta lo que es visualmente posible en el servidor y en el cliente.
Aun así, el mapa de OSM es mucho más útil porque muestra muchos puntos de interés. Con solo mirar el mapa uno se hace una idea del lugar real: los parques se ven como parques y los hospitales como hospitales.
Google Maps puede verse mejor desde el punto de vista de un diseñador gráfico. Pero para orientarse, normalmente hay que contrastar la forma de las calles y los cruces. En Google Maps todo se ve parecido.
Con solo probarlos dos minutos, la pérdida de detalle salta a la vista. Es una verdadera lástima, aunque soy optimista de que algún día alguien lo resolverá.
Me pareció interesante ver cómo la comunidad open source fue construyendo capacidades de tiles vectoriales para mapas. Alrededor de 2018, cuando trabajaba en GIS web, los mapas vectoriales por streaming de Google/Apple parecían magia, y los habría usado sin dudarlo si el costo hubiera sido manejable.
Poco después, la tecnología central apareció como open source, e incluso surgieron soluciones de hosting gratuito. Ahora se pueden usar excelentes capas vectoriales gratis en mapas de Leaflet. Gracias al open source.
No quiero quejarme de un servicio de mapas gratuito; el servicio es excelente y entiendo que se concentren más en la edición y la propiedad de los datos. La infraestructura de entrega es difícil y cara.
Pero me pregunto cuánto habrá frenado otros intentos el dominio de MapBox durante varios años.
Me pregunto si, al alojar mapas basados en OSM, se reducen los costos operativos. Porque se necesitaría menos CPU para el renderizado, y los vectores parecen consumir menos espacio de almacenamiento y ancho de banda
No, porque la capa oficial de tiles de OSM recibe un gran patrocinio de Fastly. La última vez que revisé, Fastly aportaba €720k, mientras que el renderizado en AWS era de €40k
Sí, porque técnicamente usa menos recursos, así que también supone menos carga para AWS+Fastly, y además facilita el autoalojamiento
En una evaluación de riesgos que leí en detalle hace tiempo, OSM decía que “si pierde el patrocinio de Fastly, lo más probable es que corte todo acceso de terceros a la capa estándar de tiles y opere solo unos pocos servidores Varnish”
Según entiendo, la principal motivación de los vectores era más bien mejorar la internacionalización, permitir decisiones de renderizado del lado del cliente y construir un ecosistema moderno de herramientas que traerá varios beneficios posteriores, más que reducir costos
Seguramente habrá información más actualizada, y los materiales relacionados están en 1 y 2
Dicho eso, sí es cierto en el sentido de que se puede trasladar parte del procesamiento al cliente y, más importante aún, hacer que muchas decisiones de estilo las tome el cliente. Claro que no todo es posible
Los tiles vectoriales estáticos o que no se actualizan con frecuencia se pueden generar a partir de datos de OSM con varias herramientas; hoy las más populares son https://github.com/systemed/tilemaker y https://github.com/onthegomap/planetiler
Lo realmente nuevo es que, gracias al trabajo que Paul hizo para la OSMF, ahora los tiles vectoriales pueden actualizarse de inmediato, es decir, en cuestión de minutos. Esto es importante como mecanismo de retroalimentación para los colaboradores de OSM, y también es la principal razón por la que la OSMF opera actualmente el servicio de tiles ráster
Por ahora sigue abierto qué restricciones se impondrán al uso del servicio de tiles vectoriales. Al igual que el servicio de tiles ráster, no pretende competir con servicios de terceros ni reemplazarlos, pero el servicio de tiles vectoriales potencialmente podría hacerlo
Por ejemplo, están https://protomaps.com/, https://openmaptiles.org/, https://versatiles.org/
La compresión gzip ya viene hecha dentro de los tiles
Otro problema es que, en la versión vectorial, las fuentes árabes no se renderizan correctamente. Se renderizan de izquierda a derecha en lugar de derecha a izquierda, y las letras se ven separadas en vez de unidas
Así que el fallo visual que se ve es un problema del estilo o de la biblioteca que renderiza el contenido localmente
Algo relacionado para ver: OpenFreeMap — hosting gratuito de tiles vectoriales de OpenStreetMap
https://openfreemap.org/
https://github.com/hyperknot/openfreemap?tab=readme-ov-file#...
Me pregunto si esto también se basa en el mismo stack de tecnología vectorial, o si es un desarrollo completamente separado
La parte de que “las imágenes serán mucho más nítidas y también será posible cambiar el idioma de las etiquetas” parece que no va a funcionar tan bien como uno esperaría
Al cambiar de idioma, no hay ninguna garantía de que el tamaño de las etiquetas se mantenga igual, y el tamaño de las etiquetas interactúa con la disposición del mapa y también determina qué se muestra
Si las etiquetas se vuelven más grandes, pueden tapar demasiado el mapa o superponerse entre sí. Si se vuelven más pequeñas, los usuarios podrían preguntarse por qué una ciudad que antes se omitía por falta de espacio no aparece ahora en el nuevo espacio libre
Simplemente muestren todos los nombres de calles. No me importa que se vea denso. Estar parado en una intersección mirando un mapa sin nombres es un mapa inútil
También era así con los tiles ráster que se han usado durante años
Es un cambio nuevo muy bienvenido. Espero mapas con mejor aspecto
Aunque la sección “my workstation” me deja un poco desconcertado. No parece tener mucha relación con el resto del texto, y tampoco parece que las tareas que trata después requieran requisitos de sistema elevados
“Si las imágenes se volverán mucho más nítidas y también será posible cambiar el idioma de las etiquetas”, ¿eso significa que, por ejemplo, los vectores de la forma de una ciudad —más precisamente, el polígono— llevarán metadatos del nombre de la ciudad en todos los idiomas definidos?
La utilidad de la función de cambio de idioma depende, obviamente, de si existen traducciones. También podría incentivar a los editores a agregar más traducciones de topónimos
Se puede ver un ejemplo de cómo se vería en https://americanamap.org. Usa datos de OSM, pero no apunta a ser casi en tiempo real como los tiles de este artículo
Ojalá esto signifique que OSMAnd y OrganicMaps por fin unirán fuerzas para lanzar la app de mapas libre y de código abierto definitiva
Los tiles vectoriales en formato MVT no son adecuados en absoluto para navegación ni búsqueda. No significa que no se pueda armar algo a la fuerza, pero sería bastante forzado
Por ejemplo, OSMAnd tiene muchas funciones avanzadas muy útiles para quienes contribuyen a OSM, pero en una app para usuarios comunes podrían no hacer más que recargar la interfaz
https://marble.kde.org/ tenía desde hace 9 años su propia implementación de una capa OSM vectorial en streaming, y llevo bastante tiempo esperando que algo similar aparezca en otras apps de mapas OSM
En las apps OSM para Android, descargar mapas de cientos de megabytes en grandes bloques por país siempre fue un problema de almacenamiento. Me alegra mucho que por fin se esté formando un estándar, y espero que varias apps lo adopten y lo pulan. Gran trabajo