主要介绍如何使用地图sdk完成地图展示,包括:地图展示、通过添加view展示地图、常用地图容器、supportmapfragment使用、多实例展示地图、地图类型及显示层级。
百度地图sdk为开发者提供了便捷的使用百度地图能力的接口,通过以下几步操作,即可在您的应用中使用百度地图:
1.在
<application><meta-dataandroid: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起部分权限的使用需要开发者在代码中动态申请。
mapview是view的一个子类,用于在android view中放置地图。mapview的使用方法与android提供的其他view一样。
<com.baidu.mapapi.map.mapviewandroid:id="@ id/bmapview"android:layout_width="match_parent"android:layout_height="match_parent"android:clickable="true"/>
注意:在sdk各功能组件使用之前都需要调用“sdkinitializer.initialize(getapplicationcontext())”,因此建议在应用创建时初始化sdk引用的context为全局变量。
新建一个自定义的application,在其oncreate方法中完成sdk的初始化。示例代码如下:
publicclassdemoapplicationextendsapplication{@overridepublicvoidoncreate(){super.oncreate();//在使用sdk各组件之前初始化context信息,传入applicationcontextsdkinitializer.initialize(this);//自4.3.0起,百度地图sdk所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.//包括bd09ll和gcj02两种坐标,默认是bd09ll坐标。sdkinitializer.setcoordtype(coordtype.bd09ll);}}
在androidmanifest.xml文件中声明该application
注意:在项目中使用地图的时候要特别注意合理地管理地图生命周期,这非常重要。
以下示例代码简述对地图生命周期的管理:
publicclassmainactivityextendsactivity{privatemapview mmapview =null;@overrideprotectedvoidoncreate(bundle savedinstancestate){super.oncreate(savedinstancestate);setcontentview(r.layout.activity_main);//获取地图控件引用mmapview =(mapview)findviewbyid(r.id.bmapview);}@overrideprotectedvoidonresume(){super.onresume();//在activity执行onresume时执行mmapview. onresume (),实现地图生命周期管理mmapview.onresume();}@overrideprotectedvoidonpause(){super.onpause();//在activity执行onpause时执行mmapview. onpause (),实现地图生命周期管理mmapview.onpause();}@overrideprotectedvoidondestroy(){super.ondestroy();//在activity执行ondestroy时执行mmapview.ondestroy(),实现地图生命周期管理mmapview.ondestroy();}}
百度地图sdk支持不用通过layout文件中添加mapview控件,直接在java代码中添加mapview的方式来展示地图,示例如下:
mapview mapview =newmapview(this);
setcontentview(mapview);
另外,在java代码中添加mapview的方式支持通过baidumapoptions对象根据需求构造包含特定地图状态类型和控件显示状态的mapview对象。示例如下:
baidumapoptions options =newbaidumapoptions();
//设置地图模式为卫星地图options.maptype(baidumap.map_type_satellite);
mapview mapview =newmapview(this, options);
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 |
下表为显示层级与比例尺的对应关系
显示层级 | 比例尺/米 |
---|---|
4 | 1000000 |
5 | 500000 |
6 | 200000 |
7 | 100000 |
8 | 50000 |
9 | 25000 |
10 | 20000 |
11 | 10000 |
12 | 5000 |
13 | 2000 |
14 | 1000 |
15 | 500 |
16 | 200 |
17 | 100 |
18 | 50 |
19 | 20 |
20 | 10 |
21 | 5 |
可以通过如下代码设置地图的缩放级别:
mapstatus.builder builder =newmapstatus.builder();builder.zoom(18.0f);mbaidumap.setmapstatus(mapstatusupdatefactory.newmapstatus(builder.build()));
地图sdk底层运用两种glsurfaceview和textureview两种opengl es组件构建地图。下面简要介绍。
此处示例代码简要介绍supportmapfragment使用。
@overrideprotectedvoidoncreate(@nullablebundle savedinstancestate){super.oncreate(savedinstancestate);setcontentview(r.layout.activity_fragment);manager =getsupportfragmentmanager();//获取到supportmapfragment实例msupportmapfragment =supportmapfragment.newinstance(mapoptions);//将fragment添加至activitymanager.begintransaction().add(r.id.map_container, mapfragment).commit();}
另外,您也可以使用replace的方法替换已有的fragment。
manager.begintransaction().replace(r.id.map_container, mapfragment).commit();
开发者可以在一个页面中建立多个地图对象,并且针对这些对象分别操作且不会产生相互干扰。 示例代码:在布局文件中添加多个supportmapfragment
<fragmentandroid: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"/><fragmentandroid: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中管理地图容器
@overrideprotectedvoidoncreate(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);}
效果如图:
上一篇
下一篇
本篇文章对您是否有帮助?