博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【“零起点”--百度地图手机SDK】如何查询公交线路?如北京的104路
阅读量:6263 次
发布时间:2019-06-22

本文共 7831 字,大约阅读时间需要 26 分钟。

摘要:想要查询北京市的108路公交车经过什么地方?这一章将讲解公交导航和查询的接口。

----------------------------------------------------------------------

系列阅读:

1、【百度地图-安卓SDK】从头开始写android程序
 
2、【“零起点”--百度地图手机SDK】如何创建一张地图
 
3、【“零起点”--百度地图手机SDK】如何使用离线地图?

4、【“零起点”--百度地图手机SDK】如何添加地图图层+按钮事件+水平垂直布局?

5、【“零起点”--百度地图手机SDK】如何进行三种POI搜索?

 

-----------------------------------------------------------------------

一、创建一张地图

参考教程2:【“零起点”--百度地图手机SDK】如何创建一张地图

 

 

步骤温习:

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、回调函数里得到公交线路的uid

POI查询的结果有以下几种类型: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();    }    }

转载于:https://www.cnblogs.com/milkmap/archive/2012/06/27/2554843.html

你可能感兴趣的文章
用VR学习灾难逃生技巧,地震来了不再慌
查看>>
朱啸虎:区块链是伪风口的可能性大,任何创新都要经历死亡谷
查看>>
SQLAlchemy 1.3.1 发布,Python ORM 框架
查看>>
美国科学家训练AI,用路上车辆判断人们的政治立场
查看>>
全球约39亿人未接入互联网 中国互联网用户数达7.21亿
查看>>
美国移动运营商AT&T服务故障,导致大范围用户无法寻求紧急救助服
查看>>
Spring中基于AOP的@AspectJ
查看>>
AI+时尚的盛宴,FashionAI全球挑战赛进入复赛阶段
查看>>
mybatis系统学习(二)——使用基础mybatis代替原始jdbc
查看>>
Linux 网络编程之原始套接字
查看>>
【树莓派】Linux应用相关:自动删除n天前日志
查看>>
Azkaban Install and Schedule Job
查看>>
不仅是NRA球赛,手术也在VR直播了!
查看>>
android 空调遥控器——简单发送内容
查看>>
数字比较
查看>>
MS CRM 2011 Form与Web Resource在JScript中的相互调用
查看>>
Oracle下定时删除归档日志脚本
查看>>
thinkphp-删除delete函数
查看>>
SQL Server dbcc inputbuffer
查看>>
eclipse导入svn项目,项目却没有svn的标记
查看>>