2012-10-19 103 views
9

我目前正在研究一個學校項目,我正在嘗試學習將OSM映射圖塊下載到手機本地內存/緩存中的技術,以便用戶能夠在離線時查看映射。在OSMDroid中下載特定映射器以緩存

這是通過給定一個特定的位置來完成的,距離位置特定半徑/距離內的地圖塊將被下載到手機存儲器(當存在在線連接時)用於離線顯示。

但是,我在理解OSMDroid的API時遇到了一些麻煩。從我的理解,似乎涉及到的類是:

請你糾正我,如果我錯了。

此外,在MapTileBase(我相信是提供者),getMapTile返回android.graphics.drawable.Drawable

這個Drawable類甚至與離線地圖顯示的概念有關嗎?

希望有人能賜教確切位置的地圖被稱爲被下載到手機的內存,以及我們如何可以編輯的地圖顯示界面項目,如路線,銷等

+1

可能重複(http://stackoverflow.com/questions/22862534/download-maps-for-osmdroid) – yochannah

回答

1

我不當您正在尋找一種在MapView尚未導航到的區域外進行離線緩存的方法時,您可以得到完全的答案。內置的緩存支持在那裏,但不完全是你想要做的。

如果您計劃緩存並且不僅僅提供您自己的離線地圖圖塊,您將需要在線下載功能。我會看看MapTileDownloader,也許嘗試實現它自己的版本。 MapTileDownloader.TileLoader.loadTile()方法需要MapTileRequestState,我相信MapTileProviderArray在需要地圖圖塊時調用。

如果您可以複製現有的MapTileDownloader的TileLoader功能,則可以將自己的相對MapTileRequestState或直接將MapTile直接注入請求的MapTile。例如以名爲MapTileRequestState的TileLoader爲例,檢查它,找出如何在當前視圖外部構造代表貼圖的新MapTileRequestState/MapTile。這並不容易,因爲您必須處理不同的縮放級別,並且取決於縮放級別,半徑應該更小等等。較低的縮放級別18的瓦片半徑將比更高10.

我個人最近努力嘗試100%離線工作,所以我沒有任何示例代碼來幫助。祝你好運,儘管它已經幾個月了。

+2

感謝實際下載輸入無論如何=)我有點解決了這個問題,通過下載指定的MapTiles,並將其壓縮在電話中離線顯示。我設法讓下載工作在一個縮放級別,但在多個縮放級別再次出現問題[here](http://stackoverflow.com/questions/13930364/asynctask-not-executing-properly-according-to-logic) – lyk

+0

這太糟糕了。我在最近使用了離線切片以及從activity_main.xml而不是通常的onCreate()構造函數構造的OSMDroid MapView:http://stackoverflow.com/questions/13894267/how-to-add-a-sliding -drawer-A-MapView類 - 視圖 - 這就是創建-編程 – garlicman