BaiduMap开发,获取公交站点信息。
可能有些人会出现无法导入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开发,获取公交站点信息。的更多相关文章
- NET Core开发-获取所有注入(DI)服务
NET Core开发-获取所有注入(DI)服务 获取ASP.NET Core中所有注入(DI)服务,在ASP.NET Core中加入了Dependency Injection依赖注入. 我们在Cont ...
- android开发获取网络状态,wifi,wap,2g,3g.工具类(一)
android开发获取网络状态整理: package com.gzcivil.utils; import android.content.Context; import android.net.Con ...
- 转:微信开发获取地理位置实例(java,非常详细,附工程源码)
微信开发获取地理位置实例(java,非常详细,附工程源码) 在本篇博客之前,博主已经写了4篇关于微信相关文章,其中三篇是本文基础: 1.微信开发之入门教程,该文章详细讲解了企业号体验号免费申请与一 ...
- 微信js-sdk开发获取签名和获取地理位置接口示例
###微信js-sdk开发获取签名和获取地理位置接口示例 前言:在做微信公众号开发时需要获取用户的地理位置信息,之前通过高德或者百度.腾讯等地图的api时发现经常获取不到,毕竟第三方的东西,后来改为采 ...
- android笔记---百度地图api应用 (二) 获取公交路线的详细信息
package com.example.bdtest; import com.baidu.mapapi.MKEvent; import com.baidu.mapapi.MKPlanNode; imp ...
- NX二次开发-获取WCS坐标系的原点坐标和矩阵标识
函数:UF_CSYS_ask_csys_info() 函数说明:获取工作坐标系对象的标识符. 用法: #include <uf.h> #include <uf_csys.h> ...
- NX二次开发-获取WCS标识
函数:UF_CSYS_ask_wcs() 函数说明:获取工作坐标系对象的标识. 用法: 1 #include <uf.h> 2 #include <uf_csys.h> 3 e ...
- 使用百度地图api接口获取公交地图路线和车站
需要在页面文件中引用百度的js @*<script type="text/javascript" src="http://api.map.baidu.com/api ...
- iOS 开发获取唯一标识
在做流量精灵的时候有这样一个需求,帐户默认需要取手机的imsi 信息.这就有一个好处,即便用户删除我们的应用后从新下载,下次进入时他们还会以同样的身份登陆,并且获得原先纪录.这样不仅对于开发公司人员来 ...
随机推荐
- 【jQuery】鼠标接触按钮后改变图片
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- 【转 iOS 8 Auto Layout界面自动布局系列2-使用Xcode的Interface Builder添加布局约束
原文网址:http://blog.csdn.net/pucker/article/details/41843511 上一篇文章<iOS 8界面自动布局系列-1>简要介绍了iOS界面布局方式 ...
- ByteBuffer用法小结
在NIO中,数据的读写操作始终是与缓冲区相关联的.读取时信道(SocketChannel)将数据读入缓冲区,写入时首先要将发送的数据按顺序填入缓冲区.缓冲区是定长的,基本上它只是一个列表,它的所有元素 ...
- 【转】终于解决了Apache乱码问题
之前开放了一个空间,给网友提供电台节目音频下载.由于多年节目的文件数量甚多,且分类没有特定格式,图省事,没有制作网页提供分类下载,而是直接利用Apache的目录浏览功能,简单直观. 不过,所在的美国服 ...
- hdu 2473 Junk-Mail Filter(并查集_虚节点)2008 Asia Regional Hangzhou
感觉有些难的题,刚开始就想到了设立虚节点,但是实现总是出错,因为每次设立了虚节点之后,无法将原节点和虚节点分开,导致虚节点根本无意义. 以上纯属废话,可以忽略…… 题意—— 给定n个点(0, 1, 2 ...
- Oracle 存储过程的创建,及触发器调用存储过程
一.创建存储过程 1.存储过程写法 create or replace procedure HVM_BYQ_TJ --变压器统计信息--->入库 (id in number) as begin ...
- golang学习之指针、内存分配
func pointer_test() { //空指针,输出为nil var p *int fmt.Printf("p: %v\n", p) //指向局部变量,变量值初始为0 va ...
- useful-scripts
最近在github看到关于一些比较好的java相关脚本.vcs脚本.shell脚本.怕以后忘记了,在此做个备注. 原链接为:https://github.com/oldratlee/useful-sc ...
- http://blog.csdn.net/jbb0403/article/details/42102527
http://blog.csdn.net/jbb0403/article/details/42102527
- Fitnesse启动参数与配置
Fitnesse最新版20140630默认启动后,网页风格与 fitnesse.org 的Bootstrap风格完全不一致. 需要配置plugins.properties中的Theme=bootstr ...