android地图sdk | 百度地图api sdk-凯发k8官方旗舰厅

浏览器版本低!无法浏览完整内容,建议升级或更换浏览器。
显示地图
下载开发文档

主要介绍如何使用地图sdk完成地图展示,包括:地图展示、通过添加view展示地图、常用地图容器、supportmapfragment使用、多实例展示地图、地图类型及显示层级。

hello baidumap

百度地图sdk为开发者提供了便捷的使用百度地图能力的接口,通过以下几步操作,即可在您的应用中使用百度地图:

1. 第一步 配置androidmanifest.xml文件

1.在中加入如下代码配置开发密钥(ak),或者通过sdkinitializer.setapikey("ak")动态设置ak

<application>
<meta-data
android:name="com.baidu.lbsapi.api_key"
android:value="开发者 key"/>
</application>

若您还不曾申请开发密钥,点此申请
2. 在外部添加如下权限声明:

<uses-permissionandroid:name="android.permission.internet"/>
<uses-permissionandroid:name="android.permission.access_network_state"/>
<uses-permissionandroid:name="android.permission.read_external_storage"/>
<uses-permissionandroid:name="android.permission.write_external_storage"/>

注:自android6.0起部分权限的使用需要开发者在代码中动态申请。

2. 第二步 在布局文件中添加地图容器

mapview是view的一个子类,用于在android view中放置地图。mapview的使用方法与android提供的其他view一样。

<com.baidu.mapapi.map.mapview
android:id="@ id/bmapview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"/>
3. 第三步 地图初始化

注意:在sdk各功能组件使用之前都需要调用“sdkinitializer.initialize(getapplicationcontext())”,因此建议在应用创建时初始化sdk引用的context为全局变量。
新建一个自定义的application,在其oncreate方法中完成sdk的初始化。示例代码如下:

publicclassdemoapplicationextendsapplication{
@override
publicvoidoncreate(){
super.oncreate();
//在使用sdk各组件之前初始化context信息,传入applicationcontext
sdkinitializer.initialize(this);
//自4.3.0起,百度地图sdk所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.
//包括bd09ll和gcj02两种坐标,默认是bd09ll坐标。
sdkinitializer.setcoordtype(coordtype.bd09ll);
}
}

在androidmanifest.xml文件中声明该application

4. 创建地图activity,管理mapview生命周期

注意:在项目中使用地图的时候要特别注意合理地管理地图生命周期,这非常重要。
以下示例代码简述对地图生命周期的管理:

publicclassmainactivityextendsactivity{
privatemapview mmapview =null;
@override
protectedvoidoncreate(bundle savedinstancestate){
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_main);
//获取地图控件引用
mmapview =(mapview)findviewbyid(r.id.bmapview);
}
@override
protectedvoidonresume(){
super.onresume();
//在activity执行onresume时执行mmapview. onresume (),实现地图生命周期管理
mmapview.onresume();
}
@override
protectedvoidonpause(){
super.onpause();
//在activity执行onpause时执行mmapview. onpause (),实现地图生命周期管理
mmapview.onpause();
}
@override
protectedvoidondestroy(){
super.ondestroy();
//在activity执行ondestroy时执行mmapview.ondestroy(),实现地图生命周期管理
mmapview.ondestroy();
}
}
5. 完成以上工作即可在您的应用中显示地图
通过添加view显示地图

百度地图sdk支持不用通过layout文件中添加mapview控件,直接在java代码中添加mapview的方式来展示地图,示例如下:

1. 创建mapview对象
mapview mapview =newmapview(this);
2. 添加mapview对象
setcontentview(mapview);

另外,在java代码中添加mapview的方式支持通过baidumapoptions对象根据需求构造包含特定地图状态类型和控件显示状态的mapview对象。示例如下:

1. 定义baidumapoptions对象
baidumapoptions options =newbaidumapoptions()
2. 设置需要的状态
//设置地图模式为卫星地图
options.maptype(baidumap.map_type_satellite);
3. 创建mapview对象
mapview mapview =newmapview(this, options);
4. 添加mapview对象
setcontentview(mapview);

设置空白地图背景色

注:只有地图类型设置为空白地图时,地图背景色才会设置生效
// 设置空白地图
mbaidumap.setmaptype(baidumap.map_type_none);
mbaidumap.setmapbackgroundcolor(color.argb(255,255,0,0));
// 设置地图背景色

baidumapoptions类支持设置的状态如下:

