PS:装了个deepin,感觉真的很高大上.

学习内容:

1.公交信息检索

2.路线规划

  关于百度地图的开发也就这么多了.重要的部分也就那么些.原本打算搞到poi搜索就算了,不过看到了这两个方面还是忍不住去涉猎一下.其实实现的模式和poi搜索没有什么太多的区别.只要将数据信息发送给百度地图的服务器,我们对服务器的返回数据进行处理就可以了.

1.公交信息检索

  公交信息检索,顾名思义就是搜索大巴和地铁.实现的过程和poi搜索没什么两样,一般都是现实例化对象,然后设置检索的参数和检索数据的监听.设置完这两个东西后,开始发出检索请求.然后等待服务器段处理完数据信息之后,我们客户端对数据信息进行处理就可以了.(com.baidu.mapapi.search.busline)

  通过使用上面的api就可以实现公交信息检索.

  还有一点就是公交路线查询也是基于Poi搜索的.当我们完成了Poi搜索之后,才能够实现公交路线的搜索.实现Poi搜索就非常的简单了,这里就不进行细说了.只是说一下Poi结果查询之后回调函数的一些细节.

OnGetPoiSearchResultListener poiSearchResultListener = new OnGetPoiSearchResultListener() {
@Override
public void onGetPoiResult(PoiResult poiResult) {
if (poiResult == null
|| poiResult.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {// 没有找到检索结果
Toast.makeText(BusLineSearchActivity.this, "未找到结果",
Toast.LENGTH_LONG).show();
return;
} if (poiResult.error == SearchResult.ERRORNO.NO_ERROR) {// 检索结果正常返回
// 遍历所有poi,找到类型为公交线路的poi
buslineIdList.clear();
for (PoiInfo poi : poiResult.getAllPoi()) {
if (poi.type == PoiInfo.POITYPE.BUS_LINE
|| poi.type == PoiInfo.POITYPE.SUBWAY_LINE) {
buslineIdList.add(poi.uid);
}
}
searchBusline();
}
} @Override
public void onGetPoiDetailResult(PoiDetailResult arg0) { }
};

回调函数返回的结果会有各种各样的poi,因此我们需要将这些poi进行遍历,从而查找出我们想要的公交站点.因此这里使用了一个判断条件去保存这些公交信息.这个就是来完成判断的过程.完成了这些后,就可以对公交线路进行相关查询了.

  if (poi.type == PoiInfo.POITYPE.BUS_LINE || poi.type == PoiInfo.POITYPE.SUBWAY_LINE) {
buslineIdList.add(poi.uid);
}

  首先是实例化对象.和poi搜索如出一辙,都是使用newInstance()去实例化对象.那么BusLineSearch通过实例化对象去完成公交信息的检索.通过向服务端发送请求,然后获取数据信息就可以了.

busLineSearch = BusLineSearch.newInstance();

  然后就是绑定监听事件.当服务器对数据处理完毕之后,作为回调函数,将处理完的数据信息返回给客户端.然后客户端对数据信息进行相关处理.从而获取服务端想要的数据信息.

OnGetBusLineSearchResultListener busLineSearchResultListener = new OnGetBusLineSearchResultListener() {
@Override
public void onGetBusLineResult(BusLineResult busLineResult) { if (busLineResult.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(BusLineSearchActivity.this, "抱歉,未找到结果",
Toast.LENGTH_SHORT).show();
} else {
bdMap.clear();
BusLineOverlay overlay = new MyBuslineOverlay(bdMap);// 用于显示一条公交详情结果的Overlay
overlay.setData(busLineResult);
overlay.addToMap();// 将overlay添加到地图上
overlay.zoomToSpan();// 缩放地图,使所有overlay都在合适的视野范围内
bdMap.setOnMarkerClickListener(overlay);
// 公交线路名称
Toast.makeText(BusLineSearchActivity.this,
busLineResult.getBusLineName(), Toast.LENGTH_SHORT)
.show();
}
}
};

监听的设置非常的简单.BusLineResult作为回调函数的参数.然后我们可以获取到公交线路站点信息.同时我们还可以对这些站点信息进行处理.设置站点的监听事件.站点的数据信息获取展示在Map上也是通过Overlay去实现的.我们只需要调用Overlay内部的函数,就可以把所有获取到的结果展示在Map上.

class MyBuslineOverlay extends BusLineOverlay {

        public MyBuslineOverlay(BaiduMap arg0) {
super(arg0);
}
/**
* 站点点击事件
*/
@Override
public boolean onBusStationClick(int arg0) {
//
MarkerOptions options = (MarkerOptions) getOverlayOptions().get(arg0); //获取被点击的Marker
bdMap.animateMapStatus(MapStatusUpdateFactory.newLatLng(options.getPosition())); //更新地图上的数据信息.
return true;
}
}

同时我们最后配置上查询的相关参数,然后发送请求就可以完成信息的查询了.参数的配置则是通过BusLineSearchOptions去完成配置.公交信息查询的参数则需要配置两个属性.一个是城市参数.一个则是uid.这里的uid表示的是一个标示符(唯一).不是表示公交站点的车号.这点我们需要注意.以下则是通过传递完参数之后进行信息的查询.

busLineSearch.searchBusLine((new BusLineSearchOption().city(city).uid(buslineIdList.get(buslineIndex))));  

2.路线规划

  路线规划则是根据指定路线,然后设置出最佳路线提供给用户,使得用户能够以最快的时间从出发地到达目的地,路线规划分成三种规划.驾车,换乘,步行三种方式的规划.

  规划同时包含了四种策略:躲避拥堵,最短距离,较少费用,时间优先这四大策略.四种策略以枚举的形式被封装起来.这样我们就可以直接在路线规划当中设置策略.然后发送请求.百度地图服务器会根据我们设置的策略进行相应的处理.

  驾车路线查询实现

   /**
* 驾车线路查询 下拉菜单的四个属性:躲避拥堵,最短距离,较少费用,时间优先
*/
private void drivingSearch(int index) {
DrivingRoutePlanOption drivingOption = new DrivingRoutePlanOption();
drivingOption.policy(DrivingPolicy.values()[drivingSpinner.getSelectedItemPosition()]);// 设置驾车路线策略.使用了一个下拉菜单去获取四种策略的一种.
drivingOption.from(PlanNode.withCityNameAndPlaceName("淄博", startPlace));// 设置起点
drivingOption.to(PlanNode.withCityNameAndPlaceName("淄博", endPlace));// 设置终点
routePlanSearch.drivingSearch(drivingOption);// 发起驾车路线规划
}

  简单的说一下内部的函数: from(PlanNode from)设置起始点函数. passBy(java.util.List<PlanNode>wayPoints)设置途经点函数  

  policy(DrivingRoutePlanOption.DrivingPolicy policy)设置驾车路线规划策略. to(PlanNode to)要到达的位置

  设置起始点,经过点,终点的时候需要传递PlanNode对象.实例化PlanNode对象的时候,一种方式是通过传递城市和地名去实例化.另一种方式则是通过设置经纬度的方式去实例化对象.

  换乘路线查询实现

  换乘路线其实一般指的就是地铁或者是大巴.这些东西途径时需要实现换乘.

   /**
* 换乘路线查询
*/
private void transitSearch(int index) {
TransitRoutePlanOption transitOption = new TransitRoutePlanOption();
transitOption.city("淄博");// 设置换乘路线规划城市,起终点中的城市将会被忽略
transitOption.from(PlanNode.withCityNameAndPlaceName("淄博", startPlace));
transitOption.to(PlanNode.withCityNameAndPlaceName("淄博", endPlace));
transitOption.policy(TransitPolicy.values()[transitSpinner.getSelectedItemPosition()]);// 设置换乘策略
routePlanSearch.transitSearch(transitOption);
}

步行路线查询实现:

   /**
* 步行路线查询
*/
private void walkSearch() {
WalkingRoutePlanOption walkOption = new WalkingRoutePlanOption();
walkOption.from(PlanNode.withCityNameAndPlaceName("淄博", startPlace));
walkOption.to(PlanNode.withCityNameAndPlaceName("淄博", endPlace));
routePlanSearch.walkingSearch(walkOption);
}

设置的方式其实都特别的简单,设置完相关方式之后需要设置相关的监听事件用于回调.内部的具体实现过程我就不去实现了,在最后我会再提供一个demo下载.大家可以下载下来进行相关的研究.

    /**
* 路线规划结果回调
*/
OnGetRoutePlanResultListener routePlanResultListener = new OnGetRoutePlanResultListener() { /**
* 步行路线结果回调
*/
@Override
public void onGetWalkingRouteResult(
WalkingRouteResult walkingRouteResult) { } /**
* 换成路线结果回调
*/
@Override
public void onGetTransitRouteResult(
TransitRouteResult transitRouteResult) { } /**
* 驾车路线结果回调 查询的结果可能包括多条驾车路线方案
*/
@Override
public void onGetDrivingRouteResult(
DrivingRouteResult drivingRouteResult) { }
};

最后就是实例化对象,然后发送请求就可以了,服务端处理完数据信息之后,通过回调就可以把数据回传了.

  最后放一个demo:http://files.cnblogs.com/files/RGogoing/BDMap_1.rar

 

Android学习笔记之使用百度地图实现路线规划+公交信息检索的更多相关文章

  1. Android学习笔记之使用百度地图实现Poi搜索

    PS:装个系统装了一天.心力憔悴.感觉不会再爱了. 学习内容: 1.使用百度Map实现Poi搜索. 2.短串分享 3.在线建议查询   百度地图的研究也算是过半了.能够实现定位,实现相关信息的搜索,实 ...

  2. Android学习笔记之使用百度地图实现地图控制

    PS:吾之荣耀,离别已久. 学习内容: 1.实现地图控制. 2.百度地图开发的一些细节     1.实现地图控制:   这一篇主要写在百度地图上添加一些其他控制.上一篇书写了覆盖物的添加,地理编码和反 ...

  3. android菜鸟学习笔记30----Android使用百度地图API(一)准备工作及在应用中显示地图

    1.准备工作: 百度地图API是免费开放的,但是需要申请API Key: 1)先注册一个百度开发者帐号 2)进入百度开放服务平台http://developer.baidu.com/ 3)进入LBS云 ...

  4. android菜鸟学习笔记31----Android使用百度地图API(二)获取地理位置及地图控制器的简单使用

    1.获取当前地理位置: Android中提供了一个LocationManager的类,用于管理地理位置.不能通过构造函数获取该类的实例,而是通过Context的getSystemService(): ...

  5. Android百度地图开发05之公交信息检索 + 路线规划

    在上一篇blog中介绍过POI检索的使用,本篇blog主要介绍公交信息检索和线路规划的内容. 公交信息检索 实际上,公交信息检索与POI检索.在线建议检索非常相似,也是把你需要检索的信息发送给百度地图 ...

  6. 【Android】策略模式封装百度地图路线规划模块

    百度地图的Demo里有个路线规划的功能,但是,这个功能和Activity耦合性太高,所以需要单独抽离出路径规划功能,进行"解耦". 注:由于项目原因,本文只针对驾车路线规划进行封装 ...

  7. 【转】Pro Android学习笔记(十四):用户界面和控制(2):Text类控制

    目录(?)[-] TextView 例子1在XML中设置autoLink属性 例子2在代码中设置autoLink属性 EditText AutoCompleteTextView MultiAutoCo ...

  8. udacity android 学习笔记: lesson 4 part a

    udacity android 学习笔记: lesson 4 part a 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 ...

  9. Android 学习笔记之Volley(七)实现Json数据加载和解析...

    学习内容: 1.使用Volley实现异步加载Json数据...   Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...

