2013-04-16 95 views
19

我想通過瀏覽器中的緩存(IndexedDB)製作離線地圖。我理解的概念是,我連接到互聯網時首先下載並存儲地圖的磁貼。如何通過緩存製作離線地圖(使用傳單OSM)?

然後,我必須在邏輯上離線加載磁貼。

但是,我無法弄清楚。

如何存儲它們以及如何從邏輯上重新裝載它們?我被困在這裏。我爲地圖使用了leaflet API。這如何實現?

+0

@Leonid請停止這些建議的編輯。 1)添加一堆換行符並沒有幫助,2)使用'
'標記不是在Stack Overflow中插入換行符的首選方式 - 首選標記規則(結束包含兩個空格而不是一個空格的行) – MikeTheLiar

回答

5

我有緩存示例實現http://tbicr.github.com/OfflineMap/leaflet/index.html和代碼https://github.com/tbicr/OfflineMap/tree/master/leaflet_idb_sql_site

對於使用IndexedDB和WebSQL的存儲。存儲性能低下,未經測試。

+0

我想你只是存儲在緩存中。對?我們可以將這些瓷磚存儲在本地存儲中,然後在離線時加載它們嗎? –

+1

沒有源文件存儲在應用程序緩存中,緩存在IndexedDB或WebSQL中的磁貼。你可以使用localstorage(這很容易,因爲它是同步的),但它的大小有一定的限制(按規格5MB,真實見http://dev-test.nemikor.com/web-storage/support-test/)。不過,您可以使用像這樣的黑客:http://www.filldisk.com/,但這不適用於所有瀏覽器,並且可以修復。 – tbicr

+0

哦,k。所以,你正在緩存瓷磚。我現在明白了。我可以說些什麼....正如你所提到的緩存在appcache.manifest文件中的文件,它會自動存儲瓷磚。我不認爲你需要在IndexedDB或WebSQL中顯式存儲切片。一旦嘗試,無需將切片存儲在IndexedDB中。它們將自動存儲,因爲您已包含appcache.manifest。非常感謝。 –

9

見我對這個廣泛的研究在:

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

,並在:

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

主要爲你想要做什麼是功能性瓷磚層從得到的東西DB:

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

順便說一句,我只是現在測試PouchDB這一點,這是原始的IndexeDB更清潔。

在按照我的結果:

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

+0

嘿,你有沒有完成這個? –

+0

點擊鏈接。截至2014年8月,他基本上最終使用了pouchDB –

1

我對同一個問題的解決方案的工作。從tileserver存儲切片,並從leafletjs中的db中加載它們。

我已經實現其中從分貝(索引資料/ webdatabase)如果可用加載瓷磚的定製層,並回退一個tileserver(其具有訪問控制允許來源頭,見https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Access-Control-Allow-Credentials

我實現一個將當前視圖中的切片保存在indexeddb或webdatabase中的控件。

代碼在https://github.com/allartk/leaflet.offline這個時間還在進行中!