2016-03-04 26 views
0

有沒有辦法讓一個離線地圖不需要第一次網絡連接來緩存一些地圖數據?Android預先安裝(在apk文件上)瓦片的離線地圖

首先,我使用谷歌地圖,但它似乎只緩存一些瓷磚,如果你沒有互聯網連接

之後,我試圖osmdroid做,那裏靠近它不會加載任何事情在第一時間推出足以谷歌地圖的邏輯,但我找不到一種方式來使用它的資產文件夾,而不是與SDK文件夾預先安裝的瓷磚。如果用戶平板電腦沒有SD卡,該怎麼辦? 我確實需要一個可以在任何平板電腦上工作的全球解決方案。

我只需要瓷磚爲一個國家不是全世界!

這裏是我到目前爲止的代碼

MapView mapView = new MapView(this, 256); //constructor 

    mapView.setClickable(true); 

    mapView.setBuiltInZoomControls(true); 
    mapView.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE); 

    setContentView(mapView); //displaying the MapView 

    mapView.getController().setZoom(6); //set initial zoom-level, depends on your need 

    mapView.getController().setCenter(new GeoPoint(37.9513589,23.6474895)); //This point is in Enschede, Netherlands. You should select a point in your map or get it from user's location. 

    mapView.setUseDataConnection(false); 

,我有我的瓷磚資產/ MapQuest的/ Z/X/y.jpg

怪異的是,在該鏈接:https://github.com/osmdroid/osmdroid/wiki/Map-Sources它說, :

磁磚源決定圖像組顯示的內容,例如Bing,Mapquest服務,Mapnik的,等等默認瓷磚供應商,搜索你的瓷片源,資產,離線ZIP /源碼/等在下面(/SD卡/ O smdroid),Downloaded tile cache(/ sdcard/osmdroid/tiles),最後下載。

+0

無需下載地圖的全球解決方案?所以你想要將整個世界與你的應用程序捆綁在一起?該應用程序將是巨大的...如果您使用OsmAnd數據庫... 10-20 GB ... – ByteHamster

+0

我編輯了我的問題。對不起,以前沒有定義它 – arniotaki

+0

你看過這個:https://github.com/osmdroid/osmdroid/wiki/Offline-Map-Tiles –

回答

0

是的,你可以。兩種策略

  1. 準備一個像維基中描述的sqlite文件,並將其放置在資產中。當您的應用第一次啓動時,在數據庫重新創建/充值之前將數據庫複製到/ sdcard/osmdroid/
  2. 將資料中的壓縮zip內容存儲在資產中。文件結構看起來像assets/TILESOURCENAME/Z/X/Y.extension。使用這種機制,osmdroid droid應該使用默認的tile提供程序鏈來找到它。

注意:#1通常更快。

+0

我想避免取決於我提到的SD卡,所以你認爲使用第二種方法將通過立即訪問資產文件夾並且不復制到SD卡來解決我的問題? – arniotaki

+0

我正在使用mapView.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE);正如你所建議的,集中在我的瓷磚的位置和縮放我的瓷磚支持的縮放級別。資產/瓷磚/ z/x/y中有瓷磚,但沒有任何顯示! – arniotaki

+1

sdcard在這方面不是nessasaraly真正的SD卡。 – Ifor