最近接触了美国地图 MapBox ,觉得这个地图功能挺多、而且很详细,就学习了一下,在这里简单讲解一下基本地图、定位使用:
一、首先登陆官方网站 https://account.mapbox.com/ 注册账号,这里需要注意一点,和国内地图不同,MapBox不需要注册秘钥,当你注册账号成功,网站会自动给你一个默认 token,这个token就是使用地图的秘钥(token可以自己创建),然后选择地图 SDK 类型(建议英语差的小伙伴选择谷歌浏览器一键翻译)。:
二、对 Android Studio 进行配置,导入SDK,并配置权限;
1、在 build.gradle 里面:
repositories {
mavenCentral()
}
dependencies {
implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:7.1.2'
}
2、在 AndroidManifest.xml 添加权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
三、简单使用
1、布局里面调用 MapView:
<com.mapbox.mapboxsdk.maps.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
2、代码中调用,首先实现 OnMapReadyCallback,PermissionsListener 两个接口,并定义地图实例、设置地图初始展示级别,设置权限申请。
public class ShowUserAdressActivity extends AppCompatActivity implements OnMapReadyCallback,PermissionsListener {
private PermissionsManager manager;
private MapboxMap map;
private MapView mapView;
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_user_adress);
mapView = findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(this);
}
@Override
public void onMapReady(@NonNull MapboxMap mapboxMap) {
map = mapboxMap;
// 设置地图 Style 样式
map.setStyle(Style.SATELLITE,
new Style.OnStyleLoaded() {
@Override
public void onStyleLoaded(@NonNull Style style) {
enableLocation(style);
}
});
// 初始化地图展示级别
map.animateCamera(CameraUpdateFactory.zoomBy(13));
}
@Override
public void onExplanationNeeded(List<String> permissionsToExplain) {
Toast.makeText(this,"请打开权限",Toast.LENGTH_SHORT).show();
}
@Override
public void onPermissionResult(boolean granted) {
if (granted){
map.getStyle(new Style.OnStyleLoaded() {
@Override
public void onStyleLoaded(@NonNull Style style) {
enableLocation(style);
}
});
}else {
Toast.makeText(this,"未授予权限",Toast.LENGTH_SHORT).show();
finish();
}
}
// 获取定位组件详情
@SuppressLint("MissingPermission")
private void enableLocation(Style style){
if (PermissionsManager.areLocationPermissionsGranted(this)){
LocationComponent component = map.getLocationComponent();
component.activateLocationComponent(this,style);
// 打开定位
component.setLocationComponentEnabled(true);
// 设置相机模式
component.setCameraMode(CameraMode.TRACKING);
// 设置渲染模式
component.setRenderMode(RenderMode.NORMAL);
}else {
manager = new PermissionsManager(this);
manager.requestLocationPermissions(this);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
manager.onRequestPermissionsResult(requestCode,permissions,grantResults);
}
@Override
protected void onStart() {
super.onStart();
mapView.onStart();
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onStop() {
super.onStop();
mapView.onStop();
}
@Override
public void onLowMemory() {
super.onLowMemory();
mapView.onLowMemory();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
}
如果文章对你有用,请点个赞!