百度地图开发之【公交信息检索】

上次我们一块研究下了最基本的POI检索,今天我们来看下,个人觉得比较有用的公交线路检索。

下面我们看下这个类中的方法

程序包 com.baidu.mapapi.search.busline

BusLineResult
公共交通信息查询结果
BusLineResult.BusStation
公交站点信息
BusLineResult.BusStep
公交路线分段信息
BusLineSearch
城市公交信息(包含地铁信息)查询 该接口用于查询整条公交线路信息 公交换乘路线查询请参看 RoutePlanSearch
BusLineSearchOption
城市公交信息查询参数

>>usLineSearch

void destroy()

释放检索对象资源

static BusLineSearch newInstance()

获取一个新的检索实例

boolean searchBusLine(BusLineSearchOption option)

公交检索入口

void setOnGetBusLineSearchResultListener(OnGetBusLineSearchResultListener listener)

设置公交详情检索结果监听者

>>BusLineSearchOption 参数如下

BusLineSearchOption city(java.lang.String city)

设置查询城市

BusLineSearchOption uid(java.lang.String uid)

设置公交路线uid.

结合POI搜索完成今天的例子

xml文件依旧仅仅包含一个listview

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".IndexActivity" >

    <ListView
        android:id="@+id/mylistView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>
package com.flyou.hellomap;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.search.busline.BusLineResult;
import com.baidu.mapapi.search.busline.BusLineResult.BusStation;
import com.baidu.mapapi.search.busline.BusLineSearch;
import com.baidu.mapapi.search.busline.BusLineSearchOption;
import com.baidu.mapapi.search.busline.OnGetBusLineSearchResultListener;
import com.baidu.mapapi.search.core.CityInfo;
import com.baidu.mapapi.search.core.PoiInfo;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;
import com.baidu.mapapi.search.poi.PoiCitySearchOption;
import com.baidu.mapapi.search.poi.PoiDetailResult;
import com.baidu.mapapi.search.poi.PoiResult;
import com.baidu.mapapi.search.poi.PoiSearch;

public class BusMapActivity extends Activity {
  private int totalpages = 0;
  private ListView listView = null;
  private PoiSearch poiSearch;
  private int currentPage = 0;
  ArrayAdapter<String> adapter = null;
  protected String busLineId;
 private  BusLineSearch buslineSearch ;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 在使用SDK各组件之前初始化context信息,传入ApplicationContext
    // 注意该方法要再setContentView方法之前实现
    SDKInitializer.initialize(getApplicationContext());

    setContentView(R.layout.activity_index);

    listView = (ListView) findViewById(R.id.mylistView);

    // 第一步,创建POI检索实例
    poiSearch = PoiSearch.newInstance();
    // 第三步,设置POI检索监听者;
    poiSearch.setOnGetPoiSearchResultListener(poiListener);

