Android之百度地图(三)

关于项目打开运行时错误的解决方案
在这里插入图片描述

在第一个build.gradle 中打开 然后分别加上 google()
在这里插入图片描述
重新try again就可以了

下面介绍一下百度地图开发中ak值的获取方法(然后百度搜索百度地图开发平台就可以了)

SHA1值就是这么获取的 点击signingReport 等待几秒就可以了
SHA1: 4F:68:35:47:76:43:8B:EB:C8:52:4D:B5:6C:98:FD:52:67:34:55:6C
在这里插入图片描述

升级版本的百度地图 新增了地图规划功能(主要是百度提供,我只是负责稍微修改)

public class MapNavigateDemoActivity extends Activity implements  OnGetRoutePlanResultListener
{
	private MapView mMapView=null;	   		//MapView显示地图的视图
	private BaiduMap mBaiduMap = null;		//地图控制器
	private LatLng gpStart;					//起始点经纬度
	private LatLng gpEnd;					//结束点经纬度
	private BitmapDescriptor bitMapN = null;//起点图标
	private BitmapDescriptor bitMapS = null;//重点图标
	//状态标志为 0表示开始状态 1表示已经设置起始点的状态
	private int nState=0;
	//Overlay管理器
	OverlayManager routeOverlay = null;
	//搜索模块,也可去掉地图模块独立使用
	RoutePlanSearch mSearch = null;
	//检索完成标志位
	boolean useDefaultIcon = false;
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		//在使用SDK各组件之前初始化context信息,传入ApplicationContext
		//注意该方法要再setContentView方法之前实现
		SDKInitializer.initialize(getApplicationContext());
		setContentView(R.layout.main);

		mMapView = (MapView) this.findViewById(R.id.bmapView);	//获得MapView引用
		mBaiduMap=mMapView.getMap();							//获得地图控制器

		bitMapN = BitmapDescriptorFactory.fromResource(R.drawable.point_n);//加载图片
		bitMapS = BitmapDescriptorFactory.fromResource(R.drawable.point_s);
		//设置地图缩放比
		float mZoomLevel = 12.0f;
		mBaiduMap.setMapStatus(MapStatusUpdateFactory.zoomTo(mZoomLevel));
		//设置地图中心点为华北理工大学曹妃甸校区
		mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(new LatLng(39.207928,118.598560)));

		mSearch = RoutePlanSearch.newInstance();		//获取路径规划搜索接口
		mSearch.setOnGetRoutePlanResultListener(this);	//添加监听
		mBaiduMap.setOnMapClickListener(
				new OnMapClickListener()
				{
					@Override
					public boolean onMapPoiClick(MapPoi arg0)
					{
						return false;
					}
					@Override
					public void onMapClick(LatLng mLatlng)
					{
						if(nState==0)
						{	 //若地图在没有终点与起点的情况下或
							//在同时又起点与终点的情况下被点击
							mBaiduMap.clear();
							gpStart=mLatlng;				//获取点击的坐标
							OverlayOptions mOverlay = new MarkerOptions()
									.position(gpStart)	//设置起点气球坐标
									.icon(bitMapN)		//设置起点气球图标
									.perspective(true);//设置开启 marker 覆盖物近大远小效果,默认开启
							mBaiduMap.addOverlay(mOverlay);	//添加到地图上
							nState=1;//状态标志位设为1
						}else if(nState==1)
						{
							gpEnd=mLatlng;
							OverlayOptions mOverlay = new MarkerOptions()	//添加的终点气球
									.position(gpEnd)	//设置终点气球坐标
									.icon(bitMapS)		//设置终点气球图标
									.perspective(true);		//设置开启 marker 覆盖物近大远小效果,默认开启
							mBaiduMap.addOverlay(mOverlay);	//添加到地图上
							nState=0;//状态标志位设为0
							SearchButtonProcess();//发起步行路线规划方法
						}
					}
				}
		);

	}
	public void SearchButtonProcess()
	{
		//建立起点和终点节点
		PlanNode stNode = PlanNode.withLocation(gpStart);//起点节点
		PlanNode enNode = PlanNode.withLocation(gpEnd);//终点节点
		//发起步行路线规划
		mSearch.walkingSearch((new WalkingRoutePlanOption()).from(stNode).to(enNode));
		//mSearch.drivingSearch((new DrivingRoutePlanOption()).from(stNode).to(enNode));
		System.out.println("search");
	}

	@Override
	public void onGetDrivingRouteResult(DrivingRouteResult arg0)
	{
	}

	@Override
	public void onGetIndoorRouteResult(IndoorRouteResult indoorRouteResult) {

	}

	@Override
	public void onGetBikingRouteResult(BikingRouteResult bikingRouteResult) {

	}

	@Override
	public void onGetTransitRouteResult(TransitRouteResult arg0)
	{
	}

	@Override
	public void onGetMassTransitRouteResult(MassTransitRouteResult massTransitRouteResult) {

	}

	@Override
	public void onGetWalkingRouteResult(WalkingRouteResult result) {//获取步行线路规划结果
		if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR)//没检索到结果
		{
			Toast.makeText(MapNavigateDemoActivity.this, "抱歉,未找到结果!", Toast.LENGTH_SHORT).show();
			return;
		}
		if (result.error == SearchResult.ERRORNO.NO_ERROR)
		{
			//用于显示步行路线的overlay
			WalkingRouteOverlay overlay = new WalkingRouteOverlay(mBaiduMap);
			//添加监听
			mBaiduMap.setOnMarkerClickListener(overlay);
			routeOverlay = overlay;
			//添加步行规划数据
			overlay.setData(result.getRouteLines().get(0));
			//将所有Overlay 添加到地图上
			overlay.addToMap();
			//缩放地图,使所有Overlay都在合适的视野内
			overlay.zoomToSpan();
			//状态标志位设为0
			nState=0;
		}
	}
	@Override
	protected void onDestroy()
	{
		super.onDestroy();
		//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
		mMapView.onDestroy();
	}
	@Override
	protected void onResume()
	{
		super.onResume();
		//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
		mMapView.onResume();
	}
	@Override
	protected void onPause()
	{
		super.onPause();
		//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
		mMapView.onPause();
	}

源码在上,下面逐步分析
首先第一个与之前百度地图不同的是
该类实现了 OnGetRoutePlanResultListener这个接口
这个接口是干嘛的呢? 这个接口能够实现三种方法
分别返回三种路线的结果。

在这里插入图片描述

接下来多了这两样东西
在这里插入图片描述
一丶OverlayManager这个类 解释如下
在这里插入图片描述

来看下使用主要是运用在了显示步行路线的overlay上(可以理解为WalkingRouteOverlay是OverlayManager的一个子类)
在这里插入图片描述
先创建一个overlay的对象 (要把BaiduMap传进去) 然后在把该overlay赋给OverlayManager 并且如果要使用zoomToSpan方法的话 必须要添加监听
该方法只对marker类型的overlay有效
在这里插入图片描述

二丶RoutePlanSearch的解释
在这里插入图片描述
来看下代码中使用的情况
在这里插入图片描述
在这里插入图片描述
顺便说明一下 在路线规划的时候
要将LatLng 类型的坐标变成 PlanNode的节点型
然后调用 from to 这个方法 并且强制转换成 option类型!
才可以调用RoutePlanSearch中的walkingSearch方法
当然其他类似drivingSearch方法也是这么操作的!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑瞳丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值