2013-04-16 24 views
19

Próbuję tworzyć mapy w trybie offline poprzez buforowanie (IndexedDB) w przeglądarce. Rozumiem, że koncepcja polega na tym, że najpierw pobieraję i przechowuję kafelki mapy po podłączeniu do Internetu.Jak tworzyć mapy offline (korzystając z ulotek OSM) przez buforowanie?

Następnie muszę załadować płytki logicznie w trybie offline.

Jednak nie jestem w stanie tego rozgryźć.

Jak je przechowywać i jak ładować je logicznie? Utknąłem tutaj. Używam map leaflet API. Jak to zrealizować?

+0

@Leonid proszę zatrzymać się z tymi sugerowanymi zmianami. 1) Dodanie pęknięć linii nie pomaga, a 2) użycie tagu '
' nie jest preferowanym sposobem wstawiania podziałów linii w Stack Overflow - preferowane są reguły Markup (kończą linię z dwoma spacjami zamiast jednego) – MikeTheLiar

Odpowiedz

5

Mam przykład wdrożenia pamięci podręcznej http://tbicr.github.com/OfflineMap/leaflet/index.html i kod https://github.com/tbicr/OfflineMap/tree/master/leaflet_idb_sql_site.

Do przechowywania używanych IndexedDB i WebSQL. Pamięć masowa miała niską wydajność i nie była testowana.

+0

Myślę, że właśnie zapisałeś w pamięci podręcznej. Dobrze? Czy możemy przechowywać płytki w localstorage, a następnie załadować je w trybie offline? –

+1

Brak plików źródłowych przechowywanych w pamięci podręcznej aplikacji, buforowanych kaflach w IndexedDB lub WebSQL. Możesz użyć localstorage (i to bardzo łatwe, ponieważ jest synchroniczne), ale ma pewne ograniczenia według rozmiaru (według specyfikacji 5 MB, prawdziwe patrz http://dev-test.nemikor.com/web-storage/support-test/). Możesz jednak użyć takich hacków jak: http://www.filldisk.com/, ale to nie działa we wszystkich przeglądarkach i można je naprawić. – tbicr

+0

Oh, k. Więc buforujesz płytki. Teraz zrozumiałem. Czy mogę coś powiedzieć ... Jak wspomniałeś o buforowaniu pliku w pliku appcache.manifest, automatycznie zapisze on kafelki.Nie sądzę, że musisz jawnie przechowywać kafelki w IndexedDB lub WebSQL. Raz spróbuj, bez przechowywania płytek w IndexedDB. Będą one automatycznie przechowywane, tak jak dołączyłeś appcache.manifest. Dziękuję bardzo. –

9

Zobacz moje obszerne badania na ten temat pod adresem:

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

i adresem:

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

Klucz do tego, co chcesz zrobić jest funkcjonalna warstwa Dachówka dostać rzeczy z DB:

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

BTW, właśnie teraz testuję PouchDB do tego, który jest znacznie czystszy niż surowy IndexeDB.

Śledź moje wyniki na:

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

+0

Hej, czy kiedykolwiek to skończyłeś? –

+0

Kliknij link. Zasadniczo zakończył korzystanie z pouchDB od sierpnia 2014 –

1

pracuję nad rozwiązaniem tego samego problemu. Przechowywanie kafelków z serwera plików i ładowanie ich z bazy danych w pliku leafletjs.

I wprowadziły warstwę niestandardowy, który ładuje płytki z db (IndexedDB/webdatabase), jeśli dostępne, a fallbacks do tileserver (który ma Access-Control-Allow-Origin nagłówek, zobacz https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Access-Control-Allow-Credentials)

I wdrożone formant, który zapisuje aktualnie widoczne kafelki w indexeddb lub webdatabase.

Kod znajduje się na https://github.com/allartk/leaflet.offline W tej chwili nadal trwają prace!

Powiązane problemy