    // 第一步,创建Busline检索实例
    buslineSearch = BusLineSearch.newInstance();
    // 第三步,设置<span style="font-family: Arial, Helvetica, sans-serif;">Busline</span><span style="font-family: Arial, Helvetica, sans-serif;">检索监听者;</span>
    buslineSearch.setOnGetBusLineSearchResultListener(busLineListener);

  }
 <span style="color:#ff0000;"> OnGetBusLineSearchResultListener busLineListener =new OnGetBusLineSearchResultListener() {

    @Override
    public void onGetBusLineResult(BusLineResult result) {
      String title;
      List<BusStation> stations = result.getStations();
      List<String> datas=new ArrayList<String>();
      for (BusStation busStation : stations) {
        title = busStation.getTitle();
        datas.add(title);
      }</span>

      listView.setAdapter(new ArrayAdapter<String>(BusMapActivity.this, android.R.layout.simple_list_item_1, datas));
    }
  };
  // 第二步,创建POI检索监听者;
  OnGetPoiSearchResultListener poiListener = new OnGetPoiSearchResultListener() {

    public void onGetPoiResult(PoiResult result) {
      // 获取POI检索结果
      if (result == null || result.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {
        Toast.makeText(BusMapActivity.this, "未找到结果", Toast.LENGTH_LONG).show();
        return;
      }
      if (result.error == SearchResult.ERRORNO.NO_ERROR) {
        List<PoiInfo> allPoi = result.getAllPoi();
        totalpages = result.getTotalPageNum();

        String[] datas = new String[10];
        //遍历所有POI,找到类型为公交线路的POI
       <span style="color:#ff0000;"> for (PoiInfo poi : result.getAllPoi()) {
            if (poi.type == PoiInfo.POITYPE.BUS_LINE ||poi.type == PoiInfo.POITYPE.SUBWAY_LINE) {
                //说明该条POI为公交信息,获取该条POI的UID
                busLineId = poi.uid;
                break;
            }
        }

        //如下代码为发起检索代码,定义监听者和设置监听器的方法与POI中的类似
        buslineSearch  .searchBusLine((new BusLineSearchOption()
             .city("开封")
             .uid(busLineId)));</span>
      }
      if (result.error == SearchResult.ERRORNO.AMBIGUOUS_KEYWORD) {

        // 当输入关键字在本市没有找到,但在其他城市找到时,返回包含该关键字信息的城市列表
        String strInfo = "在";
        for (CityInfo cityInfo : result.getSuggestCityList()) {
          strInfo += cityInfo.city;
          strInfo += ",";
        }
        strInfo += "找到结果";
        Toast.makeText(BusMapActivity.this, strInfo, Toast.LENGTH_LONG).show();
      }
    }

    public void onGetPoiDetailResult(PoiDetailResult result) {
      // 获取Place详情页检索结果

    }
  };

  @Override
  protected void onDestroy() {
    super.onDestroy();
    // 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
    poiSearch.destroy();
  }

  @Override
  protected void onResume() {
    super.onResume();
    // 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理

  }

  @Override
  protected void onPause() {
    super.onPause();
    // 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理

  }

  @Override
  public boolean onKeyDown(int keyCode, KeyEvent event) {

    switch (keyCode) {
      case KeyEvent.KEYCODE_MENU:
        /**
         * 范围检索 // 这是范围 LatLngBounds.Builder b = new LatLngBounds.Builder();
         * b.include(new LatLng(39.976446, 116.320331)); b.include(new
         * LatLng(39.900766, 116.32838)); b.include(new LatLng(39.910065,
         * 116.491081)); b.include(new LatLng(39.976004, 116.475558));
         * LatLngBounds build = b.build(); // 第四步,发起检索请求;
         * poiSearch.searchInBound(new
         * PoiBoundSearchOption().bound(build).keyword
         * ("美食").pageNum(currentPage));
         */

      <span style="color:#ff0000;">    poiSearch.searchInCity((new
         PoiCitySearchOption()).city("开封").keyword(
          "33").pageNum(currentPage));</span>

        /**
         * poiSearch.searchNearby(new PoiNearbySearchOption() .keyword("大学")
         * .location(new LatLng(34.82336,114.31496)) .radius(3000)
         * );//可以为定位的坐标也可自己制定
         */
        currentPage++;
        if (currentPage == totalpages) {
          currentPage = 0;
        }
        break;

    }
    return super.onKeyDown(keyCode, event);
  }
}

运行结果为开封市33路的线路

下图为百度搜索的结果

时间: 2024-11-06 17:23:14

百度地图开发之【公交信息检索】的相关文章

android百度地图开发之自动定位所在位置与固定位置进行驾车,步行,公交路线搜索

最近跟着百度地图API学地图开发,先是学了路径搜索,对于已知坐标的两点进行驾车.公交.步行三种路径的搜索(公交路径运行没效果,待学习中),后来又 学了定位功能,能够获取到自己所在位置的经纬度,但当将两者合起来先自动获取自己所在位置的经纬度然后与固定地点进行路径搜索时却弄不出来了,因为刚开始 写的两者在两个类中总是取不到经纬度值,后来将两者写到同一个类中去了,终于取到经纬度值了,也运行出来了.需要 在 BDLocationListener的onReceiveLocation里获取到经纬度值,因为已

[android] 百度地图开发 (三).定位当前位置及getLastKnownLocation获取location总为空问题

       前一篇百度地图开发讲述"(二).定位城市位置和城市POI搜索",主要通过监听对象MKSearchListener类实现城市兴趣点POI(Point of Interest)搜索.该篇讲述定位当前自己的位置及使用getLastKnownLocation获取location总时为空值的问题. 一. 定位当前位置的原理及实现       定位当前位置可以通过LBS(Location Based Service,基于位置的服务),主要工作原理是利用无线网络Network或GPS定

[android] 百度地图开发 (二).定位城市位置和城市POI搜索

