您的位置:首页 > 移动开发 > Android开发

【“零起点”--百度地图手机SDK】如何查询公交线路?如北京的104路

2012-06-27 15:30 399 查看
摘要:想要查询北京市的108路公交车经过什么地方?这一章将讲解公交导航和查询的接口。----------------------------------------------------------------------系列阅读:
1、【百度地图-安卓SDK】从头开始写android程序
http://www.cnblogs.com/milkmap/archive/2011/11/25/2263475.html
2、【“零起点”--百度地图手机SDK】如何创建一张地图
http://www.cnblogs.com/milkmap/archive/2012/05/11/2496526.html
3、【“零起点”--百度地图手机SDK】如何使用离线地图?
http://www.cnblogs.com/milkmap/archive/2012/05/21/2511928.html4、【“零起点”--百度地图手机SDK】如何添加地图图层+按钮事件+水平垂直布局?http://www.cnblogs.com/milkmap/archive/2012/05/25/2518454.html5、【“零起点”--百度地图手机SDK】如何进行三种POI搜索?http://www.cnblogs.com/milkmap/archive/2012/06/05/2536764.html
-----------------------------------------------------------------------一、创建一张地图参考教程2:【“零起点”--百度地图手机SDK】如何创建一张地图
http://www.cnblogs.com/milkmap/archive/2012/05/11/2496526.html 步骤温习:1、创建YingTransitActivity的安卓工程。2、创建libs文件夹,放入jar文件。创建libs\armeabi文件夹,放入so文件。工程属性里增加jar。3、修改如下四个文件,TransitActivity.java是展示地图的主程序;transit.Manfest里增加了使用权限和安卓版本支持;main.xml里增加了地图控件;strings.xml里可以修改标题和文本控件的文字内容。4、真机运行。 二、查询104关键词分为三步:第一、需要查询104关键词;第二、回调函数里判断POI结果为公交线路的,并返回uid;第三、根据uid查询公交线路详情。 1、查询104关键词因为是查询整个城市内的公交线路,所以使用城市内查询接口。在activity里先申明变量
MKSearch myMKSearch = null;    //POI搜索变量申明
再在oncreate函数里,对其进行初始化
myMKSearch = new MKSearch();  //初始化
最后进行POI查询
myMKSearch.poiSearchInCity("北京", "104");
2、回调函数里得到公交线路的uidPOI查询的结果有以下几种类型:poi类型,0:普通点,1:公交站,2:公交线路,3:地铁站,4:地铁线路在POI检索的回调函数onGetPoiResult里,判断POI查询的结果类型,只返回公交线路的。
// 找到公交路线poi node
MKPoiInfo curPoi = null;
int totalPoiNum  = result.getNumPois();
for( int idx = 0; idx < totalPoiNum; idx++ ) {
curPoi = result.getPoi(idx);
if ( 2 == curPoi.ePoiType ) {
break;
}
}
然后在检索的回调函数onGetPoiResult里进行公交线路的查询:
myMKSearch.busLineSearch("北京", curPoi.uid);
3、使用uid查询公交线路 最后,只需要在公交线路的回调函数onGetBusDetailResult里,进行输出即可。
RouteOverlay routeOverlay = new RouteOverlay(YingTransitActivity.this, mMapView);
// 此处仅展示一个方案作为示例
routeOverlay.setData(result.getBusRoute());
mMapView.getOverlays().clear();
mMapView.getOverlays().add(routeOverlay);
mMapView.invalidate();

mMapView.getController().animateTo(result.getBusRoute().getStart());
三、注意事项查询语句,最好写在回调函数的后面。以保证程序不会异常,而造成关闭。
myMKSearch.init(mBMapMan, new MKSearchListener(){});  //回调函数myMKSearch.poiSearchInCity("北京", "104");    //POI查询
四、全部源代码:
package com.baidu.yingTransit;

import android.app.Activity;
import android.os.Bundle;

