百度地图

    很多应用都有获取自己位置的功能,比如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
    评论
Flutter百度地图是一款基于Flutter技术开发的地图应用程序。Flutter是一种跨平台的移动应用开发框架,而百度地图是一款功能强大的地图导航工具。这个应用程序结合了Flutter的跨平台特性和百度地图的功能,使得开发者可以轻松地创建出高性能、交互友好的地图应用。 使用Flutter百度地图可以实现很多功能,比如显示地图、标记位置、搜索地点、路线规划等。开发者可以通过调用Flutter百度地图提供的API来完成这些功能。Flutter百度地图API包括了地图的展示、交互、搜索、定位等功能,能够满足开发者对地图应用的各种需求。 使用Flutter百度地图进行地图展示时,开发者可以自定义地图样式,包括地图的颜色、标注点的图片、文字样式等。通过调用API,开发者可以在地图上添加标记点、覆盖物、绘制路线等,使得地图更加丰富多样。此外,开发者还可以利用Flutter百度地图的搜索功能,实现地点的搜索和周边兴趣点的展示。 在开发过程中,Flutter百度地图提供了丰富的事件回调,开发者可以根据用户的交互行为来执行相应的操作。比如,当用户点击地图上的标记点时,开发者可以通过事件回调来实现弹出详情信息或执行其他特定操作。 总之,Flutter百度地图是一款强大的地图应用开发工具,可以帮助开发者快速构建出高质量的跨平台地图应用。无论是需要简单的地图展示,还是复杂的路线规划,Flutter百度地图都能满足开发者的需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值