9 puntos por GN⁺ 2024-04-22 | 1 comentarios | Compartir por WhatsApp

Introducción a tinyworldmap

  • tinyworldmap es un mapa mundial para aplicaciones web con enfoque offline-first y de bajo ancho de banda
  • Está diseñado para usarse con Leaflet y soporta todos los niveles de zoom
  • La versión más completa ocupa solo 300 kB con compresión gzip
  • El renderizado del lado del cliente ha sido ampliamente perfilado y probado en teléfonos antiguos de bajo rendimiento de hace 10 años, sin latencia perceptible
  • Por defecto muestra las 10,000 ciudades más pobladas agregadas a OpenStreetMap
  • Al momento de escribir esto, incluye todas las ciudades y pueblos con una población superior a 48,000 habitantes

Cómo usar tinyworldmap

Usarlo como mapa base

  • Para usar tinyworldmap como mapa base de Leaflet, agrega lo siguiente dentro de la etiqueta head:

  • Este script incluye todos los datos necesarios para mostrar el mapa
  • En lugar de agregar una capa de tiles al mapa de Leaflet, usa lo siguiente:
new L.GridLayer.TinyWorld().addTo(map)
  • El constructor de TinyWorld recibe varias opciones: backgroundColor, textFillColor, borderStrokeColor, borderFillColor, borderWidth, textStrokeColor (para distinguir el texto del resto), textStrokeWidth, cityFont (por ejemplo, "12px Arial"), countryFont, dotColor
  • Si se especifica dotColor, cada ciudad se mostrará como un punto. Esto mejora la usabilidad cuando se usa una versión reducida de tinyworldmap sin fronteras

Usarlo como mapa de respaldo

  • En aplicaciones web offline-first, es imposible almacenar en caché mapas basados en imágenes para todos los niveles de zoom (la cantidad de tiles es enorme y su tamaño llega a terabytes)
  • Este repositorio ofrece un service worker que permite habilitar funcionalidad offline en una app web
  • Una vez instalado el service worker, el mapa de respaldo se precarga. Todas las páginas visitadas se almacenan en caché, excepto el mapa base
  • Mientras el servidor siga siendo accesible, no se usan los datos en caché
  • Si el usuario está offline, el sitio web se sirve desde la caché y el service worker intercepta las solicitudes al servidor de tiles de OSM y genera tiles sustitutos localmente usando tinyworldmap
  • Antes de registrar el service worker, primero debes modificar todas las secciones marcadas como 'IMPORTANT' dentro del service worker
  • Una vez registrado, debes atribuir obligatoriamente OpenStreetMap y tinyworldmap en la capa de tiles de la siguiente manera:
L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
  maxZoom: 19,
  attribution: '© [OpenStreetMap](https://www.openstreetmap.org/copyright), [tinyworldmap](https://www.tinyworldmap.com)'
}).addTo(map);
  • Para ver un ejemplo de una aplicación en producción que usa tinyworldmap como respaldo, visita Hitchmap. Carga el sitio web en un navegador compatible con service workers, espera un momento, luego desactiva Internet y vuelve a cargar; la web app debería seguir funcionando normalmente usando el mapa de respaldo. La instalación del service worker puede tardar un poco

Mapas mundiales aún más pequeños

  • El mapa completo pesa 300K comprimido con gzip / 694K sin comprimir. Para ciertos casos de uso, incluso ese tamaño puede seguir siendo demasiado grande

Sin fronteras

  • tiny-world-noborders-10000.js(on) incluye todos los datos de la versión completa excepto las fronteras y las costas
  • La versión gzip reduce 100k y la versión sin comprimir reduce 200k
  • La versión sin fronteras no solo es más pequeña, sino que también tiene la ventaja de que todos los datos incluidos son precisos
  • Las fronteras de la versión completa no son precisas en niveles altos de zoom, por lo que pueden verse extrañas al superponer formas que coincidan con fronteras y costas. En esos casos, la versión sin fronteras encaja mejor
  • El estilo predeterminado es el siguiente

Sin ciudades

  • Hay dos versiones sin etiquetas de ciudades: tiny-world-nocities.js(on) (mantiene las etiquetas de países) y tiny-world-borders.js(on) (omite las etiquetas de países)
  • Las etiquetas de ciudades ocupan 410K sin comprimir y 172K comprimidas

