3 puntos por GN⁺ 2024-11-20 | 2 comentarios | Compartir por WhatsApp
  • 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 tiles2columns se 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-pip y python3-virtualenv
  • En el entorno virtual de Python se instalan los siguientes paquetes
    • leafmap[maplibre]
    • mapbox_vector_tile
    • morecantile
    • notebook
  • 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.maplibregl y se especifica colorful.json como 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] a morecantile 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.decode y una función de transformación de coordenadas
  • Las claves de nivel superior del mosaico convertido incluyen las siguientes capas
    • addresses
    • bridges
    • buildings
    • ferries
    • land
    • ocean
    • pier_lines
    • pier_polygons
    • place_labels
    • pois
    • public_transport
    • sites
    • street_labels
    • street_polygons
    • streets
    • streets_labels_points
    • water_polygons
    • water_polygons_labels

Explorar la capa de POI con DuckDB

  • Después de extraer la capa pois en un archivo JSON separado, se abre con ST_READ de DuckDB para analizarla
  • Los POI con valor en cuisine se consultan como 67 filas
    • Los ejemplos de amenity incluyen restaurant, fast_food y cafe
    • Los ejemplos de cuisine incluyen french, greek, american, lebanese, coffee_shop, asian, persian, chicken y pizza
  • En el resultado de SUMMARIZE de 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_de y name_en son 29.96% cada una
    • La proporción de null en amenity es 31.86%
    • La proporción de null en cuisine es 85.86%
    • La proporción de null en geom es 0.00%
  • Según approx_unique, name tiene 258 valores, name_de 264, name_en 245, amenity 27 y cuisine 39

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 MB
    • buildings.gpkg: 6.2 MB
    • pois.gpkg: 1.4 MB
    • street_labels.gpkg: 1.4 MB
    • land.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.gpkg devuelve 6,329 filas e incluye nombres como Kiku, Fujiya Restaurant, Mövenpick Grand Al Bustan Dubai y McDonald's

2 comentarios

 
GN⁺ 2024-11-20
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.

    • Básicamente es cierto, aunque la perspectiva puede variar. Para quien ofrece mapas, la principal ventaja de los tiles vectoriales no son beneficios menores como la nitidez o la flexibilidad de estilos, sino que reducen mucho la cantidad de cómputo necesaria.
      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.
    • Hasta ahora, parece que el foco estuvo más en el software para generar tiles vectoriales actualizados continuamente que en enriquecer los estilos que aprovechan esos tiles.
    • Hice un fork de OpenrailwayMap. El original está en https://www.openrailwaymap.org y el estilo vectorial está en https://openrailwaymap.fly.dev.
      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.
    • Totalmente de acuerdo. Para buscar rutas uso una mezcla de OpenStreetMap y Google Maps; aunque quisiera usar solo OSM, no tiene tantos lugares registrados como Google Maps.
      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.
    • Pienso exactamente lo mismo. El estilo predeterminado de openstreetmap.org, para mí, es casi felicidad pura, y he intentado durante bastante tiempo llevar mapas vectoriales a ese nivel, pero no encontré ningún resultado realmente usable.
      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.

    • Me sorprende un poco que OSM haya tardado tanto en llegar hasta aquí. Los componentes técnicos básicos ya existían hace más de 10 años.
      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

    • Sí y no
      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
      1. https://operations.osmfoundation.org/2024/01/25/owg_budget.o...
      2. https://osmfoundation.org/wiki/Finances
    • También se podría decir que no. Porque desde hace mucho ya era posible autoalojar tiles vectoriales, o pagarle a alguien para que los aloje, con muy poco esfuerzo
      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
    • Sí, los tiles vectoriales son mucho más fáciles de autoalojar
      Por ejemplo, están https://protomaps.com/, https://openmaptiles.org/, https://versatiles.org/
    • Soy quien creó openfreemap.org. Correcto. Los tiles vectoriales son básicamente alojar archivos estáticos, y el servidor no tiene nada que hacer salvo el cifrado HTTPS
      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

    • El punto central de los tiles vectoriales es que el renderizado ocurre localmente y, salvo por el esquema de tiles, se controla mediante configuración de estilos que se puede modificar
      Así que el fallo visual que se ve es un problema del estilo o de la biblioteca que renderiza el contenido localmente
    • No sé cómo funciona el renderizador de tiles vectoriales de QGIS, pero si se trata de la página de demo en GitHub, debería ser fácil agregar a MapLibre el plugin de texto RTL para manejar correctamente texto escrito de derecha a izquierda: https://maplibre.org/maplibre-gl-js/docs/examples/mapbox-gl-...
  • Algo relacionado para ver: OpenFreeMap — hosting gratuito de tiles vectoriales de OpenStreetMap
    https://openfreemap.org/

    • OpenFreeMap no ofrece: búsqueda ni geocodificación, cálculo de rutas, navegación ni indicaciones, generación de imágenes estáticas, hosting de tiles ráster, hosting de imágenes satelitales, consulta de elevación, ni hosting de tiles o datasets personalizados
      https://github.com/hyperknot/openfreemap?tab=readme-ov-file#...
    • Wow, se ve muy bien pulido
      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

    • Realmente odio que en Google Maps desaparezcan los nombres de ciudades y calles al acercar o alejar el zoom. Algunos nombres de calles o tiendas solo se ven en un nivel de zoom específico, y si acercas o alejas más, desaparecen
      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
    • De todos modos, el punto de partida es la colocación automática de etiquetas
      También era así con los tiles ráster que se han usado durante años
    • ¿Hay alguna razón para esperar que el algoritmo de colocación vaya a cambiar mucho?
  • 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?

    • Las ciudades grandes ya incluyen nombres en varios idiomas. Por ejemplo, basta con ver Paris: https://www.openstreetmap.org/relation/71525
      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
    • shortbread, el esquema de tiles que se usa actualmente en las pruebas, no admite varios idiomas, pero entiendo que quienes trabajan en él quieren soportarlo una vez que se limpien los bugs
      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
    • No, pero sí se podrían traer tiles que contengan solo el texto necesario y parchear los tiles que ya tienes
  • 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

    • Ambas apps usan principalmente datos de mapas descargados y offline preprocesados en sus propios formatos
      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
    • No puede existir una única app de mapas definitiva, porque los casos de uso son distintos
      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
    • Al menos sería bueno que ambas pudieran compartir tiles de mapas, para no duplicar gigabytes de espacio con el mismo mapa
  • 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

    • Busqué la app Marble en Android, pero no está ni en Play Store ni en F-Droid. El enlace a Play Store en el sitio web da 404. ¿La abandonaron?