2013-04-16 2 views
19

Ich versuche offline Karten durch Caching (IndexedDB) im Browser zu machen. Ich verstehe das Konzept ist, dass ich die Fliesen der Karte zuerst herunterlade und speicher, wenn sie mit Internet verbunden sind.Wie erstellt man Offline-Karten (unter Verwendung von Flugblättern OSM), durch Zwischenspeichern?

Dann muss ich die Fliesen logisch offline laden.

Allerdings kann ich es nicht herausfinden.

Wie kann ich sie speichern und logisch neu laden? Ich stecke hier fest. Ich verwende die leaflet API für Karten. Wie kann dies umgesetzt werden?

+0

@Leonid bitte stoppen Sie mit diesen vorgeschlagenen Änderungen. 1) Hinzufügen einer Reihe von Zeilenumbrüchen hilft nicht und 2) Verwenden der '
' Tag ist nicht die bevorzugte Möglichkeit zum Einfügen von Zeilenumbrüchen bei Stack Overflow - Markup-Regeln sind bevorzugt (Ende einer Zeile mit zwei Leerzeichen statt einer) – MikeTheLiar

Antwort

5

Ich habe Cache Beispiel Implementierung http://tbicr.github.com/OfflineMap/leaflet/index.html und Code https://github.com/tbicr/OfflineMap/tree/master/leaflet_idb_sql_site.

Für die Speicherung verwendet IndexedDB und WebSQL. Speicher hatte eine geringe Leistung und wurde nicht getestet.

+0

Ich denke, Sie haben gerade im Cache gespeichert. Recht? Können wir die Kacheln lokal speichern und dann offline laden? –

+1

Keine Quelldateien im Anwendungscache, zwischengespeicherte Kacheln in IndexedDB oder WebSQL. Sie können localstorage verwenden (und das ist sehr einfach, weil es synchron ist), aber es gibt einige Beschränkungen nach Größe (nach Spezifikation 5MB, real siehe http://dev-test.nemikor.com/web-storage/support-test/). Sie können jedoch Hacks wie diese verwenden: http://www.filldisk.com/, aber das funktioniert nicht in allen Browsern und kann behoben werden. – tbicr

+0

Oh, k. Sie speichern also Kacheln. Ich verstehe jetzt. Kann ich etwas sagen .... Wie Sie erwähnt haben, um die Datei in der appcache.manifest-Datei zwischenzuspeichern, werden die Kacheln automatisch gespeichert.Ich glaube nicht, dass Sie Kacheln explizit in IndexedDB oder WebSQL speichern müssen. Einmal versuchen, ohne die Kacheln in IndexedDB zu speichern. Sie werden automatisch gespeichert, da Sie appcache.manifest enthalten haben. Ich danke dir sehr. –

9

Siehe meine umfangreiche Forschung auf diesem an:

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

und unter:

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

Key für das, was Sie tun möchten, eine Funktions Tile Schicht Sachen aus dem erhalten DB:

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

Übrigens, ich teste gerade PouchDB dafür aus, das ist viel sauberer als die rohe IndexeDB.

Folgen Sie meine Ergebnisse an:

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

+0

Hey, hast du das jemals beendet? –

+0

Klicken Sie auf den Link. Im Grunde hat er im August 2014 die pouchDB benutzt –

1

ich für das gleiche Problem an einer Lösung arbeite. Speichern von Kacheln von einem Kachelserver und Laden von Kacheln aus der DB in leafletjs.

Ich habe eine eigene Schicht implementiert, die Fliesen von einem db (IndexedDB/webdatabase), falls vorhanden lädt, und Fallbacks auf einen tileserver (die Access-Control-Allow-Origin-Header hat, siehe https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Access-Control-Allow-Credentials)

I umgesetzt Ein Steuerelement, das die aktuell angezeigten Elemente in indexeddb oder in der Webdatabase speichert.

Code ist auf https://github.com/allartk/leaflet.offline Dies ist zur Zeit noch in Arbeit!

Verwandte Themen