如何在Android上显示MapBox图块?我尝试将它与OSMDroid一起使用,而Nutiteq则没有成功。是否有MapBox的安卓库?
例如,我使用此代码在OSMDroid上实现MapBox:http://blog.spatialnetworks.com/post/2012/07/using-mbtiles-on-android-with-osmdroid
XYTileSource MBTILESRENDER = new XYTileSource("mbtiles", ResourceProxy.string.offline_mode, 1, 20, 256, ".png", "http://example.org/");
DefaultResourceProxyImpl mResourceProxy = new DefaultResourceProxyImpl(this.getApplicationContext());
SimpleRegisterReceiver simpleReceiver = new SimpleRegisterReceiver(this.getActivity());
File f = new File(Environment.getExternalStorageDirectory(), "mymbtilesfile.mbtiles");
IArchiveFile[] files = { MBTilesFileArchive.getDatabaseFileArchive(f) };
MapTileModuleProviderBase moduleProvider = new MapTileFileArchiveProvider(simpleReceiver, MBTILESRENDER, files);
MapTileProviderArray mProvider = new MapTileProviderArray(MBTILESRENDER, null, new MapTileModuleProviderBase[] { moduleProvider });
this.mMapView = new MapView(this, 256, mResourceProxy, mProvider);
但它没有用,我想直接从网上加载MbTiles。
答案 0 :(得分:16)
修改
Official Mapbox Android SDK is released.
对于那些投票的人,我在sdk存在之前回答了这个问题。
=============================================
我认为Nutiteq看起来很有希望。他们的API有很多功能。此外,他们的演示项目也是内联评论。你可以看看this project。特别是,MBTilesMapActivity可能是您正在寻找的东西。该课程展示了如何使用mbtiles:
// 1. Get the MapView from the Layout xml
mapView = (MapView) findViewById(R.id.mapView);
// 2. create and set MapView components
Components components = new Components();
mapView.setComponents(components);
// 3. Define map layer for basemap
MBTilesMapLayer dbLayer = new MBTilesMapLayer(new EPSG3857(), 0, 19, file.hashCode(), file, this);
mapView.getLayers().setBaseLayer(dbLayer);
...
// 4. Start the map - mandatory
mapView.startMapping();
// 5. zoom buttons using Android widgets - optional
// get the zoomcontrols that was defined in main.xml
ZoomControls zoomControls = (ZoomControls) findViewById(R.id.zoomcontrols);
您还可以查看从其演示中修改的my toy project。基本上,我的应用程序允许用户输入mbtiles文件的URL。然后,它下载文件并将其加载到MapView。
如果您真的必须坚持使用OSMDroid,this可能会有所帮助。我没有机会尝试它。
希望这有帮助。
答案 1 :(得分:7)
是否有MapBox的安卓库?
在Android上使用Mapbox的最佳方式是Mapbox Android SDK!它是官方代码库,一个支持矢量切片,地图动画和其他一系列的开源项目 - 它也可以很容易地从系统默认地图过渡到。
回复:
但它没有用,我想直接从网上加载MbTiles。
由于MBTiles文件是一组通常非常大的磁贴 - 并且无法单独请求 - 因此您通常不会直接加载它以显示地图。 SDK采用的方法是dynamic caching, as shown in this example。该示例使用Mapbox,但缓存机制是通用的,可以与任何磁贴服务器一起使用。
披露:我为Mapbox工作,偶尔会处理我们的本机代码的核心,包括Android SDK。
答案 2 :(得分:4)
您是否知道使用Google Maps API v2,您可以使用自己的磁贴提供程序?
答案 3 :(得分:4)
Mapbox团队已经开始在Android上发布Mapbox地图,因此我想推荐它,只是为了尝试。我认为很高兴知道他们已经听过Android开发人员的祈祷。
答案 4 :(得分:3)
OSMDroid是非常详细的文档,但是如果你看一下可实现的方法,它们设计它的方式使它非常灵活和自我解释。以下是截至2015年1月使用OSMDroid的Mapbox切片的方法。
mvMap = (MapView) rootView.findViewById(R.id.mapview);
String mapCode = "mapbox.streets";
final String accessToken = "myAccessToken";
OnlineTileSourceBase customTileSource = new XYTileSource("MapBoxSatelliteLabelled",
ResourceProxy.string.mapquest_aerial, 1, 19, 256, ".png", new String[]{
"http://a.tiles.mapbox.com/v4/" + mapCode + "/",
"http://b.tiles.mapbox.com/v4/" + mapCode + "/",
"http://c.tiles.mapbox.com/v4/" + mapCode + "/",
"http://d.tiles.mapbox.com/v4/" + mapCode + "/"}){
@Override
public String getTileURLString(MapTile aTile) {
String str = super.getTileURLString(aTile) + "?access_token=" + accessToken;
return str;
}
};
TileSourceFactory.addTileSource(customTileSource);
mvMap.setTileSource(customTileSource);
快速提示:如果您使用的是Android Studio,请使用断点来获取任何变量的值。这有助于调试和理解不熟悉的代码。这就是我弄清楚getTileURLString()返回磁贴的完整URL的方式。