百度地图

    很多应用都有获取自己位置的功能,比如QQ,微信等等都能获取到自己的位置
 一、核心类简介
    1.SDKInitializer:初始化SDK配置
    2.MapView:地图数据显示
    3.BaiduMap:控制地图状态
 二、原理
    Ⅰ.前期准备
      jar包、库文件引入,key值获取
    Ⅱ.地图显示
	
private BaiduMap baiduMap;
	private MapView mapView;

	@Override
	protected 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);// 设置缩放按钮是否显示 默认是true
		baiduMap = mapView.getMap();

		// 改变当前地图的状态
		MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.zoomTo(15);// 设置缩放到15级,默认是12级
		baiduMap.setMapStatus(mapStatusUpdate);

		// 设置中心点 默认是天安门
		MapStatusUpdate mapStatusUpdatePoint = MapStatusUpdateFactory
				.newLatLng(null);
		baiduMap.setMapStatus(mapStatusUpdatePoint);
	}

	private void initSDK() {
		// 初始化地图引擎 校验KEY
		SDKInitializer.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 {

		@Override
		public 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一致
	 */
	@Override
	protected void onResume() {
		mapView.onResume();
		super.onResume();
	}
	/**
	 * MapView的生命周期与activity一致
	 */
	@Override
	protected void onPause() {
		mapView.onPause();
		super.onPause();
	}

	/**
	 * MapView的生命周期与activity一致
	 */
	@Override
	protected 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");// 返回的定位结果是百度经纬度,默认值gcj02
		option.setScanSpan(5000);// 设置发起定位请求的间隔时间为5000ms
		option.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 {

		@Override
		public 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
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
因为最近项目需要,用了3个星期研究了一下百度地图的官方demo,并基于其源代码做了一定的修改,部分模仿了官方版的百度地图V5.3.1(version code: 431,目前最新版是6.0.1)的界面。现放出源代码供大家学习研究,修改版例子中的代码已经尽可能注释了,不过本人水平有限,代码质量可能有待提高,请大家勿用于商业用途,因为可能有很多未知BUG。觉得好的话请大家顶! 开发环境: eclipse:Android Developer Tools Build: v22.0.1-685705 JDK:java version "1.7.0_03" 测试环境: 三星GT-i9228 android2.3.6 主要改动: 1、LayersDemo里面把“普通图、卫星图及交通流量图”集成到了PreferencesActivity里面,修改立即生效。 2、MapControlDemo里面把“缩放级别、旋转、俯视”集成到了PreferencesActivity里面,修改立即生效。把截图功能加到了menu里面。 PS:这里顺便说一下新版百度地图怎么控制俯视角度,我查了好久,连官方的手势说明都没找到,被我无意之间发现了:两只手指同时向下滑为俯视,同时向上为恢复,当然也可以点击地图左上角的指南针 3、UISettingsDemo里面把“缩放、平移、双击放大、旋转” 开关手势功能和显示隐藏“缩放控件、指南针位置”UI控件集,成到了PreferencesActivity里面,修改立即生效。 4、LocationOverlayDemo里面增加了比例尺和自定义缩放控件。 5、OverlayDemo只做了位置修改,下面的两个才是重头戏。 6、RoutePlanDemo模仿了百度地图5.3.1的路径规划。 7、OfflineDemo模仿了百度地图5.3.1的离线地图,并集成到一个界面了。 如有问题请参照百度文档,或者联系我QQ472950043。 模仿的版本是百度地图5.3.1 ,大家有需要的话可以到豌豆荚下载历史版本里面下载baiduditu_431.apk

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值