/** 引入import **/
import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.drawable.Drawable;
import android.location.Location;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.GeoPoint;
import com.baidu.mapapi.ItemizedOverlay;
import com.baidu.mapapi.LocationListener;
import com.baidu.mapapi.MKAddrInfo;
import com.baidu.mapapi.MKBusLineResult;
import com.baidu.mapapi.MKDrivingRouteResult;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.MKLocationManager;
import com.baidu.mapapi.MKPlanNode;
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.MapController;
import com.baidu.mapapi.MapView;
import com.baidu.mapapi.MyLocationOverlay;
import com.baidu.mapapi.Overlay;
import com.baidu.mapapi.OverlayItem;
import com.baidu.mapapi.PoiOverlay;
import com.baidu.mapapi.RouteOverlay;
import com.baidu.mapapi.TransitOverlay;

public class YingTransitActivity extends MapActivity {

/** 申明变量 **/
BMapManager mBMapMan = null;
MapView mMapView = null;
MKSearch myMKSearch = null; //POI搜索变量申明

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

/** 创建地图 **/
mBMapMan = new BMapManager(getApplication());
mBMapMan.init("1713A92A7A0C854D1B8717670EF8B6CA75696567", null);
super.initMapActivity(mBMapMan);

mMapView = (MapView) findViewById(R.id.bmapsView);//地图控件,不添加的话,就不用写。
mMapView.setBuiltInZoomControls(true); //设置启用内置的缩放控件
MapController mMapController = mMapView.getController(); // 得到mMapView的控制权,可以用它控制和驱动平移和缩放
GeoPoint point = new GeoPoint((int) (39.915 * 1E6),
(int) (116.404 * 1E6)); //用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)
mMapController.setCenter(point); //设置地图中心点
mMapController.setZoom(12); //设置地图zoom级别

myMKSearch = new MKSearch(); //初始化

/** 判断是否有结果 **/
// if(myMKSearch == null)
// {
// Toast.makeText(this, "error", Toast.LENGTH_LONG).show();
// return;
// }
// Toast.makeText(this, "ok", Toast.LENGTH_LONG).show();

myMKSearch.init(mBMapMan, new MKSearchListener(){
@Override
public void onGetPoiResult(MKPoiResult result, int type, int error) {
// 错误号可参考MKEvent中的定义
if (error != 0 || result == null) {
Toast.makeText(YingTransitActivity.this, "抱歉,未找到结果", Toast.LENGTH_LONG).show();
return;
}

// 找到公交路线poi node MKPoiInfo curPoi = null; int totalPoiNum = result.getNumPois(); for( int idx = 0; idx < totalPoiNum; idx++ ) { curPoi = result.getPoi(idx); if ( 2 == curPoi.ePoiType ) { break; } }
myMKSearch.busLineSearch("北京", curPoi.uid);
}

public void onGetDrivingRouteResult(MKDrivingRouteResult res,
int error) {
}
public void onGetTransitRouteResult(MKTransitRouteResult res,
int error) {
}
public void onGetWalkingRouteResult(MKWalkingRouteResult res,
int error) {
}
public void onGetAddrResult(MKAddrInfo res, int error) {
}
public void onGetBusDetailResult(MKBusLineResult result, int error) {
if (error != 0 || result == null) {
Toast.makeText(YingTransitActivity.this, "抱歉,未找到结果", Toast.LENGTH_LONG).show();
return;
}

RouteOverlay routeOverlay = new RouteOverlay(YingTransitActivity.this, mMapView); // 此处仅展示一个方案作为示例 routeOverlay.setData(result.getBusRoute()); mMapView.getOverlays().clear(); mMapView.getOverlays().add(routeOverlay); mMapView.invalidate(); mMapView.getController().animateTo(result.getBusRoute().getStart());
}

@Override
public void onGetSuggestionResult(MKSuggestionResult result, int error) {
// TODO Auto-generated method stub
}

});

myMKSearch.poiSearchInCity("北京", "104"); //搜索104关键词。放在回调函数之后,以保证正确返回。
}

protected boolean isRouteDisplayed() {
return false;
}

/** 引入方法管理API **/
@Override
protected void onDestroy() {
if (mBMapMan != null) {
mBMapMan.destroy();
mBMapMan = null;
}
super.onDestroy();
}
@Override
protected void onPause() {
if (mBMapMan != null) {
mBMapMan.stop();
}
super.onPause();
}
@Override
protected void onResume() {
if (mBMapMan != null) {
mBMapMan.start();
}
super.onResume();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