Android开发,MapBox的使用及部分功能实现(一)----- 初始化、标记、定位、styleurl

本文介绍了MapBox在Android开发中的使用,包括如何申请accessToken、初始化MapView、异步加载地图,以及详细讲解了如何设置地图位置、自定义Marker、地图定位和风格URL。适合刚开始接触MapBox的开发者参考。

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

近期,应公司要求,开始接触MapBox For Android的开发。
经过初步的接触,发现MapBox与我之前使用的Arcgis有很多不同,相比起来,MapBox更清洁,更轻便,也更容易使用,但是相对的,MapBox相对于Arcgis缺少了很多的功能实现,许多的东西都需要自己去进行处理才能实现。
下面是我一步步接触并使用MapBox的记录,可能会比较乱。我这里提供了目录的功能,请不要使用csdn的极客模式,不然看不到目录的,另外,由于是一步步的写下来了,可能前期的看法或者结论,到了后期就不一样了,我会定期修改,但是可能会存在漏网的,欢迎指出。
首先是接入,相比于Arcgis又需要导入包文件,又需要导入lib,又需要设置jcenter,打包下来,直接就几十兆的Apk,一编译就是一分钟。
MapBox只需要导入一下代码即可


compile('com.mapbox.mapboxsdk:mapbox-android-sdk:5.0.2@aar') {
        transitive = true
    }


哦,对了,还有mavencentral,一般来说,应该都设置了的


allprojects {
    repositories {
        jcenter()
        mavenCentral()
    }
}

一般来说,下载一段时间后,就可以了,如果不可以,就试着翻墙,设置代理什么的,这里不细说了。

MapBox和Arcgis相同,在Xml中添加一个MapView就可以了


<com.mapbox.mapboxsdk.maps.MapView
        android:id="@+id/mapView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

如果是从网上,或者demo上学习的朋友,可能会遇到一个问题
就是在xml上无法设置初始坐标,zoom等参数,只能强行写出来,我估计是该控件item的问题。为了更好的学习,我将这些功能都放到了代码中来实现。

申请accessToken

就和arcgis的key类似,就是一个使用凭证,就不多说了,可以去官方网站申请

进行初始化

申请完毕后,在Activity的onCreate()中添加如下代码,进行初始化


@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //设置accessToken
        Mapbox.getInstance(this, getString(R.string.accessToken));
 setContentView(R.layout.activity_simple_map); }

敲黑板,这里的初始化代码一定要放到setContentView之前,否则无法使用。

初始化Mapview


mapView = (MapView) findViewById(R.id.mapView);
        mapView.setStyleUrl("mapbox://styles/mapbox/streets-v9");
        mapView.onCreate(savedInstanceState);

注意,其中的setStyleUrl,就是设置地图样式,可以采用默认样式,Light,Dark等,也可以使用网络地址,事实上默认的Style.LIGHT也是一个地址

还有下面的


mapView.onCreate(savedInstanceState);

需要在初始化的时候设置,同时,除了onCreate,还包括以下


// Add the mapView lifecycle to the activity's lifecycle methods
    @Override
    public void onResume() {
        super.onResume();
        mapView.onResume();
    }


    @Override
    protected void onStart() {
        super.onStart();
        mapView.onStart();
    }


    @Override
    protected void onStop() {
        super.onStop();
        mapView.onStop();
    }


    @Override
    public void onPause() {
        super.onPause();
        mapView.onPause();
    }


    @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);
    }


都要进行设置,建议封装到baseactvity中


异步加载地图

mapView.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(MapboxMap mapboxMap) {
                
            }
        });

该方法即是对地图进行加载,加载成功后,会返回MapboxMap对象,只有有了这个对象,我们才可能对地图进行各种操作,和Arcgis不同,arcgis的大部分操作,都是在mapview上进行操作的,但是MapBox的mapview并没有太多的功能元素,像地图定点、polygon、marker等操作,都得对mapboxmap进行操作,我估计很多朋友都会和我一样,想进行初始化时中心点设置的时候,尝试了centerAt、location、setCenter、setPosition、moveTo、moveCamere。。等等一系列的姿势去设置,都失败了。

更多操作

从上一步开始,地图已经可以跑起来了,下面就是一些进一步的使用,一下排序不分先后,纯粹是我做到哪,写到哪,不过我提供了目录,需要的朋友可以直接在目录中进行搜索,如果是和我一样才开始学习的,可以跟着我的代码一直敲就可以了。

将地图移动到某一点

这个方法有很多


LatLng latLng = new LatLng(29.735281, 106.99155);
mapboxMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));

最简单的地图定点,是的,没错,这就centerAt的功能

首先我来看前面的方法moveCamera;这个方法就是简单将地图中心定到某个位置,更多的还有

注意,这个LatLng不仅仅可以传入坐标,还可以传入location的


mapboxMap.animateCamera(CameraUpdateFactory.newLatLng(latLng),2000);//动画移动,花费两秒时间,动态的移动到该位置,时间可以不写
mapboxMap.easeCamera(CameraUpdateFactory.newLatLng(latLng),2000);//讲真,我也没发现和其他的有什么区别

然后是后面的参数

后面可以有四种形式





