2015-10-19 101 views
2

我已經開始使用Mapbox Android SDK構建Android應用程序。我想使用我在Tilemill創建的自定義mbtiles文件。我下面這個指令Mapbox Android SDK與在線定製MBTiles

Code to Display the Tilemills mbtiles in android project

我已經成功地實現了這個代碼和工作的罰款。但問題是,當我構建APK時,它變成了一個巨大的文件,因爲我的MBTiles文件太大了。這就是爲什麼它需要很長時間才能打開應用程序。有沒有辦法從聯機服務器存儲訪問MBTiles文件,如http://www.example.com/mymap.mbtiles?我試圖用下面的代碼的MapView活動,但沒有得到任何運氣

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     MapView mapView = (MapView) findViewById(R.id.mapview); 
     mapView.setZoom(10); 
     mapView.setCenter(new LatLng(38.8977, -77.0365)); 
     mapView.setTileSource(new MBTilesLayer(this, "http://www.example.com/mymap.mbtiles")); 

XML文件包含

<com.mapbox.mapboxsdk.views.MapView 
    android:id="@+id/mapview 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" /> 

回答

2

在我看來,你已經在你的問題中使用的API現在不推薦使用mapbox-gl-native項目。然而,從我這裏其他的答案發現,在GitHub上有可能是一個方式來實現你想要做什麼:

  1. 提取您的.mbtiles文件到png格式瓷磚文件,並使用mb-util一個以.json文件。
  2. 將這些文件存放在服務器上。
  3. 使用TileJsonTileLayer而不是MBTilesLayer來訪問聯機切片。嘗試執行此操作可以在mapbox-android-sdk-legacy項目的#742問題中找到。

如果它不起作用,我很抱歉。這是我目前可以提出的最好的,因爲我沒有時間自己實施它。

+0

它終於有效。但是我使用WebSourceTileLayer而不是TileJsonTileLayer。問題是瓷磚加載速度太慢。當我在web框架中使用與傳單API相同的瓷磚時,它不會花太長時間。你能讓我知道TileJsonTileLayer的構造函數嗎?或者它是否被替換爲0.7.4版本的depreacated? –

+1

我找到了[TileJsonTileLayer.java](https://github.com/mapbox/mapbox-android-sdk-legacy/blob/0.7.4/MapboxAndroidSDK/src/main/java/com/mapbox/mapboxsdk/tileprovider/ tilesource/TileJsonTileLayer.java)在遺留項目的0.7.4分支上。 TileJsonTileLayer應該和WebSourceTileLayer具有相同的構造函數。但是,在我看來,你應該使用方法setTileJSON(JSONObject aTileJSON)或重寫getBrandedJSONURL來返回正確的URL。 – jmeinke

+0

....您的解決方案正在工作,但通過mb-util導出mbtiles然後使用它非常耗費時間和忙碌的工作。你有沒有找到直接使用mbTiles的方法? –