百度地图

本文详细介绍了地图应用中如何显示位置并进行地图操作。包括地图引擎的初始化、地图显示、位置定位以及地图的图层设置、覆盖物添加、搜索功能等。文章深入浅出地解释了地图API的使用,帮助开发者更好地理解和应用地图功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    很多应用都有获取自己位置的功能,比如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来实现,用法都是大同小异的
	刚开始接触地图的时候有点蒙逼,不过反复看了看代码,自己也敲了敲发现原来步骤都是固定的


评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值