一. 百度地图城市定位和POI搜索知识       上一篇文章"百度地图开发(一)"中讲述了如何申请百度APIKey及解决显示空白网格的问题.该篇文章主要讲述如何定位城市位置.定位自己的位置和进行城市兴趣点POI(Point of Interest)搜索.那么如何在百度地图上定位某一个位置呢?       通过类GeoPoint可以定义经纬度,它存放着纬度值和经度值,通过getLastKnownLocation()方法可以获取Location对象,再定位经纬度设置其为地图中心即可显示当

[android] 百度地图开发 (两).所在地的城市定位和城市POI搜索

一个. 百度地图城市位置和POI搜索知识       上一篇文章"百度地图开发(一)"中讲述了怎样申请百度APIKey及解决显示空白网格的问题.该篇文章主要讲述怎样定位城市位置.定位自己的位置和进行城市兴趣点POI(Point of Interest)搜索.那么怎样在百度地图上定位某一个位置呢?       通过类GeoPoint能够定义经纬度,它存放着纬度值和经度值,通过getLastKnownLocation()方法能够获取Location对象,再定位经纬度设置其为地图中心就可以显

Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图

标签: Android百度地图API Key  分类: Android 百度地图开发(2)  最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地图入手,其实他们的用法都差不多,本篇文章就带领大家在自己的Android项目中加入百度地图的功能,接下来我会写一系列关于百度地图的文章,欢迎大家到时候关注!   一 申请API key 在使用百度地图之前,我们必须去申请一个百度地图的API key,申请地址http://lbsyun.baidu.com/a

android 百度地图开发实例(转载)

因为在我的寝室google基站定位返回的数据总是为空,所以换成百度地图,发现百度地图开发起来非常方便,提供了许多有用的工具,地图的加载速度也比google地图快许多. 为了加强记忆,写一点android 百度地图开发常用的方法. 1初始化 MapManager mBMapMan = new BMapManager(this);boolean isSuccess = mBMapMan.init(this.mStrKey, new MyGeneralListener()); isSuccess 的值

[安卓][地图] 1、高德或百度地图开发第一步(高手跳过)

>_<" 开发地图应用必须用地图供应商提供的API,这里我用了百度地图和高德地图,其流程基本上完全相似.关键点有三个: 一.申请KEY 二.下载提供商提供的API等资源 三.在工程里加载库 >_<" 具体详细过程可以参看他们的开发指南: 百度地图开发指南:http://developer.baidu.com/map/index.php?title=android-locsdk 高德地图开发指南:http://lbs.amap.com/api/android-sd

Android studio 百度地图开发(5)查询周边服务(加油站)

email:[email protected] 开发环境:win7 64位,Android Studio,请注意是Android Studio,使用的导航SDK版本:3.1.0. 百度地图应用(1):Android studio 百度地图开发(1)配置工程.显示地图 百度地图应用(2):Android studio 百度地图开发(2)地图定位 百度地图应用(3):Android studio 百度地图开发(3)地图导航 百度地图应用(4):Android studio 百度地图开发(4)触摸选点

百度地图开发(二)之添加覆盖物 + 地理编码和反地理编码

之前写过一篇关于百度地图开发的blog,主要介绍了百度地图的基本地图的显示. 详见:Android百度地图开发(一)之初体验 下面来看一下地图上覆盖物的添加,以及地理编码和反地理编码. 添加覆盖物 在地图上添加覆盖物,一般需要以下几个步骤: 1. 定义坐标点,有可能是一个,有可能是多个(比如:多边形覆盖物). 2. 构造OverlayOptions(地图覆盖物选型基类). 3. 在地图上添加覆盖物. 4. 添加相应的监听事件. 在API中可以看到,BaiDuMap类中有一个方法: 这个方法就是用

Android 百度地图开发之一(Hello BaiDu Map)

之前也接触过百度地图的开发,但那是在网上找的案例或代码,而且是比较老的版本.打算重新学习一下百度地图的开发. 本次使用的百度地图的版本是 Android SDK v3.0.0 本篇文章主要讲述百度地图开发的准备和地图的成功显示即可. 首先建议大家先申请注册一个百度账号. 申请密钥(要想实现百度地图的相关服务必须申请密钥),网址:http://lbsyun.baidu.com/apiconsole/key 需要注意的是:应用名称不要重复或无效,安全码的输入详情请查看:http://develope