Android百度地图开发05之公交信息检索 + 路线规划
在上一篇blog中介绍过POI检索的使用,本篇blog主要介绍公交信息检索和线路规划的内容。
公交信息检索
实际上,公交信息检索与POI检索、在线建议检索非常相似,也是把你需要检索的信息发送给百度地图服务器,然后解析得到的结果。
一般步骤:
1. 设置检索参数
2. 添加检索结果监听器
3. 发起检索
4. 解析返回结果
打开程序包com.baidu.mapapi.search.busline
在BusLineSearchOption这个类中,我们看到一个参数是城市,另一个是公家路线uid。
一开始,我以为第二个参数是公交线号,代码编写完毕去查询的时候,总是出错。后来仔细查看了api之后,发现不是公交线号,而是uid。uid我们在之前poi检索的时候,曾经见到过,它实际上即是一个id,是i一个唯一标识。
所以注意:公交信息检索设置查询参数时,第二个参数是uid。
所以进行公交信息检索之前,需要先进行POI检索。使用searchInCity()方法在每一个城市内查询公交路线号:
- city = cityEt.getText().toString();
- busline = buslineEt.getText().toString();
- poiSearch.searchInCity((new PoiCitySearchOption()).city(city)
- .keyword(busline));
得到poi检索的结果时,在PoiResult类中有通过getAllPoi()获取poi检索结果。
- @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) {// 检索结果正常返回
- // 得到检索结果
- }
- }
此时如果直接取出PoiInfo中的uid的话,你会发现很多个。但是,我们都知道,一个公交线号最多有两个线路(正向和反向)。所以我们需要筛选出是公交路线的uid。
在PoiInfo类中有个type字段:0:普通点、1:、公交站 2:、 公交路线 3:、地铁站 4:地铁线路
- if (poi.type == PoiInfo.POITYPE.BUS_LINE
- || poi.type == PoiInfo.POITYPE.SUBWAY_LINE) {
- buslineIdList.add(poi.uid);
- }
通过判断type,将正确的uid添加到一个list中。
得到了uid,就可以结合城市参数,进行公交线路检索了。
- private void searchBusline() {
- if (buslineIndex >= buslineIdList.size()) {
- buslineIndex = 0;
- }
- if (buslineIndex >= 0 && buslineIndex < buslineIdList.size()
- && buslineIdList.size() > 0) {
- boolean flag = busLineSearch
- .searchBusLine((new BusLineSearchOption().city(city)
- .uid(buslineIdList.get(buslineIndex))));
- if (flag) {
- Toast.makeText(BusLineSearchActivity.this, "检索成功~", 1000)
- .show();
- } else {
- Toast.makeText(BusLineSearchActivity.this, "检索失败~", 1000)
- .show();
- }
- buslineIndex++;
- }
- }
- /**
- * 公交信息查询结果监听器
- */
- 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用来存储查询得到的结果,它又两个内部类和几个普通函数:
我们可以通过这两个内部类,得到自己想要的信息,这里就不在代码里写了。
我们依旧通过使用overlayutil包下的相关类(BusLineOverlay)添加覆盖物到地图上。
- class MyBuslineOverlay extends BusLineOverlay {
- public MyBuslineOverlay(BaiduMap arg0) {
- super(arg0);
- }
- /**
- * 站点点击事件
- */
- @Override
- public boolean onBusStationClick(int arg0) {
- MarkerOptions options = (MarkerOptions) getOverlayOptions().get(arg0);
- bdMap.animateMapStatus(MapStatusUpdateFactory.newLatLng(options.getPosition()));
- return true;
- }
- }
路线规划
路线规划分为三种:驾车、换成(公交)、步行。而路线规划又与之前的各种检索相似。
路线规划先关类都在此包结构下。
我将这个包下面的类做了一下标注,这样就很清楚了,三种路线规划方式就相当于一个poi检索,只有参数设置的时候需要注意下。
路线规划里有策略这一概念。那驾车路线规划说,就包括四种策略:躲避拥堵、最短距离、较少费用、时间优先,这四种策略组成了一个枚举类型:DrivingRoutePlanOption.DrivingPolicy。
设置点的时候,传入的参数是PlanNode类型的。该类有两个静态的方法,一个通过设置城市名和地名,一个通过设置经纬度,都可以返回一个PlanNode对象。
OK,到此为止,路线规划已经没有任何难处了,下面只贴出驾车路线规划的代码,其余的可以下载demo查看。
- DrivingRoutePlanOption drivingOption = new DrivingRoutePlanOption();
- drivingOption.policy(DrivingPolicy.values()[drivingSpinner
- .getSelectedItemPosition()]);// 设置驾车路线策略
- drivingOption.from(PlanNode.withCityNameAndPlaceName("北京", startPlace));// 设置起点
- drivingOption.to(PlanNode.withCityNameAndPlaceName("北京", endPlace));// 设置终点
- routePlanSearch.drivingSearch(drivingOption);// 发起驾车路线规划
- /**
- * 驾车路线结果回调 查询的结果可能包括多条驾车路线方案
- */
- @Override
- public void onGetDrivingRouteResult(
- DrivingRouteResult drivingRouteResult) {
- bdMap.clear();
- if (drivingRouteResult == null
- || drivingRouteResult.error != SearchResult.ERRORNO.NO_ERROR) {
- Toast.makeText(RoutePlanningActivity.this, "抱歉,未找到结果",
- Toast.LENGTH_SHORT).show();
- }
- if (drivingRouteResult.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
- // 起终点或途经点地址有岐义,通过以下接口获取建议查询信息
- // drivingRouteResult.getSuggestAddrInfo()
- return;
- }
- if (drivingRouteResult.error == SearchResult.ERRORNO.NO_ERROR) {
- DrivingRouteOverlay drivingRouteOverlay = new DrivingRouteOverlay(
- bdMap);
- drivingRouteOverlay.setData(drivingRouteResult.getRouteLines()
- .get(drivintResultIndex));// 设置一条驾车路线方案
- bdMap.setOnMarkerClickListener(drivingRouteOverlay);
- drivingRouteOverlay.addToMap();
- drivingRouteOverlay.zoomToSpan();
- totalLine = drivingRouteResult.getRouteLines().size();
- Toast.makeText(RoutePlanningActivity.this,
- "共查询出" + totalLine + "条符合条件的线路", 1000).show();
- if (totalLine > 1) {
- nextLineBtn.setEnabled(true);
- }
- // 通过getTaxiInfo()可以得到很多关于打车的信息
- Toast.makeText(
- RoutePlanningActivity.this,
- "该路线打车总路程"
- + drivingRouteResult.getTaxiInfo()
- .getDistance(), 1000).show();
- }
- }
- };
下载
Android百度地图开发05之公交信息检索 + 路线规划的更多相关文章
- Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图
标签: Android百度地图API Key 分类: Android 百度地图开发(2) 最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地 ...
- android 百度地图开发实例(转载)
因为在我的寝室google基站定位返回的数据总是为空,所以换成百度地图,发现百度地图开发起来非常方便,提供了许多有用的工具,地图的加载速度也比google地图快许多. 为了加强记忆,写一点androi ...
- [android] 百度地图开发 (两).所在地的城市定位和城市POI搜索
一个. 百度地图城市位置和POI搜索知识 上一篇文章"百度地图开发(一)"中讲述了怎样申请百度APIKey及解决显示空白网格的问题.该篇文章主要讲述怎样定位城市位置.定 ...
- Android 百度地图开发之一(Hello BaiDu Map)
之前也接触过百度地图的开发,但那是在网上找的案例或代码,而且是比较老的版本.打算重新学习一下百度地图的开发. 本次使用的百度地图的版本是 Android SDK v3.0.0 本篇文章主要讲述百度地图 ...
- [android] 百度地图开发 (一).申请AK显示地图及解决显示空白网格问题
近期做android百度地图,可是使用baidumapapi_v2_3_1.jar和libBaiduMapSDK_v2_3_1.so显示百度地图时总是遇到问题--仅仅显示网格而没有显示地图,网 ...
- android百度地图开发之自动定位所在位置与固定位置进行驾车,步行,公交路线搜索
最近跟着百度地图API学地图开发,先是学了路径搜索,对于已知坐标的两点进行驾车.公交.步行三种路径的搜索(公交路径运行没效果,待学习中),后来又 学了定位功能,能够获取到自己所在位置的经纬度,但当将两 ...
- Android百度地图开发(一)环境搭建
1.百度地图官方API文档下载 版本 使用说明 下载 Android SDK 通用资源下载 <离线地图>提供新版离线地图(百度矢量地图)与旧版离线地图(百度栅格地图)下载. 备注: 自An ...
- Android百度地图附加搜索和公交路线方案搜索
合肥程序员群:49313181. 合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入) Q Q:408365330 E-Mail:egojit@qq.com 综述: 今 ...
- Android百度地图开发(一)之初体验
转载请注明出处:http://blog.csdn.net/crazy1235/article/details/42614603 做关于位置或者定位的app的时候免不了使用地图功能,本人最近由于项目的需 ...
随机推荐
- 集成Spring后HibernateTemplate实现分页
spring 整合 hibernate 时候用的 HibernateTemplate 不支持分页,因此需要自己包装一个类进行分页,具体实现如下...使用spring的hibernateTemplate ...
- 升级ubuntu内核
ubuntu12.04内核为 linux-image-3.5.0-23-generic 要升级为 linux-image-3.2.0-57-generic 使用apt-get install linu ...
- Gentoo安装配置过程与总结
前些时间在VMware上安装了Gentoo Linux,用了当前最新版的Gentoo,安装过程记录下来了,但一直没有整理到blog上.今天重新整理一下,写出来与大家分享和备用.接触Gentoo不久,对 ...
- @修饰符--python中的装饰器
装饰器模式可以在不影响其他对象的情况下,以动态.透明的方式给单个对象添加职责,也能够处理那些可以撤销的职责.经常用于日志记录.性能测试等场合. 想象一下这个很常见的场景,你写了一个方法只提供给以登陆的 ...
- RobotFramework-登录
*** Settings *** Library Selenium2Library *** Test Cases *** login [Setup] open browser http://XXX/X ...
- 基于ArcEngine的空间数据通用建库软件介绍
最近花了点时间把之前的空间数据入库功能进行了完善,在这里做一个简单的介绍,也希望大家给提点意见和建议,我的目标是做一个好用.易用.通用.稳定的入库程序. 1.软件特点: 基于模板(方案)的数据更新 ...
- 读《我是一只IT小小鸟》有感
时间太瘦,指缝太宽.一晃一学期过去了,有些迷茫,但也相信未来是美好的.当我看完<我是一只IT小小鸟>这本书之后,心中更是感慨万千.每一个励志的故事都值得欣赏.深思,甚至我还幻想 ...
- 堆(heap)和栈(stack)的区别
转: 一.预备知识―程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)― 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中 ...
- Core Data 版本数据迁移
Core Data版本迁移基础 通常,在使用Core Data的iOS App上,不同版本上的数据模型变更引发的数据迁移都是由Core Data来负责完成的.这种数据迁移模式称为Lightweight ...
- ASP.NET用户控件事件的定义和实践
假定用户控件(UserControl.ascx)中包含按钮控件 AButton,希望实现按 Button 按钮时,包含该用户控件的页面可以接收到事件. UserControl.ascx.cs ...