可能有些人会出现无法导入overlayutil的错误,这是因为BaiduMap里面的包把这部分删除掉了,并且官方没有给出说明,这个地方以前也是让我折腾了很久。

不知道现在有没有说明这个问题,如果需要这个包,可以下载官方demo,把这个包复制下载粘贴到自己项目里面。

功能如下:

  • 在地图中显示公交路线。
  • 在log中打印公交路线及其信息。
  • 在地图中添加站点点击显示相应信息。(这里使用百度提供的包,在里面的类直接修改)

1.这里是需要把公交的uid检索出来,遍历所有poi,找到类型为公交线路的poi。在公交信息里面需要使用UID

 /**
* 创建POI检索结果监听器 poiSearch
*/
OnGetPoiSearchResultListener poiSearchResultListener = new OnGetPoiSearchResultListener() {
@Override
public void onGetPoiResult(PoiResult poiResult) {
if (poiResult == null
|| poiResult.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {// 没有找到检索结果
Toast.makeText(MainActivity.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();
}
}

2.这里会根据上面的UID来检索公交信息。具体为公交“检索入口”部分

private void searchBusline() {
//公交的站点大于,该路线的长度。
if (buslineIndex >= buslineIdList.size()) {
buslineIndex = 0;
}
//公交站点 小于这个路线的长度
if (buslineIndex >= 0 && buslineIndex < buslineIdList.size()
&& buslineIdList.size() > 0) {
//定义并设置公交信息结果监听者(与POI类似),并发起公交详情检索;
//如下代码为发起检索代码,定义监听者和设置监听器的方法与POI中的类似
//参数city和这个keyword路线的UID
// 公交检索入口
boolean flag = busLineSearch
.searchBusLine((new BusLineSearchOption().city(city)
.uid(buslineIdList.get(buslineIndex))));
//是否成功检索
if (flag) {
//把布局隐藏
linearLayout.setVisibility(View.GONE);
Toast.makeText(MainActivity.this, "检索成功~", Toast.LENGTH_LONG)
.show();
} else {
Toast.makeText(MainActivity.this, "检索失败~", Toast.LENGTH_LONG)
.show();
}
buslineIndex++;
}
}

3.这里是公交信息的监听器,里面有回调函数。

BusLineOverlay overlay = new BusLineOverlay(mBaiduMap);

BusLineOverlay是overlayuti 里面的一个类,下文会讲解。

buslineOverlay.setData(busLineResult,MainActivity.this);
要注意这两个信息。setData()方法也是该BusLineOverlay类的一个方法。

/**
* 公交信息查询结果监听器, busLineSearch
*/
OnGetBusLineSearchResultListener busLineSearchResultListener = new OnGetBusLineSearchResultListener() {
/* 公交信息查询结果回调函数
* 参数:
*result - 公交信息查询结果
*/
@Override
public void onGetBusLineResult(BusLineResult busLineResult) {
if (busLineResult.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(MainActivity.this, "未找到结果",
Toast.LENGTH_SHORT).show();
} else {
mBaiduMap.clear();
// 用于显示一条公交详情结果的Overlay
BusLineOverlay overlay = new BusLineOverlay(mBaiduMap);
overlay.setData(busLineResult,MainActivity.this);//设置公交线数据
overlay.addToMap();// 将overlay添加到地图上
overlay.zoomToSpan();// 缩放地图,使所有overlay都在合适的视野范围内
mBaiduMap.setOnMarkerClickListener(overlay);
//传递参数到MyBuslineOverlay,该方法继承自 BusLineOverlay
buslineOverlay.setData(busLineResult,MainActivity.this);
// 公交线路名称
Toast.makeText(MainActivity.this,
busLineResult.getBusLineName(), Toast.LENGTH_SHORT);
Log.d("hello", "名字" + busLineResult.getBusLineName());
Log.d("hello", "首班车" + busLineResult.getStartTime());
Log.d("hello", "末班车" + busLineResult.getEndTime());
Log.d("hello", "分段信息" + busLineResult.getSteps());
// java.util.List<BusLineResult.BusStation> getStations()
// 获取所有公交站点信息
for(int i = 0; i< busLineResult.getStations().size();i++){
Log.d("hello", "公交信息"+ busLineResult.getStations().get(i).getTitle());
}
}
}
};

busLineResult就是查询结果,通过这个对象可以获取公交的所有信息。如下:

05-25 23:47:51.599 16308-16308/com.example.hang.myapplication D/hello: 名字32路(海事学院-万平口)
05-25 23:47:51.599 16308-16308/com.example.hang.myapplication D/hello: 首班车Thu Jan 01 06:30:00 GMT+08:00 1970
05-25 23:47:51.599 16308-16308/com.example.hang.myapplication D/hello: 末班车Thu Jan 01 18:00:00 GMT+08:00 1970
05-25 23:47:51.599 16308-16308/com.example.hang.myapplication D/hello: 分段信息[com.baidu.mapapi.search.busline.BusLineResult$BusStep@30ee528]
05-25 23:47:51.599 16308-16308/com.example.hang.myapplication D/hello: 公交信息海事学院
05-25 23:47:51.599 16308-16308/com.example.hang.myapplication D/hello: 公交信息外国语职业学院
05-25 23:47:51.599 16308-16308/com.example.hang.myapplication D/hello: 公交信息职业技术学院
05-25 23:47:51.599 16308-16308/com.example.hang.myapplication D/hello: 公交信息济宁医学院西门
05-25 23:47:51.599 16308-16308/com.example.hang.myapplication D/hello: 公交信息济宁医学院
05-25 23:47:51.599 16308-16308/com.example.hang.myapplication D/hello: 公交信息公交三公司
05-25 23:47:51.599 16308-16308/com.example.hang.myapplication D/hello: 公交信息外国语学校
05-25 23:47:51.599 16308-16308/com.example.hang.myapplication D/hello: 公交信息大学科技园管委
05-25 23:47:51.599 16308-16308/com.example.hang.myapplication D/hello: 公交信息曲师大
05-25 23:47:51.599 16308-16308/com.example.hang.myapplication D/hello: 公交信息山体
05-25 23:47:51.599 16308-16308/com.example.hang.myapplication D/hello: 公交信息山体南门
05-25 23:47:51.599 16308-16308/com.example.hang.myapplication D/hello: 公交信息市气象局
05-25 23:47:51.599 16308-16308/com.example.hang.myapplication D/hello: 公交信息市交通局
05-25 23:47:51.599 16308-16308/com.example.hang.myapplication D/hello: 公交信息都市花园
05-25 23:47:51.599 16308-16308/com.example.hang.myapplication D/hello: 公交信息四季圣园北区
05-25 23:47:51.599 16308-16308/com.example.hang.myapplication D/hello: 公交信息四季圣园
05-25 23:47:51.599 16308-16308/com.example.hang.myapplication D/hello: 公交信息太阳广场
05-25 23:47:51.599 16308-16308/com.example.hang.myapplication D/hello: 公交信息淄博路东口
05-25 23:47:51.599 16308-16308/com.example.hang.myapplication D/hello: 公交信息植物园西门
05-25 23:47:51.599 16308-16308/com.example.hang.myapplication D/hello: 公交信息植物园
05-25 23:47:51.599 16308-16308/com.example.hang.myapplication D/hello: 公交信息城市规划展览馆
05-25 23:47:51.599 16308-16308/com.example.hang.myapplication D/hello: 公交信息万平口

这部分代码也会在地图中显示路线信息:如下

4.可是现在没法点击地图中的站点信息显示啊。。。上面说导入的overlayutil包里面有一个

class BusLineOverlay extends OverlayManager 

我们只需要修改里面的一份方法就可以了。该方法里面还有一个 onBusStationClick()方法,站点点击操作只需要在这里面修改。
/**
* 覆写此方法以改变默认点击行为
*
* @param index
* 被点击的站点在
* {@link com.baidu.mapapi.search.busline.BusLineResult#getStations()}
* 中的索引
* @return 是否处理了该点击事件
*/
public boolean onBusStationClick(int index) {
if (mBusLineResult.getStations() != null
&& mBusLineResult.getStations().get(index) != null) {
// 获取 站点位置坐标
//newLatLng(LatLng latLng)设置地图新中心点
MainActivity.mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newLatLng(mBusLineResult
.getStations().get(index).getLocation())); Toast.makeText(context, mBusLineResult.getStations()
.get(index).getTitle(),Toast.LENGTH_SHORT).show(); }
return false;
}

5.该类还有一个setData()方法,因为我需要context参数用于Toast信息,所以修改了该类的方法,只不过增加了一个参数的传递。

/**
* 设置公交线数据
*
* @param result
* 公交线路结果数据
*/
public void setData(BusLineResult result,Context context) {
this.mBusLineResult = result;
this.context =context; }

这样,点击地图中的站点就会Toast该站点相关信息,并且把点击的站点设置为地图中心。

BaiduMap开发,获取公交站点信息。的更多相关文章

  1. NET Core开发-获取所有注入(DI)服务

    NET Core开发-获取所有注入(DI)服务 获取ASP.NET Core中所有注入(DI)服务,在ASP.NET Core中加入了Dependency Injection依赖注入. 我们在Cont ...

  2. android开发获取网络状态,wifi,wap,2g,3g.工具类(一)

    android开发获取网络状态整理: package com.gzcivil.utils; import android.content.Context; import android.net.Con ...

  3. 转:微信开发获取地理位置实例(java,非常详细,附工程源码)

    微信开发获取地理位置实例(java,非常详细,附工程源码)   在本篇博客之前,博主已经写了4篇关于微信相关文章,其中三篇是本文基础: 1.微信开发之入门教程,该文章详细讲解了企业号体验号免费申请与一 ...

  4. 微信js-sdk开发获取签名和获取地理位置接口示例

    ###微信js-sdk开发获取签名和获取地理位置接口示例 前言:在做微信公众号开发时需要获取用户的地理位置信息,之前通过高德或者百度.腾讯等地图的api时发现经常获取不到,毕竟第三方的东西,后来改为采 ...

  5. android笔记---百度地图api应用 (二) 获取公交路线的详细信息

    package com.example.bdtest; import com.baidu.mapapi.MKEvent; import com.baidu.mapapi.MKPlanNode; imp ...

  6. NX二次开发-获取WCS坐标系的原点坐标和矩阵标识

    函数:UF_CSYS_ask_csys_info() 函数说明:获取工作坐标系对象的标识符. 用法: #include <uf.h> #include <uf_csys.h> ...

  7. NX二次开发-获取WCS标识

    函数:UF_CSYS_ask_wcs() 函数说明:获取工作坐标系对象的标识. 用法: 1 #include <uf.h> 2 #include <uf_csys.h> 3 e ...

  8. 使用百度地图api接口获取公交地图路线和车站

    需要在页面文件中引用百度的js @*<script type="text/javascript" src="http://api.map.baidu.com/api ...

  9. iOS 开发获取唯一标识

    在做流量精灵的时候有这样一个需求,帐户默认需要取手机的imsi 信息.这就有一个好处,即便用户删除我们的应用后从新下载,下次进入时他们还会以同样的身份登陆,并且获得原先纪录.这样不仅对于开发公司人员来 ...

随机推荐

  1. 庖丁解牛-----Live555源码彻底解密(RTP打包)

    本文主要讲解live555的服务端RTP打包流程,根据MediaServer讲解RTP的打包流程,所以大家看这篇文章时,先看看下面这个链接的内容; 庖丁解牛-----Live555源码彻底解密(根据M ...

  2. win32 摄像头捕获系统vfw

    //win32 摄像头捕获系统vfw //  VideoRecord.h ///  用于定义一些资源ID #include "resource.h" //#define EXIT  ...

  3. jQuery点击div其他地方隐藏div

    $(document).bind("click",function(e){ var target = $(e.target); ){ $("#regionlist&quo ...

  4. javascript中常用数组函数

    1.split方法——通过分隔符,将字符串分割,导出字符数组 常用于:分割IP地址,分割文件路径(上传文件时)等等 <!DOCTYPE html PUBLIC "-//W3C//DTD ...

  5. MySQL基础之第7章 索引

    第7章 索引 MySQL中,所有的数据类型都可以被索引,包括普通索引,唯一性索引,全文索引,单列索引,多列索引和空间索引等. 7.1.索引简介 7.1.1.索引的含义和特点 BTREE索引,HASH索 ...

  6. redis 和 bloom filter

    今天打算使用redis 的bitset搞一个 bloom filter, 这样的好处是可以节省内存,坏处是可能在会有一些数据因为提示重复而无法保存. bloom filter 的大体原理就是通过不同的 ...

  7. Tour

    题意: 给n个点的坐标,求形成的最短的闭合回路. 分析: 经典问题,dp[i][j]表示有1-i点再由j回到1点的最短距离,i点有两种情况,在去的路径上 dp[i][j]=min(dp[i][j],d ...

  8. 通过库函数API和C代码中嵌入汇编代码剖析系统调用的工作机制

    作者:吴乐 山东师范大学<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 本次实验的主要内容就是分别采用A ...

  9. 怎么用PHP在HTML中生成PDF文件

    原文:Generate PDF from html using PHP 译文:使用PHP在html中生成PDF 译者:dwqs 利用PHP编码生成PDF文件是一个非常耗时的工作.在早期,开发者使用PH ...

  10. win7旗舰版通知windows不是正版副本解决方法

    原文转载http://www.cnblogs.com/simple_666/archive/2013/04/13/win7%E6%97%97%E8%88%B0%E7%89%88%E9%80%9A%E7 ...