使用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);