2013-04-16 6 views
19

Sto cercando di rendere le mappe offline attraverso la memorizzazione nella cache (IndexedDB) nel browser. Capisco il concetto è che ho scaricato e memorizzato le tessere della mappa prima quando connesso a Internet.Come creare mappe offline (utilizzando OSM opuscoli), memorizzando nella cache?

Quindi devo caricare logicamente le tessere offline.

Tuttavia, non sono in grado di capirlo.

Come li memorizzo e come caricarli di nuovo in modo logico? Sono bloccato qui. Sto usando il leaflet API per le mappe. Come può essere implementato?

+0

@Leonid si prega di interrompere con queste modifiche suggerite. 1) L'aggiunta di un gruppo di interruzioni di riga non aiuta e 2) usare il tag '
' non è il modo preferito di inserire interruzioni di riga in Stack Overflow - Le regole di markup sono preferite (termina una linea con due spazi invece di una) – MikeTheLiar

risposta

5

Ho implementazione di esempio di cache http://tbicr.github.com/OfflineMap/leaflet/index.html e codice https://github.com/tbicr/OfflineMap/tree/master/leaflet_idb_sql_site.

Per lo storage utilizzato IndexedDB e WebSQL. Lo storage ha prestazioni ridotte e non è stato testato.

+0

Penso che tu abbia appena memorizzato nella cache. Destra? Possiamo memorizzare le tessere in localstorage e poi caricarle, quando sono offline? –

+1

Nessun file di origine memorizzato nella cache dell'applicazione, i moduli memorizzati nella cache in IndexedDB o WebSQL. Puoi usare localstorage (e questo molto semplice perché sincrono) ma ha alcune restrizioni per dimensione (per esempio 5 MB, reale vedi http://dev-test.nemikor.com/web-storage/support- test /). Tuttavia è possibile utilizzare hack come questo: http://www.filldisk.com/, ma questo non funziona in tutti i browser e può essere risolto. – tbicr

+0

Oh, k. Quindi, stai memorizzando le tessere nella cache. Ho capito ora Posso dire qualcosa ... Come hai detto di mettere in cache il file nel file appcache.manifest, esso memorizzerà automaticamente le tessere.Non penso che sia necessario memorizzare in modo esplicito le tile in IndexedDB o WebSQL. Una volta provato, senza memorizzare le tessere in IndexedDB. Verranno automaticamente archiviati, come è stato incluso appcache.manifest. Grazie mille. –

9

Vedi il mio ricerche approfondite su questo a:

Storing Image Data for offline web application (client-side storage database)

ea:

https://gis.stackexchange.com/questions/44813/database-for-offline-slippy-map-tiles

chiave per ciò che si vuole fare è un livello sezione funzionale per ottenere cose dal DB:

https://github.com/ismyrnow/Leaflet.functionaltilelayer

BTW, sto provando proprio PouchDB per questo, che è molto più pulito del raw IndexeDB.

Seguire i miei risultati a:

https://groups.google.com/forum/?fromgroups#!topic/pouchdb/RG6wUsAi2R0

+0

Ehi, l'hai mai finito? –

+0

Fare clic sul collegamento. A partire dall'agosto 2014 ha praticamente finito con l'uso di pouchDB –

1

Sto lavorando ad una soluzione per lo stesso problema. Memorizzare le tessere da un server di tessere e caricarle dal db in leafletjs.

ho implementato uno strato personalizzato che carica le piastrelle da un db (IndexedDB/webdatabase), se disponibile, e fallback ad un tileserver (che ha Access-Control-Allow-Origin intestazione, vedi https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Access-Control-Allow-Credentials)

ho implementato un controllo che salva le tessere attualmente in vista in indexeddb o webdatabase.

Il codice è https://github.com/allartk/leaflet.offline Questo è ancora in corso di elaborazione in questo momento!