MapBox 的简单使用

本文详细介绍如何在Android应用中集成MapBox地图并实现定位功能。从注册账号获取token开始,逐步指导如何配置Android Studio,导入SDK,设置权限,以及在布局文件中调用MapView。同时,提供了代码示例,展示如何实现OnMapReadyCallback和PermissionsListener接口,设置地图样式,初始化展示级别,以及启用定位组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近接触了美国地图 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);
    }

}

如果文章对你有用,请点个赞!

 

### Mapbox 使用教程与示例代码 #### 什么是 MapboxMapbox 是一套强大的地理空间开发工具集,广泛应用于地图可视化、数据分析以及位置服务等领域。它提供了丰富的 API 和 SDK 支持,能够帮助开发者快速构建交互式地图应用。 --- #### Mapbox 的主要组件 以下是 Mapbox 生态系统的几个重要组成部分: 1. **Mapbox GL JS**: 这是一个轻量级的地图渲染库,支持矢量瓦片和 WebGL 渲染技术[^2]。 2. **Mapbox Studio**: 提供了一个可视化的界面来设计自定义地图样式。 3. **React Map GL**: 集成了 React 框架的 Mapbox 地图组件库,适合前端开发使用。 --- #### 如何开始使用 Mapbox? ##### 步骤说明(隐含) 为了更好地理解如何使用 Mapbox,可以参考以下资源: 1. **官方文档** 官方文档是学习 Mapbox 的最佳起点,涵盖了从基础到高级的各种主题[^1]。 2. **Vue + Mapbox GL 示例教程** 如果您正在寻找 Vue.js 结合 Mapbox GL 的解决方案,则可以通过已有的超过 100 个示例教程获取灵感。 3. **React Map GL 整合** 对于 React 开发者来说,`react-map-gl` 库简化了许多复杂操作,使得集成更加便捷。 --- #### 数据源 (Sources) 类型介绍 Mapbox 中的数据源分为六种基本类型,每一种都有其特定用途。下面列举其中的一种作为例子——视频数据源 (`video`)。 ```json { "sources": { "video-source": { "type": "video", "urls": [ "https://static-assets.mapbox.com/mapbox-gl-js/dajianshi.mp4", "https://static-assets.mapbox.com/mapbox-gl-js/dajianshi.webm" ], "coordinates": [ [-80.425, 46.437], [-61.516, 46.437], [-61.516, 39.936], [-80.425, 39.936] ] } } } ``` 上述 JSON 片段展示了如何配置一个 `video` 数据源,并指定了两个不同格式的视频文件路径以提高兼容性[^3]。 --- #### 图层 (Layers) 渲染类型概述 在 Mapbox 中,图层决定了数据将以何种形式呈现给用户。共有九种常见的渲染方式,这里选取两种进行展示: 1. **Fill Layer** (填充区域) 适用于绘制多边形并为其内部着色的情况。 ```javascript map.addLayer({ 'id': 'fill-layer', 'type': 'fill', 'source': 'example-source', // 替换为您自己的 source ID 'paint': { 'fill-color': '#ff0000' // 设置颜色为红色 } }); ``` 2. **Symbol Layer** (图标/文字标注) 可用来放置标记或者添加文本标签。 ```javascript map.addLayer({ 'id': 'symbol-layer', 'type': 'symbol', 'source': 'example-source', // 替换为您自己的 source ID 'layout': { 'text-field': ['get', 'name'], // 动态绑定字段名 'icon-image': 'marker-15' } }); ``` 更多关于其他七种类型的详细描述可参阅专门的文章[^4]。 --- #### 总结 通过以上内容可以看出,无论是简单的静态地图还是复杂的动态效果,Mapbox 都能提供全面的支持。借助其灵活的设计理念和技术架构,即使是初学者也能迅速上手制作属于自己的作品。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值