很显然,一个必填,三个可填。
主要呢是必填项CamerUpdate类型的参数,CameraUpdate呢,其实可以当做一个数据处理命令集来使用,即先将要move到的位置的各种参数设置完成,封装好后,再来进行处理。
CameraUpdate的构造需要用到CamaeraUpdateFactory(目前就我了解的话)
CamaeraUpdateFactory专门是用来构建CameraUpdate的,是他的工厂类,我们来看看他的new方法(zoomby,scrollby我没用过。。)
①.newLatLng 根据简单的坐标点来进行构造

这里只需要传入一个坐标参数即可,LatLng,用过Arcgis等地图的都知道,这就是一个坐标,可以用new LatLng(double latitude,double longitude)来进行构造,同下,我们统一用animateCamera来进行举例。


mapboxMap.animateCamera(CameraUpdateFactory.newLatLng(latLng),2000);

②.newCameraPosition 根据CameraPosition来进行构造

这里需要传入的是一个CameraPosition的对象,初始化


CameraPosition cameraPosition = new CameraPosition.Builder()         
			.target(new LatLng(latLng.getLatitude(), latLng.getLongitude()))
                        .zoom(17)//放大尺度 从0开始,0即最大比例尺,最大未知,17左右即为街道层级
                        .bearing(180)//地图旋转,但并不是每次点击都旋转180度,而是相对于正方向180度,即如果已经为相对正方向180度了,就不会进行旋转
                        .tilt(30)//地图倾斜角度,同上,相对于初始状态(平面)成30度
                        .build();//创建CameraPosition对象

敲黑板了,注意其中的参数,这几个参数在很多地方都有用到。


mapboxMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition), 2000);


使用就很简单了,大同小异。

③.newLatLngBounds 根据一个坐标坐标边界进行移动,这个有两种方法,除了必传的LatLngBounds,都一样,不一样的就是padding,一种是统一padding,一种是四个方向,这个我就不细细说了,我只说统一padding



                
<think>好的,用户想了解Mapbox的定义和用途,特别是用于地图开发的技术介绍。首先,我需要从提供的三个引用中提取关键信息。引用[1]提到Mapbox个提供地图、导航和位置数据服务的平台,强调其自定义能力和高质量渲染。引用[2]和[3]补充了具体的技术应用,比如Android开发中的使用,以及TileMill和Mapbox Studio工具。 用户可能需要知道Mapbox的核心功能和优势,以及它在实际开发中的应用场景。应该分点说明,结构清晰。同时,根据系统级指令,要正确使用LaTeX格式,但当前问题不涉及数学公式,所以可能不需要。但要注意生成相关问题,可能需要结合技术细节和应用场景提问。 需要确认引用标注是否正确,比如引用[1]、[2]、[3]是否对应正确的内容。比如引用[3]提到了Mapbox Studio,这在回答中应该提到。同时,用户可能需要了解如何开始使用Mapbox,比如SDK和API的接入方式,这部分引用[2]提到了Android开发中的初始化标记功能。 需要确保回答真实可靠,引用来源的信息准确。例如,Mapbox成立于2010年,支持多平台,这些信息来自引用[3]。而TileMill作为制图工具,在引用[2]中有说明。需要将这些信息整合,用简洁的中文表达出来,并自然地添加引用标识。 最后生成的相关问题要围绕Mapbox的技术特点、使用方法和优化方向,比如与其他地图服务的对比、核心技术的组成、数据源、性能优化等。这样能帮助用户进步探索Mapbox的相关知识。</think>### Mapbox的定义与用途解析 **Mapbox** 是由美国Mapbox公司于2010年推出的地图服务平台,专注于为开发者提供高度定制化的地图、导航和位置数据服务[^3]。其核心价值在于通过开源技术和云端工具链,帮助用户构建个性化的地理信息解决方案。 #### 核心功能与技术特点 1. **多平台支持** - 提供跨平台SDK,支持Web(JavaScript)、移动端(Android/iOS)及桌面应用开发实现地图功能的无缝集成[^2]。 - 示例代码(Web地图初始化): ```javascript mapboxgl.accessToken = 'YOUR_ACCESS_TOKEN'; const map = new mapboxgl.Map({ container: 'map', style: 'mapbox://styles/mapbox/streets-v11', center: [-74.5, 40], zoom: 9 }); ``` 2. **定制化地图设计** - 通过**Mapbox Studio**在线编辑器,开发者可自定义地图样式(如颜色、标注、图层),生成专属`styleURL`供应用调用[^3]。 - 支持矢量切片技术(Vector Tiles),提升地图渲染效率并降低数据传输成本[^1]。 3. **地理数据服务** - 集成实时交通、路径规划、地理编码等API,支持动态路线优化和位置搜索功能- 提供卫星影像、3D地形等数据层,满足复杂场景需求。 4. **开源生态** - 基于开源项目(如OpenStreetMap)构建数据基础,并通过**TileMill**工具实现地图样式设计与发布[^2]。 #### 典型应用场景 - 物流行业的实时路径规划 - 社交应用的动态位置标注 - 数据可视化中的热力图/轨迹图叠加 - AR导航中的高精度定位支持
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值