随机推荐

  1. iOS10 相机相册等权限的使用、检测并引导用户开启权限

    <!-- 相册 --> <key>NSPhotoLibraryUsageDescription</key> <string>App需要您的同意,才能访问 ...

  2. C#--GDI+的LinearGradientBrush类

    命名空间:System.Drawing.Drawing2D LinearGradientBrush对象用颜色线性渐变填充图形.简言之,颜色渐变包含一种在两种指定的颜色之间渐变的颜色,渐变的方向是沿着指 ...

  3. 【C/C++】随机数问题

    最初问题:从n个数中随机选择m个数(0<=m<=n). 为了便于描述,可以将该问题抽象为:从0-n-1这n个数中随机选择m个数.计算机能够提供的随机数都是伪随机的,我们假设计算机提供的伪随 ...

  4. Linux Futex的设计与实现(转)

    引子在编译2.6内核的时候,你会在编译选项中看到[*] Enable futex support这一项,上网查,有的资料会告诉你"不选这个内核不一定能正确的运行使用glibc的程序" ...

  5. Web 开发常备工具

    工欲善其事,必先利其器.如今 Web 开发标准越来越高,Web 开发者也在不断寻找途径提升自己的技能.为使大家的开发工作更顺利进行,本文整理了 10+ 款比较优秀的 Web 开发工具,希望对你有帮助. ...

  6. 注入器和发布库--AngularJS学习笔记(三)

    AngularJS的一大特性就是Module的加载和依赖注入,本文将分析一下loader.js和最后这些代码文件是怎么组织和运行的. Loader.js 该文件中只有setupModuleLoader ...

  7. Asp.net Core 使用Redis存储Session

    前言 Asp.net Core 改变了之前的封闭,现在开源且开放,下面我们来用Redis存储Session来做一个简单的测试,或者叫做中间件(middleware). 对于Session来说褒贬不一, ...

  8. 通过Web.config实现301重定向

    通过Web.config实现301重定向 IIS7以上可以通过修改Web.config实现IIS设置 现在我们通过Web.config实现301重定向 <system.webServer> ...

  9. 使用 ContentProviderOperation 来提升性能

    ContentProviders  是android 系统核心组件之一,ContentProviders 封装了数据的访问接口,其底层数据一般都是保存在数据库中或者保存在云端. 有时候你需要更新多行数 ...

  10. TCP/IP 网络编程 (三)

    server端未处理高并发请求通常採用例如以下方式: 多进程:通过创建多个进程提供服务 多路复用:通过捆绑并统一管理 I/O 对象提供服务 多线程:通过生成和客户端等量的线程提供服务 多进程serve ...