Menos ciudades

  • Por último, cada archivo que incluye etiquetas de ciudades también tiene versiones con 2,000 y 4,000 ciudades
  • Solo hay que cambiar 10000 por 2000 o 4000 en el nombre del archivo
Número de ciudades incluidas Población
10,000 > 48,000
4,000 > 137,000
2,000 > 287,000

Contratar tinyworldmap

  • Si necesitas un mapa personalizado (por ejemplo, más detallado o en otro idioma) o ayuda para implementar funcionalidad offline en tu sitio web, comunícate a business@tinyworldmap.com

Atribución

  • Igual que los datos de OpenStreetMap, los datos de tinyworldmap están licenciados bajo ODBL, por lo que se requiere atribución
  • Si seguiste los pasos descritos arriba, el pie de página de Leaflet ya debería incluir la atribución tanto a OpenStreetMap como a tinyworldmap. Si no es así, agrega lo siguiente:
© [OpenStreetMap](https://www.openstreetmap.org/copyright), [tinyworldmap](https://www.tinyworldmap.com)

Opinión de GN⁺

  • tinyworldmap ofrece un mapa mundial liviano que puede usarse offline o en dispositivos de bajos recursos. Parece una solución capaz de reemplazar alternativas existentes como OpenStreetMap en ciertos casos
  • Una ventaja es que ofrece versiones aún más ligeras al excluir opcionalmente fronteras, ciudades, etc. También parece muy flexible al permitir mapas personalizados según la necesidad
  • Sin embargo, para que funcione offline se requiere implementación técnica, como modificar el service worker, por lo que hará falta cierta experiencia por parte del desarrollador. Sería bueno contar con una guía más detallada sobre esta parte
  • En el mercado local se usan mucho APIs de mapas de portales como Naver y Kakao; si pudiera integrarse con servicios de este tipo para funcionar offline, parecería tener aún más casos de uso
  • Como incluye información sobre las principales ciudades del mundo, podría ser útil en áreas como viajes y logística. El soporte multilingüe también parece ser un punto clave

1 comentarios

 
GN⁺ 2024-04-22
Comentarios en Hacker News
  • El autor plantea que sería mejor dedicar más datos a las costas y a la distinción de las principales áreas metropolitanas, en lugar de a los detalles de los suburbios de Detroit.
  • Se señala que falta detalle en las costas, y que mientras algunos pueblos del Reino Unido aparecen sumergidos en el mar, Groenlandia y el norte de Canadá ocupan demasiados vértices. Parece que ya se aplicó la proyección de Mercator, pero también se opina que sería mejor dar menor prioridad a las zonas despobladas.
  • Un usuario creó un mapa similar, enfocado en internacionalización (i18n) en idiomas oficiales de la ONU (excepto español), también offline-first, ultraligero y basado en vectores. Los nombres de países y ciudades usan las denominaciones oficialmente declaradas ante la ONU.
  • Se comenta que al revisar los 10,000 asentamientos más grandes del mundo, la población mínima baja hasta 48,000 habitantes, aunque aún no está claro si esa cifra resulta sorprendente o no.
  • La idea de comprimir datos espaciales como rutas (Path) parece impresionante, y se valora que cargue muy rápido en móvil. Sin embargo, también se propone usar datos de Natural Earth en lugar de OSM para evitar la licencia ODbL, e incluir la herramienta para convertir datos espaciales en rutas.
  • También hay opiniones de que las capitales deberían incluirse y marcarse de forma especial sin importar el tamaño de su población, y de que este mapa encajaría bien para responder aproximadamente dónde en el mundo puede encontrarse una especie en una página dedicada a ella.
  • Se cuestiona que se use un service worker para la versión offline, y se señala que hace falta un tutorial más conciso para que la gente pueda instalarlo y usarlo rápidamente. Podría ser mejor ofrecer simplemente un archivo HTML con los tiles codificados en base64 o un archivo ZIP.
  • Resulta interesante que se hayan reflejado cambios recientes en nombres preferidos, como Chequia y Macedonia, pero que otros como Turquía y Timor Oriental todavía no.
  • La carga progresiva es algo inestable, por lo que a veces los tiles no se muestran cuando se hace zoom o se desplaza el mapa rápidamente.