百度地图

来源:互联网 发布:sql注入攻击工具下载 编辑:程序博客网 时间:2024/06/05 06:24
    很多应用都有获取自己位置的功能,比如QQ,微信等等都能获取到自己的位置
 一、核心类简介
    1.SDKInitializer:初始化SDK配置
    2.MapView:地图数据显示
    3.BaiduMap:控制地图状态
 二、原理
    Ⅰ.前期准备
      jar包、库文件引入,key值获取
    Ⅱ.地图显示
private BaiduMap baiduMap;private MapView mapView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);initSDK();setContentView(R.layout.common);init();}private void init() {// BaiduMap 管理具体的某一个MapView 操作:旋转、缩放、移动mapView = (MapView) findViewById(R.id.mapview);// mapView.showScaleControl(false);// 设置比例尺是否显示 默认是true// mapView.showZoomControls(false);// 设置缩放按钮是否显示 默认是truebaiduMap = mapView.getMap();// 改变当前地图的状态MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.zoomTo(15);// 设置缩放到15级,默认是12级baiduMap.setMapStatus(mapStatusUpdate);// 设置中心点 默认是天安门MapStatusUpdate mapStatusUpdatePoint = MapStatusUpdateFactory.newLatLng(null);baiduMap.setMapStatus(mapStatusUpdatePoint);}private void initSDK() {// 初始化地图引擎 校验KEYSDKInitializer.initialize(getApplicationContext());// 必须传递全局Context//创建广播,返回地图打开状态IntentFilter filter = new IntentFilter();filter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);filter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);registerReceiver(new SDKBroadCast(), filter);}class SDKBroadCast extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {String result = intent.getAction();// 网络错误广播if (result.equals(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR)) {Toast.makeText(getApplicationContext(), "无网络", Toast.LENGTH_SHORT).show();}// KEY 校验失败else if (result.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR)) {Toast.makeText(getApplicationContext(), "校验失败", Toast.LENGTH_SHORT).show();}}}/** * MapView的生命周期与activity一致 */@Overrideprotected void onResume() {mapView.onResume();super.onResume();}/** * MapView的生命周期与activity一致 */@Overrideprotected void onPause() {mapView.onPause();super.onPause();}/** * MapView的生命周期与activity一致 */@Overrideprotected void onDestroy() {mapView.onDestroy();super.onDestroy();}

     1.首先初始化地图引擎和校验key值;并且注册一个广播接收者,接收校验结果和网络情况等
     2.生成MapView(本质是百度提供的一个布局文件),通过findViewById返回即可
     3.通过mapView得到地图状态控制器BaiduMap
     4.通过MapStatusUpdate设置地图的状态
     5.把设置的状态传递给baiduMap.setMapStatus()显示出地图
     注意:
SDKInitializer校验一定要尽早,否则会出现校验信息还没返回就请求数据的情况
MapView的声明周期要和activity一样,否则会有异常抛出
     Ⅲ.设置我的位置
private void locate() {LocationClient mLocationClient = new LocationClient(getApplicationContext());mLocationClient.registerLocationListener(new MyLocationListener());LocationClientOption option = new LocationClientOption();option.setLocationMode(LocationMode.Hight_Accuracy);// 设置定位模式option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02option.setScanSpan(5000);// 设置发起定位请求的间隔时间为5000msoption.setIsNeedAddress(true);// 返回的定位结果包含地址信息option.setNeedDeviceDirect(true);// 返回的定位结果包含手机机头的方向mLocationClient.setLocOption(option);baiduMap.setMyLocationEnabled(true);// 打开定位图层//设置我的位置图标icon = BitmapDescriptorFactory.fromResource(R.drawable.icon_geo);MyLocationConfiguration config = new MyLocationConfiguration(MyLocationConfiguration.LocationMode.NORMAL, true, icon);baiduMap.setMyLocationConfigeration(config);}class MyLocationListener implements BDLocationListener {@Overridepublic void onReceiveLocation(BDLocation result) {//得到我的位置数据MyLocationData dada = new MyLocationData.Builder().latitude(result.getLatitude())// 设置纬度.longitude(result.getLongitude())// 设置经度.build();baiduMap.setMyLocationData(dada);// 显示定位信息 只有打开定位图层 才有效果}}

1.创建LocationClient对象(专门用于位置显示类)
2.设置位置监听器DBLocationListener
3.通过LocationClientOption设置一些显示的数据
4.通过控制器baiduMap把设置的数据呈现在地图上
  三、小结
位置的显示在很多app上应用都很广泛,此外地图还有一些其他的内容
1.图层设置:卫星图,交通图,普通图
2.覆盖物:文字,Marker,泡泡显示等等
3.搜索的设置:
兴趣点:在一个范围内搜索位置
路线:驾车,公交,步行
对于每一个内容百度都给出了相应的api来实现,用法都是大同小异的
刚开始接触地图的时候有点蒙逼,不过反复看了看代码,自己也敲了敲发现原来步骤都是固定的
0 0
原创粉丝点击