Android使用MapBox瓦片作为osmdroid TileSource的相关问题咨询
嘿,作为刚入坑OSMDroid的新手,我太懂你找MapBox Map ID的迷茫了!我来一步步帮你捋清楚,搞定用MapBox Streets瓦片的需求~
一、找到/获取MapBox Map ID
其实官方预设的mapbox.mapbox-streets-v8本身就有对应的Map ID,不用自己从零创建,步骤如下:
- 登录你的MapBox账号后,进入MapBox Studio(官网里的地图编辑器入口)
- 在左侧导航栏选「Styles」,然后在预设样式里找到「Mapbox Streets v8」(或者直接搜索)
- 点击进入这个样式的详情页,在页面右上角(或者「Settings」标签页里)就能看到它的Map ID,格式是
mapbox/streets-v8——这就是你要的MAPBOX_MAPID啦 - 要是你之后想自定义地图样式,直接点「New style」选模板创建,完成后同样在样式详情页能拿到专属的Map ID
二、在OSMDroid中配置MapBox瓦片源
OSMDroid的默认TileSourceFactory里没有内置MapBox的选项,所以我们要自己构建TileSource,代码很简单:
首先定义你的MapBox凭证:
// 替换成你在MapBox官网拿到的Access Token private static final String MAPBOX_ACCESS_TOKEN = "your-access-token-here"; // 官方MapBox Streets v8的Map ID private static final String MAPBOX_MAP_ID = "mapbox/streets-v8";
然后构建并设置瓦片源:
// 拼接MapBox的瓦片请求URL模板 String tileUrlTemplate = "https://api.mapbox.com/styles/v1/" + MAPBOX_MAP_ID + "/tiles/{z}/{x}/{y}?access_token=" + MAPBOX_ACCESS_TOKEN; // 创建自定义的TileSource ITileSource mapBoxStreetsTile = new XYTileSource( "MapBoxStreets", // 瓦片源名称,自定义就行 0, // 最小缩放级别 22, // 最大缩放级别,MapBox支持到22级 256, // 瓦片尺寸,默认256x256 ".png", // 瓦片格式 new String[]{tileUrlTemplate} ); // 把这个瓦片源设置给你的MapView mapView.setTileSource(mapBoxStreetsTile); // 你之前的其他配置可以保留 mapView.setTilesScaledToDpi(true); mapView.setMultiTouchControls(true); mapView.setVisibility(View.VISIBLE);
三、别忘了加必要权限
在AndroidManifest.xml里一定要加上网络权限,不然地图加载不出来:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
小提醒:上面的代码用的是MapBox的栅格瓦片服务,如果你之后想尝试矢量瓦片,需要额外引入osmdroid的矢量瓦片扩展库,但作为新手,先从栅格瓦片入手会更简单~
内容的提问来源于stack exchange,提问作者Cyrus the Great
相关产品推荐
相关产品推荐

