Android百度地图开发(五)公交线路详情搜索、多条线路显示
一、公交线路详情检索
获取公交线路的详情主要分来两步,1.获取公交线路的Uid,2.通过Uid获取公交线路详情。
1.获取公交线路的Uid:
/*
* 获得公交线路图的Uid,并且根据系Uid发起公交线路详情的检索
*
* @see
* com.baidu.mapapi.MKSearchListener#onGetPoiResult(com.baidu.mapapi
* .MKPoiResult, int, int)
*/
@Override
public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
if (arg0 == null || arg2 != 0) {
Toast.makeText(MainActivity.this, "未找到结果", 1);
return;
}
// 定义一个公交线路描述类
MKPoiInfo mkPoiInfo = null;
// 获得本次就爱你所的公交线路的总站点
int totalPoiNum = arg0.getNumPois();
for (int i = 0; i < totalPoiNum; i++) {
mkPoiInfo = arg0.getPoi(i);
if (mkPoiInfo.ePoiType == 2) {
break;
}
}
mkSearch.busLineSearch("开封", mkPoiInfo.uid);
}
2.获取公交线路详情:
/*
* 得到公交线路图的详情
*
* @see
* com.baidu.mapapi.MKSearchListener#onGetBusDetailResult(com.baidu.
* mapapi.MKBusLineResult, int)
*/
@Override
public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {
// TODO Auto-generated method stub
if (arg0 == null || arg1 != 0) {
Toast.makeText(MainActivity.this, "未找到结果", 1);
return;
}
RouteOverlay routeOverlay = new RouteOverlay(MainActivity.this,
mapView);
routeOverlay.setData(arg0.getBusRoute());// 获得公交线路 mapView.getOverlays().clear();// 清楚公交站点的标识
mapView.getOverlays().add(routeOverlay);
mapView.invalidate();
// 采用动画形式描述公交站点
mapView.getController().animateTo(arg0.getBusRoute().getStart());
}
查询时,只需提供城市名和线路
mkSearch.poiSearchInCity("开封", "3");
完整代码:
package com.arlen.android.baidumap08; import android.os.Bundle;
import android.view.Menu;
import android.widget.Toast; import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKAddrInfo;
import com.baidu.mapapi.MKBusLineResult;
import com.baidu.mapapi.MKDrivingRouteResult;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.MKPoiInfo;
import com.baidu.mapapi.MKPoiResult;
import com.baidu.mapapi.MKSearch;
import com.baidu.mapapi.MKSearchListener;
import com.baidu.mapapi.MKSuggestionResult;
import com.baidu.mapapi.MKTransitRouteResult;
import com.baidu.mapapi.MKWalkingRouteResult;
import com.baidu.mapapi.MapActivity;
import com.baidu.mapapi.MapView;
import com.baidu.mapapi.RouteOverlay; public class MainActivity extends MapActivity { private BMapManager bMapManager;
private MapView mapView;
private String key = "43D220AAB0DEC976D2EABC83CFC9EEE52BCCCA7A";
private MKSearch mkSearch; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); bMapManager = new BMapManager(MainActivity.this);
bMapManager.init(key, new MKGeneralListener() { @Override
public void onGetPermissionState(int arg0) {
// TODO Auto-generated method stub } @Override
public void onGetNetworkState(int arg0) {
// TODO Auto-generated method stub }
});
initMapActivity(bMapManager);
mapView = (MapView) findViewById(R.id.bmapView);
mkSearch = new MKSearch();
mkSearch.init(bMapManager, new MySearchListener()); mkSearch.poiSearchInCity("开封", "3");
} private class MySearchListener implements MKSearchListener { @Override
public void onGetAddrResult(MKAddrInfo arg0, int arg1) {
// TODO Auto-generated method stub } /*
* 得到公交线路图的详情
*
* @see
* com.baidu.mapapi.MKSearchListener#onGetBusDetailResult(com.baidu.
* mapapi.MKBusLineResult, int)
*/
@Override
public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {
// TODO Auto-generated method stub
if (arg0 == null || arg1 != 0) {
Toast.makeText(MainActivity.this, "未找到结果", 1);
return;
}
RouteOverlay routeOverlay = new RouteOverlay(MainActivity.this,
mapView);
routeOverlay.setData(arg0.getBusRoute());// 获得公交线路 mapView.getOverlays().clear();// 清楚公交站点的标识
mapView.getOverlays().add(routeOverlay);
mapView.invalidate();
// 采用动画形式描述公交站点
mapView.getController().animateTo(arg0.getBusRoute().getStart());
} @Override
public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {
// TODO Auto-generated method stub } @Override
public void onGetPoiDetailSearchResult(int arg0, int arg1) {
// TODO Auto-generated method stub } /*
* 获得公交线路图的Uid,并且根据系Uid发起公交线路详情的检索
*
* @see
* com.baidu.mapapi.MKSearchListener#onGetPoiResult(com.baidu.mapapi
* .MKPoiResult, int, int)
*/
@Override
public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
if (arg0 == null || arg2 != 0) {
Toast.makeText(MainActivity.this, "未找到结果", 1);
return;
}
// 定义一个公交线路描述类
MKPoiInfo mkPoiInfo = null;
// 获得本次就爱你所的公交线路的总站点
int totalPoiNum = arg0.getNumPois();
for (int i = 0; i < totalPoiNum; i++) {
mkPoiInfo = arg0.getPoi(i);
if (mkPoiInfo.ePoiType == 2) {
break;
}
}
mkSearch.busLineSearch("开封", mkPoiInfo.uid);
} @Override
public void onGetRGCShareUrlResult(String arg0, int arg1) {
// TODO Auto-generated method stub } @Override
public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {
// TODO Auto-generated method stub } @Override
public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {
// TODO Auto-generated method stub } @Override
public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {
// TODO Auto-generated method stub }
} @Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if (bMapManager != null) {
bMapManager.destroy();
bMapManager = null;
}
} @Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
if (bMapManager != null) {
bMapManager.start();
}
} @Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
if (bMapManager != null) {
bMapManager.stop();
}
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} @Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
} }
运行效果:
二、多条线路显示
在同一个地图上显示多条导航线路,也只需要分两步完成,
1.定义起始点个终点
start = new MKPlanNode();
start.pt = new GeoPoint((int) (39.915 * 1E6), (int) (116.404 * 1E6));
end = new MKPlanNode();
end.pt = new GeoPoint(40057031, 116307852); mkSearch.transitSearch("北京", start, end);
2.将所有的线路详情循环显示在地图上
@Override
public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {
// TODO Auto-generated method stub
if (arg0 == null) {
return;
}
int planNum = arg0.getNumPlan();// 获取所有的驾车路线
for (int i = 0; i < planNum; i++) {
TransitOverlay overlay = new TransitOverlay(MainActivity.this,
mapView);
overlay.setData(arg0.getPlan(i));
mapView.getOverlays().add(overlay);
}
mapView.invalidate();
mapView.getController().animateTo(arg0.getStart().pt);
}
运行效果:
Android百度地图开发(五)公交线路详情搜索、多条线路显示的更多相关文章
- Android百度地图开发(三)范围搜索
// 1.新建项目 将地图API添加进classpath中: 2.在activity_main.xml中添加一个MapView,用来显示地图: <LinearLayout xmlns:andro ...
- 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百度地图开发05之公交信息检索 + 路线规划
在上一篇blog中介绍过POI检索的使用,本篇blog主要介绍公交信息检索和线路规划的内容. 公交信息检索 实际上,公交信息检索与POI检索.在线建议检索非常相似,也是把你需要检索的信息发送给百度地图 ...
- android百度地图开发之自动定位所在位置与固定位置进行驾车,步行,公交路线搜索
最近跟着百度地图API学地图开发,先是学了路径搜索,对于已知坐标的两点进行驾车.公交.步行三种路径的搜索(公交路径运行没效果,待学习中),后来又 学了定位功能,能够获取到自己所在位置的经纬度,但当将两 ...
- Android百度地图开发(一)之初体验
转载请注明出处:http://blog.csdn.net/crazy1235/article/details/42614603 做关于位置或者定位的app的时候免不了使用地图功能,本人最近由于项目的需 ...
随机推荐
- Jenkins最佳实践
原文:http://www.cnblogs.com/itech/archive/2011/11/14/2248460.html Jenkins最佳实践,其实大部分对于其他的CI工具同样的适用: * J ...
- Java:字符串类String的功能介绍
在java中,字符串是一个比较常用的类,因为代码中基本上处理的很多数据都是字符串类型的,因此,掌握字符串类的具体用法显得很重要了. 它的主要功能有如下几种:获取.判断.转换.替换.切割.字串的获取.大 ...
- [转]C:int型指针
开源中国:http://my.oschina.net/lotte1699/blog/142538 网页快照:http://www.piaocafe.com/295977937/139381567037 ...
- WebDriverExtensionsByC#
测试工具//********************************************************************************************** ...
- URAL1204. Idempotents(扩展欧几里得)
1204 大体推推 会出来这个式子 x(x-1) = k*n;n = p*q ;x(x-1)%(p*q)==0; 因为p,q都为素数 那也就是说x和x-1中必定包含这两个数 而且一个里面只能有一个 不 ...
- 微信朋友圈如何同时分享(图片+文字) Android版
以下是:微信朋友圈SDK 分享图片的代码,但只能分享图片,不能分享文字,如何才能图片和文字同时分享?求各位大神指教! public class MainActivity extends Activit ...
- 用VS2005开发WinCE程序调试图文教程
一.WinCE 模拟器通过ActiveSync 6.1(即Windows Mobile设备中心)连接P 1.启动WinCE模拟器 命令行: start .\DeviceEmulator.exe WI ...
- php如何控制用户对图片的访问 PHP禁止图片盗链(转载)
把images目录设置成不充许http访问(把图片目录的:读取.目录浏览 两个权限去掉). 用一个PHP文件,直接用file函数读取这个图片.在这个PHP文件里进行权限控制. apache环境中,在你 ...
- HDU 3068 (Manacher) 最长回文
求一个字符串的最长子串,Manacher算法是一种O(n)的算法,很给力! s2[0] = '$',是避免在循环中对数组越界的检查. 老大的代码: http://www.cnblogs.com/Big ...
- HDU 4006 The kth great number【优先队列】
题意:输入n行,k,如果一行以I开头,那么插入x,如果以Q开头,则输出第k大的数 用优先队列来做,将队列的大小维护在k这么大,然后每次取队首元素就可以了 另外这个维护队列只有k个元素的时候需要注意一下 ...