gis web-mapping – Base de datos para mosaicos de mapas deslizantes fuera de línea

Pregunta:

Actualmente tengo una aplicación de mapas HTML5 sin conexión (basada en Leaflet y KendoUI con adiciones personalizadas) que tiene un manifiesto de aplicación y funciona bien en múltiples plataformas. Sin embargo, dudo en usar el manifiesto para almacenar los mosaicos del mapa real de esta manera (archivos PNG almacenados como un caché de mosaicos estilo TMS).

Asuntos:

  • Puede haber muchos mosaicos (10 MB – 50 MB) en aproximadamente 1000 archivos PNG
  • La descarga inicial podría ser muy lenta (y difícil de mostrar el progreso al usuario)
  • Los manifiestos de aplicaciones funcionan o no funcionan si no lo hacen, todo el almacenamiento en caché sin conexión fallará (de acuerdo con [whatwg.org] [1])
  • El usuario sin conexión ocasionalmente se volverá a conectar y necesitará actualizar los mosaicos. Estos son pequeños deltas, pero el mecanismo de manifiesto de la aplicación recargaría todos los archivos js, css y PNG tan pronto como las actualizaciones del manifiesto.

Idea alternativa: mantenga la aplicación web separada del almacenamiento de los mosaicos de mapas deslizantes. Almacene los mosaicos en una base de datos compatible con aplicaciones web

Actualizar:

[PouchDB agregó recientemente soporte para blobs binarios. Estoy obteniendo buenos resultados iniciales. Ver:https://stackoverflow.com/questions/16721312/using-pouchdb-as-an-offline-raster-map-cache ]

Pregunta: ¿Qué dice la sabiduría colectiva (y la experiencia) sobre las siguientes opciones para una base de datos compatible con JavaScript?

  1. SqlLite
    • Parece que necesita crear un contenedor de aplicación nativo para que esto le permita hablar con JavaScript
    • Por ejemplo, agregue su DLL a un programa nativo para Windows y PhoneGap para Android / IOS
  2. WebSQL
    • depricado
    • pero era un SQL Lite que podía generar y distribuir fácilmente desde el servidor web host
  3. IndexDB

    • El almacenamiento de blobs parece funcionar, consulte: https://hacks.mozilla.org/2012/02/storing-images-and-files-in-indexeddb/
    • Me preocupa si esta es la única forma de poblar inicialmente la base de datos
    • ¿Es básicamente un archivo SQLLite? ¿Puedo enviarlo para carga masiva de bases de datos?
    • Me estoy inclinando hacia esto como una solución. ¿Son sus trampas que no conozco?

    Requisitos:

    • Población inicial rápida (mediante descarga) a la base de datos web del cliente
    • Compatible con la API actual de Leaflet TileLayer (es decir, prefiero no escribir una capa personalizada, pero si es necesario …) (por ejemplo, MbTiles)
    • Plataforma: computadoras portátiles con Windows, pero se desean tabletas Android e IOS (puedo esperar hasta que se lance IndexDB, no necesito soporte inmediato)
    • Preferiría no escribir una aplicación nativa (EXE, IOS, Android) pero si esa es la mejor manera …
    • Generación de mapas web del lado del servidor (este será un proceso automatizado). El usuario elige una ubicación, elige mapas y se transforman dinámicamente y se convierten en un caché de mosaicos deslizantes (este trabajo ya está hecho en gran parte).
    • Descarga inicial masiva rápida
    • Actualizaciones delta de cambio de mapa (escribiré esta lógica, basada en números de existencias constantes, y actualizaré la lógica de la fecha)
    • Impacto mínimo en la aplicación web actual Leaflet & KendoUI

Actualizar:

Idea de fondo clave: si bien la aplicación web es bastante estable, los mosaicos de mapas deslizantes se generan sobre la marcha para su ubicación y el tipo de problema que está haciendo (en el back-end). Así que pensé en otras dos formas de transferir el 'big bang' inicial y luego las actualizaciones:

Zip File (probablemente no sea una buena idea, ya que agrega carga al servidor) también la expansión en la máquina cliente requerirá la interacción del usuario, pero permite que los mosaicos deslizantes usen URL locales

API de archivos HTML5: no he examinado esto con gran detalle. Pero parece que tiene la mayoría de las operaciones para crear un árbol de archivos local en formato TMS: http://www.html5rocks.com/en/tutorials/file/filesystem/ lo que será interesante probar es el rendimiento (por ejemplo, ¿puedo usar trabajos web para maximizar el ancho de banda al disco y a través de la red). IndexDB no está ampliamente implementado para ser compatible con los trabajadores web (interfaz de sincronización: https://stackoverflow.com/questions/10698728/indexeddb-in-web-worker-on-firefox

Encontré información adicional sobre el uso de IndexDB con Leaflet:

https://github.com/calvinmetcalf/leaflet.pouch (sincroniza couchdb con indexdb para estar fuera de línea) También aquí hay algunas pruebas para las velocidades de lectura / escritura para indexdb, websql y tienda local: http://jsperf.com/indexeddb -v-localstorage / 15

Y aquí se explica cómo usar la API de archivos de lectura / escritura desde javascript: (y también para solicitar aumentar los límites de almacenamiento) http://www.html5rocks.com/en/tutorials/file/filesystem/


Gracias, Tom MacWright (también conocido como tmcw), por sus buenos comentarios. Su ejemplo realmente va a ayudar cuando pueda crear capas personalizadas para ingerir los blobs binarios.

Ayer hice algunas pruebas con IndexedDB y, al usar algunos polyfills y bibliotecas, creo que resolverá mis problemas. Ahora es el momento de poner algo de sudor en esto, y les informaré.


Por cierto: si desea ver los resultados de mi estudio en las bases de datos del lado del cliente, consulte:

https://stackoverflow.com/questions/14113278/storing-image-data-for-offline-web-application-client-side-storage-database


Respuesta:

PhoneGap y MBTiles .

WebSQL e IndexDB no serán suficientes. 'Windows Laptops' no tendrá el mismo código que los dispositivos móviles.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım