关于项目打开运行时错误的解决方案
在第一个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方法也是这么操作的!!