使用MapBox Android SDK进行离线瓷砖caching

我有一个使用iOS瓷砖caching技术的工作iOS原型,如下所示(Objective-C代码):

RMTileCache * tileCache = [[RMTileCache alloc] initWithExpiryPeriod:0]; [tileCache setBackgroundCacheDelegate:self]; RMMapboxSource * tileSource = [[RMMapboxSource alloc] initWithMapID:mapID]; [tileCache beginBackgroundCacheForTileSource:tileSource southWest:southWest northEast:northEasth minZoom:minZoom maxZoom:maxZoom]; 

这基本上是做的是下载地图,永久caching瓷砖,使应用程序在未来离线运行的可能性。 由于我们正在通过正式的付费API,这当然不会违反任何法律限制。

现在我想在Android上实现相同的function。 我有Android Studio中运行的SDK和使用Map ID的远程地图的工作项目,基本上这(Android Eclipse布局XML):

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

这工作正常,但解决scheme必须完全脱机,一旦caching完成。 我的问题是:在MapBox SDK中是否有上述iOS源代码的Java等价物? 我试图查看API,但无法find瓷砖caching系统的可靠参考。 经过一段痛苦的时间,试图根据方法名称和代码文档来运行,我放弃了。

我正在运行MapBox的最新GitHub发行版以及最新的Android Studio,一切正常,运行良好,但无法find完成此代码的代码。 我不一定需要一个API参考,几行代码显示如何完成就足够了。

脱机平铺caching支持现在在版本0.5.1的Mapbox Android SDK中可用。 它于2014年12月20日发布。 以下是如何开始的一个基本示例:

 OfflineMapDownloader offlineMapDownloader = OfflineMapDownloader.getOfflineMapDownloader(getActivity()); BoundingBox boundingBox = mapView.getBoundingBox(); CoordinateSpan span = new CoordinateSpan(boundingBox.getLatitudeSpan(), boundingBox.getLongitudeSpan()); CoordinateRegion coordinateRegion = new CoordinateRegion(mapView.getCenter(), span); offlineMapDownloader.beginDownloadingMapID("MapboxMapID", coordinateRegion, (int) mapView.getZoomLevel(), (int) mapView.getZoomLevel()); 

加载之前保存的地图:

 ArrayList<OfflineMapDatabase> offlineMapDatabases = offlineMapDownloader.getMutableOfflineMapDatabases(); OfflineMapDatabase db = offlineMapDatabases.get(0); OfflineMapTileProvider tp = new OfflineMapTileProvider(getActivity(), db); offlineMapOverlay = new TilesOverlay(tp); mapView.addOverlay(offlineMapOverlay); 

我向支持小组提问这个问题的答案是:

“我们目前还没有发布Android SDK或此function的date,因为两者都处于开发的早期阶段。

– 汤姆MacWright support@mapbox.com

这是一个非常好的产品,我希望我们可以很快在Android使用它。

在你的布局文件中必须有:

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

在你想要初始化MapView代码中:

 File file = new File("your full path to tiles db"); MBTilesLayer mbTilesLayer = new MBTilesLayer(file); MapView mapView = (MapView) findViewById(R.id.yourMapViewId); mapView.setTileSource(mbTilesLayer);