2015-10-19 102 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的方法? –