3

如何在 Android 上显示 MapBox 磁贴?我尝试将它与 OSMDroid 和 Nutteq 一起使用,但没有成功。是否有 MapBox 的 android 库?

例如,我使用此代码在 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。

4

5 回答 5

16

编辑

Mapbox Android SDK 正式发布。

另外,请参阅 Mapbox 的答案。

对于不赞成投票的人,我在 sdk 存在之前回答了这个问题。

==============================================

我认为Nutiteq看起来很有前途。他们的 API 有很多特性。此外,他们的演示项目是内联注释的。你可以看看这个项目。特别是,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);

您还可以查看我的玩具项目,该项目是从他们的演示中修改的。基本上,我的应用程序允许用户输入 mbtiles 文件的 url。然后,它下载文件并将其加载到 MapView。

如果您真的必须坚持使用 OSMDroid,可能会有所帮助。不过我还没有机会尝试。

希望这可以帮助。

于 2013-06-20T03:01:59.607 回答
7

是否有 MapBox 的 android 库?

在 Android 上使用 Mapbox 的最佳方式是Mapbox Android SDK!它是官方代码库,是一个支持矢量图块、地图动画和其他一些东西的开源项目——而且它的设计也很容易从系统默认地图过渡到。

关于:

但它不起作用,我想直接从网络加载 MbTiles。

由于 MBTiles 文件是一组通常非常大的图块 - 并且不能单独请求 - 您通常不会直接加载它来显示地图。SDK 采用的方法是动态缓存,如本例所示。该示例使用 Mapbox,但缓存机制是通用的,适用于任何瓦片服务器。

披露:我为 Mapbox 工作,偶尔会处理我们原生代码的核心,包括 Android SDK。

于 2016-05-17T20:32:27.520 回答
4

您知道通过Google Maps API v2,您可以使用自己的图块提供商吗?

请参阅TileProviderUrlTileProvider

于 2013-06-24T16:40:16.747 回答
4

Mapbox 团队已经开始在 Android 上发布 Mapbox 地图的 pre-alfa 版本,所以我想推荐它,只是为了尝试。我认为很高兴知道他们已经听到了 android 开发人员的祈祷。

Github 上的 Android 版 Mapbox

于 2014-02-11T21:22:16.327 回答
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 的方法。

于 2015-01-29T07:32:42.753 回答