Android开发&初识百度api(3.6.0)

从百度的Android地图SDK3.0以后,很多东西做了更改,现基于最新的3.6.0,简单阐述基本用法。
之前使用地图显示时,都需要从MapView中获取Control类,通过该类管理各个图层显示;现在使用地图则需要通过MapView的getView()方法,获取地图控制器BaiduMap对象,所有的操作都会基于BaiduMap进行。

在使用android开发地图时,一定要在活动布局加载之前初始化MapView。现在的ide都集成了显示的功能,可以把布局文件可视化,但
MapView在初始化之前是不能直观显示的,因此若是发现已下情况不用担心是xml文件代码出错。
这里写图片描述

private MapView mapView;
private BaiduMap baiduMap;
SDKInitializer.initialize(getApplicationContext());
//先将MapView初始化
setContentView(R.layout.activity_map);
//将活动的布局引入
mapView = (MapView) findViewById(R.id.mapView);
baiduMap=mapView.getMap();
//通过getMap()函数获取BaiduMap类
baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
//设置地图类型为一般,BaiduMap.MAP_TYPE_SATELLITE代表卫星地图

此时地图就已经可以正常显示了,如果操作无误,则应该显示如下界面:
这里写图片描述
为了直观,我直接生成apk在真机上测试了,此时地图上只有MapView的基本组件:比例尺,缩放,视图。
另外百度地图使用的经纬度和GPS直接得到的有写区别,需要转换。
当然该控件不需要设置就可以完成移动,点击放大等操作,接下来可以让地图定位到某一位置。(不设置的话地图开始的位置默认是天安门~)

LatLng point;
point = new LatLng(35.08,112.57);
CoordinateConverter converter  = new CoordinateConverter();
converter.from(CoordinateConverter.CoordType.GPS);
//sourceLatLng待转换坐标

converter.coord(point);
LatLng desLatLng = converter.convert();
// 将GPS设备采集的原始GPS坐标转换成百度坐标

baiduMap.setMyLocationEnabled(true);
//这一步很重要,设置地图可定位。
/*网上有人说想实现地图开始显示时在自己设定的经纬度,可以将这一步放在最后,我试了一下,放在最后的话地图无法显示。*/
MyLocationData data=new MyLocationData.Builder().accuracy(10).latitude(desLatLng.latitude).longitude(desLatLng.longitude).build();
//新建位置对象,设置精确度半径为10(单位m),设置经纬度。
BitmapDescriptor descriptor=BitmapDescriptorFactory.fromResource(R.drawable.icon_geo);
//该地点覆盖标记。
MyLocationConfiguration configuration=new MyLocationConfiguration(MyLocationConfiguration.LocationMode.NORMAL, true,descriptor);
/*地点的配置信息
public MyLocationConfiguration(MyLocationConfiguration.LocationMode mode,boolean enableDirection,BitmapDescriptor customMarker)构造函数
参数:
mode - 定位图层显示方式, 默认为 LocationMode.NORMAL 普通态
enableDirection - 是否允许显示方向信息
customMarker - 设置用户自定义定位图标,可以为 null
updateTimeEscap - 图层刷新频率,单位ms,若使用默认值,输入0即可,默认为100ms
*/
baiduMap.setMyLocationData(data);
baiduMap.setMyLocationConfigeration(configuration);
//此时该地点已经初始化,移动地图到该位置可以看到覆盖物等信息,然后告诉地图管理器当前位置已改变。
MapStatus mapStatus=new MapStatus.Builder().target(desLatLng).zoom(11).build();
baiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(mapStatus));
//这就相当于告诉view,地图状态发生变化,需要定位到deslatlng坐标。

如此一来,你打开地图的时候就可以直接定位到想要的位置了,还有,如果我们只是想在某个地方添加标记,但不想定位那么麻烦怎么办?这时就需要使用覆盖物:眼睛可以看到的控件文件图标等,基本都是覆盖物。

BitmapDescriptor bitmap = BitmapDescriptorFactory
        .fromResource(R.drawable.icon_gcoding);
OverlayOptions option = new MarkerOptions()
        .position(point)
        .icon(bitmap)
        .zIndex(BIND_AUTO_CREATE)
        .draggable(true)
        .alpha((float)0.4);
        /*alpha为 Marker 覆盖物图标的透明度,取值为[0,1],默认1.0,若超出范围则默认为1.0*/
baiduMap.addOverlay(option);
//在地图上添加Marker,并显示

如果想显示更多更全面的内容,只要添加覆盖物就可以了,覆盖物index代表覆盖物不同层次。

最后一步,重写活动各个阶段的方法,设置MapView的状态。

mapView.onPause();
mapView.onResume();
mapView.onDestroy();

mBaiduMap.setMyLocationEnabled(false);
//关闭定位图层

这里写图片描述

(网络较差)左面图标为覆盖物,右边图标显示定位图层。图标可以自己设计。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值