状态含义
mapstatus地图状态
compassenable是否开启指南针,默认开启
maptype地图模式,默认为普通地图
rotategesturesenabled是否允许地图旋转手势,默认允许
scrollgesturesenabled是否允许拖拽手势,默认允许
overlookinggesturesenabled是否允许俯视图手势,默认允许
zoomcontrolsenabled是否显示缩放按钮控件,默认允许
zoomcontrolsposition设置缩放控件位置
zoomgesturesenabled是否允许缩放手势,默认允许
scalecontrolenabled是否显示比例尺控件,默认显示
scalecontrolposition设置比例尺控件位置
logoposition设置logo位置
地图类型及显示层级

百度地图sdk支持22级的地图显示,如下为地图类型和图层支持层级说明

地图类型或图层显示层级
2d地图4-21
3d地图19-21
卫星图4-20
路况交通图11-21
百度城市热力图11-21
室内图17-22

下表为显示层级与比例尺的对应关系

显示层级比例尺/米
41000000
5500000
6200000
7100000
850000
925000
1020000
1110000
125000
132000
141000
15500
16200
17100
1850
1920
2010
215
注意:检查室内图当前状态,自v5.0.0起,将地图缩放等级由3-21调整为4-21,优化南北极地区展示效果(当开启室内图时,最大缩放等级增大至22级),请开发者注意。

可以通过如下代码设置地图的缩放级别:

mapstatus.builder builder =newmapstatus.builder();
builder.zoom(18.0f);
mbaidumap.setmapstatus(mapstatusupdatefactory.newmapstatus(builder.build()));
常用地图容器

地图sdk底层运用两种glsurfaceview和textureview两种opengl es组件构建地图。下面简要介绍。

glsurfaceview
包括mapview,mapfragment和supportmapfragment三种容器。mapfragment和supportmapfragment用于在android fragment中放置地图。适合需要使用fragment的开发场景,方便您实现灵活的布局。mapfragment和supportmapfragment分别是android.app.fragment和android.support.v4.app,fragment的子类,mapfragment需要在android3.0以上的版本中使用。
textureview
包括texuremapview,texturemapfragment和texturesupportmapfragment三种容器。使用场景:您将mapview与其他的glsurfaceview(比如相机)叠加展示,或者是在scrollview中加载地图时,建议使用texturemapview及supporttexturemapfragment来展示地图,可以有效解决 glsurfaceview 叠加时出现的穿透、滚动黑屏等问题。如果使用texturemapview请确保:android 4.4以上系统,在androidmanifest.xml中配置硬件加速选项。
supportmapfragment

此处示例代码简要介绍supportmapfragment使用。

@override
protectedvoidoncreate(@nullablebundle savedinstancestate){
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_fragment);
manager =getsupportfragmentmanager();
//获取到supportmapfragment实例
msupportmapfragment =supportmapfragment.newinstance(mapoptions);
//将fragment添加至activity
manager.begintransaction().add(r.id.map_container, mapfragment).commit();
}

另外,您也可以使用replace的方法替换已有的fragment。

manager.begintransaction().replace(r.id.map_container, mapfragment).commit();
多实例显示地图

开发者可以在一个页面中建立多个地图对象,并且针对这些对象分别操作且不会产生相互干扰。 示例代码:在布局文件中添加多个supportmapfragment

<fragment
android:id="@ id/map1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_margin="5dp"
android:layout_weight="1"
class="com.baidu.mapapi.map.supportmapfragment"/>
<fragment
android:id="@ id/map2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_margin="5dp"
android:layout_weight="1"
class="com.baidu.mapapi.map.supportmapfragment"/>

在activity中管理地图容器

@override
protectedvoidoncreate(bundle savedinstancestate){
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_multi_map_demo);
latlnggeo_beijing=newlatlng(39.945,116.404);
latlnggeo_shanghai=newlatlng(31.227,121.481);
//北京为地图中心,logo在左上角
mapstatusupdate status1 =mapstatusupdatefactory.newlatlng(geo_beijing);
supportmapfragment map1 =(supportmapfragment)(getsupportfragmentmanager()
.findfragmentbyid(r.id.map1));
map1.getbaidumap().setmapstatus(status1);
map1.getmapview().setlogoposition(logoposition.logopostionlefttop);
//上海为地图中心
mapstatusupdate status2 =mapstatusupdatefactory.newlatlng(geo_shanghai);
supportmapfragment map2 =(supportmapfragment)(getsupportfragmentmanager()
.findfragmentbyid(r.id.map2));
map2.getbaidumap().setmapstatus(status2);
}

效果如图:

上一篇

开发注意事项

下一篇

切换地图类型

本篇文章对您是否有帮助?

网站地图