Android地图—— Mapbox 10.3.0 接入与基础使用
Mapbox初始配置:依赖添加
官网教程指引: https://docs.mapbox.com/android/maps/guides/install/
我使用的android studio版本是旧版,依赖添加方式如下:
1. 编辑 项目目录/build.gradle (设置maven库的访问);
Android Studio less than Arctic Fox (2020.3.1) and Gradle less than v6.0:
注意,是在 allprojects 内设置!
buildscript {
...
}
allprojects {
repositories {
google()
mavenCentral()
maven {
url 'https://api.mapbox.com/downloads/v2/releases/maven'
authentication {
basic(BasicAuthentication)
}
credentials {
username = "mapbox"
// Use the secret token you stored in gradle.properties as the password
password = project.properties['MAPBOX_DOWNLOADS_TOKEN']
}
}
}
}
2. 前往mapbox官网 创建账号 并 申请密钥;
Token申请地址: https://account.mapbox.com/
申请token时记得勾选 Downloads:Read 以获取从maven库下载mapbox依赖文件的许可。
创建完成之后在Token页面会有两个Token:
其中一个为初始就有的公钥;一个为你刚刚申请好的带有Downloads:Read权限的私钥。
(注意:私钥申请完成后要直接复制保存,刷新页面后会被隐藏)。
3. 在项目中配置公钥、私钥;
在 项目目录下的 gradle.properites 中添加以下代码,用于从maven库下载mapbox相关依赖的身份验证。
MAPBOX_DOWNLOADS_TOKEN=自己申请的私钥
在 res/valuses/strings.xml 文件中添加以下代码。mapbox默认你 将token放置在 strings.xml 中,在调用相关api时会 自动 在此文件夹下面获取token。
<string name="mapbox_access_token">公钥</string>
4. 在 模块目录 /build.gradle 中添加依赖;
// mapbox地图组件
implementation 'com.mapbox.maps:android:10.3.0'
5. 配置获取用户定位权限;(可选)
在 AndroidManifest.xml 文件中添加以下代码*(当你需要在地图上显示用户位置时才需要配置)*
注意: 还需要在代码中动态请求该权限,Mapbox也提供了PermissionsManager(可参考官网示例)工具用于动态请求权限,这里不展开)
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
可能遇到的问题:
① sync gradle文件时报warnning:
问题: Failed to resolve: com.mapbox.maps:android:10.0.3
解决: 检查自己申请的token是否带有 Downloads:Read,在创建token时记得勾选上,系统默认提供的token是不带这个scope的,需要自行申请。
————————————————————————————————————————————
MapBox部分功能的Android实现:
这部分对MapBox的主要用例的Android实现和原理进行相关解释(示例版本10.3.0)。
由于官网有kotlin代码的例子,以下功能展示均使用 java代码 进行举例。
以下介绍的功能代码我都封装到了MapBoxUtil.java文件中,可以在这个项目里面自行获取。(结合这个示例项目的代码阅读更佳哦)
效果图先行:
· 地图MapView的添加
layout文件中添加MapView视图:
<com.mapbox.maps.MapView
android:id="@+id/mapview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
Java文件:
MapView mMapView = findViewById(R.id.mapview);
MapboxMap mMapboxMap = mapView.getMapboxMap();
· MapBox初始化以及地图显示:
1. 相机设置:
相机部分参数初始变量定义:
private static final double DEFAULT_LOCATION_LATITUDE = 22.55; // 初始地图显示坐标(深圳)
private static final double DEFAULT_LOCATION_LONGITUDE = 114.06;
private static final double DEFAULT_ZOOM_VALUE = 8.0; // 初始地图缩放大小
相机设置:
mMapboxMap.setCamera( // 设置地图相机初始位置
new CameraOptions.Builder()