您的位置:首页 > 移动开发 > Android开发

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

2015-11-06 09:57 555 查看
从百度的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);
//关闭定位图层




(网络较差)左面图标为覆盖物,右边图标显示定位图层。图标可以自己设计。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: