繁体   English   中英

使用MapBox Android SDK进行离线磁贴缓存

[英]Offline tile caching using MapBox Android SDK

我有一个使用iOS平铺缓存技术的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];

这基本上做的是下载地图,永久缓存切片并使应用程序可以在将来脱机运行。 由于我们正在通过官方付费API,这当然不会违反任何法律限制。

现在我想在Android上实现同样的目标。 我有在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" />

这工作正常,但一旦缓存完成,解决方案必须完全脱机。 我的问题是:MapBox SDK中是否有上述iOS源代码的Java等价物? 我试图查看API,但找不到对tile缓存系统的可靠引用。 经过一些痛苦的时间试图让它运行基于方法名称和代码文档,我放弃了。

我正在运行MapBox的最新GitHub发行版以及最新的Android Studio,所有内容都运行良好,但无法找到完成此任务的代码。 我不一定需要API参考,几行代码显示它是如何完成的。

从版本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或此功能的发布日期,因为两者都处于开发的早期阶段。

- Tom 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM