昨天写的不怎么详细,但是也写出了个大概,其实路线规划、公交线路搜索、poi的搜索大致步骤都一样。
第一步:获取对象 路线规划RoutePlanSearch 公交线路BusLineSearch POI搜索PoiSearch
第二步:对获取到的对象设置监听事件
公交线路搜索的监听
buslineSearch.setOnGetBusLineSearchResultListener(new OnGetBusLineSearchResultListener() { @Override public void onGetBusLineResult(BusLineResult busLineResult) { if(busLineResult!=null&&busLineResult.error ==SearchResult.ERRORNO.NO_ERROR){ baiduMap.clear(); BusLineOverlay overlay = new BusLineOverlay(baiduMap);//设置覆盖物 overlay.setData(busLineResult);//设置数据 overlay.addToMap();//添加到地图上 } } });路线规划的监听:
routePlan.setOnGetRoutePlanResultListener(new OnGetRoutePlanResultListener() { @Override public void onGetWalkingRouteResult(WalkingRouteResult walkingRouteResult) { //步行 } @Override public void onGetTransitRouteResult(TransitRouteResult transitRouteResult) { //公交 } @Override public void onGetDrivingRouteResult(DrivingRouteResult drivingRouteResult) { //自駕 //获取所有的路线 Listpoi的在上一篇文章中写了,这里就不在赘述了。listLines = drivingRouteResult.getRouteLines(); if (listLines!=null&&listLines.size()>0){//说明有路线 drivingRouteLine = listLines.get(0);//设置第一条路线展示 } MyOverlay myOverlay = new MyOverlay(baiduMap); myOverlay.setData(drivingRouteLine); baiduMap.setOnMarkerClickListener(myOverlay); myOverlay.addToMap(); } @Override public void onGetBikingRouteResult(BikingRouteResult bikingRouteResult) { //騎行 } });
第三步:开启查询
路线规划中的自驾的路线
routePlan.drivingSearch(new DrivingRoutePlanOption().from(PlanNode.withCityNameAndPlaceName("北京","北京")) .to(PlanNode.withCityNameAndPlaceName("北京","北京西站")));当然里面的数据可以是从EditText中获取到的数据,这里只是为了简单就直接设置了。
这里只是举个例子,
第四步:在监听事件中进行处理,例如添加覆盖物,或者跳转到详情页面(传递uid通过webView布局展示详情)
步骤大致就是这样,覆盖物的utils官方下载的包中都有。
好了,回顾了一下,现在来认识一个用到最多的——定位
大部分的app都有这个功能,所以说用到的比较多
进入正题,和昨天一样,我们需要到官网请求一个API-KEY,以及找出权限,定位需要用到服务,所以直接在官网复制粘贴吧,如果不想在请求一个KEY,那就写到昨天的包里面。
简单的定位:(布局一个mapView)
第一步:找出控件,声明一个BaiduMap baiduMao = mapView.getMap();
mapView = ((MapView) findViewById(R.id.mapView_Loca)); baiduMap = mapView.getMap();
第二步:获取对象
private LocationClient location;
location = new LocationClient(getApplicationContext()); LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); /** * LocationClientOption.LocationMode.Battery_Saving:低功耗定位 不用GPS (wifi 基站) * * LocationClientOption.LocationMode.Hight_Accuracy:高精度定位 全开GPS wifi 基站 * * LocationClientOption.LocationMode.Device_Sensors 仅仅使用设备 GPS 不支持室内 */
这些东西我们可以在源码中看到
public static enum LocationMode { Hight_Accuracy, Battery_Saving, Device_Sensors; private LocationMode() { } }然后还有要设置的东西
/** * bd09ll:百度经纬度坐标(小写的LL不是11) * bd09:墨卡托坐标 * gcjo2:国家测量局坐标 */ option.setCoorType("bd09ll "); option.setScanSpan(2 * 1000);//设置定位间隔符 option.setTimeOut(2 * 1000);//设置定位超出的时间 option.setIsNeedAddress(true);//设置是否需要获得地址 option.setNeedDeviceDirect(true);//设置手机机头方向第三步:给定位对象设置监听
location.setLocOption(option); location.registerLocationListener(new BDLocationListener() { @Override public void onReceiveLocation(BDLocation bdLocation) {//获取坐标 LatLng latLng = new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude()); BitmapDescriptor descriptor = BitmapDescriptorFactory.fromResource(R.mipmap.ic_launcher); OverlayOptions options = new MarkerOptions().position(latLng).icon(descriptor).title("当前位置"); baiduMap.addOverlay(options); } });第四步:开启监听
location.start(); location.requestLocation();这只是简单的定位步骤,简单的实现了定位的功能,详细的当然还是需要去看官方的demo了。哈哈