zoukankan      html  css  js  c++  java
  • 【Android】3.14 公交线路查询功能

    分类:C#、Android、VS2015、百度地图应用; 创建日期:2016-02-04

    一、简介

    利用BusLineSearch方法可查询公交线路的详情信息。

    二、运行截图

    简介:介绍查询公交线路功能

    (1)点击“开始”按钮可查询公交线路;

    (2)搜索出公交线路后点击“下一条”按钮可查询该线路的反方向公交线路;

    本示例运行截图如下:

    image

    三、设计步骤

    1、添加demo14_busLine.xml文件

    在layout文件夹下添加该文件,然后将代码改为下面的内容:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
    
        <LinearLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="在" />
    
            <EditText
                android:id="@+id/city"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="北京" />
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="市内找" />
    
            <EditText
                android:id="@+id/searchkey"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="717" />
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="公交车" />
    
            <LinearLayout
                xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal" >
    
                <Button
                    android:id="@+id/search"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="2dip"
                    android:layout_marginRight="2dip"
                    android:layout_weight="1"
                    android:background="@drawable/button_style"
                    android:text="开始" />
    
                <Button
                    android:id="@+id/nextline"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="2dip"
                    android:layout_marginRight="2dip"
                    android:layout_weight="1"
                    android:background="@drawable/button_style"
                    android:text="下一条" />
            </LinearLayout>
        </LinearLayout>
    
        <RelativeLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
    
            <fragment
                android:id="@+id/bmapView"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                class="com.baidu.mapapi.map.TextureMapFragment"
                android:clickable="true" />
    
            <LinearLayout
                xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_alignWithParentIfMissing="false"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="false"
                android:layout_marginBottom="10dip" >
    
                <Button
                    android:id="@+id/pre"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:layout_marginLeft="2dip"
                    android:layout_marginRight="2dip"
                    android:layout_weight="1.0"
                    android:background="@drawable/pre_" />
    
                <Button
                    android:id="@+id/next"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:layout_marginLeft="2dip"
                    android:layout_marginRight="2dip"
                    android:layout_weight="1.0"
                    android:background="@drawable/next_" />
            </LinearLayout>
        </RelativeLayout>
    
    </LinearLayout>

    2、添加Demo14BusLine.cs文件

    在SrcSdkDemos文件夹下添加该文件,然后将代码改为下面的内容:

    using Android.App;
    using Android.Content.PM;
    using Android.OS;
    using Android.Views;
    using Android.Widget;
    using Android.Support.V4.App;
    using Com.Baidu.Mapapi.Map;
    using Com.Baidu.Mapapi.Model;
    using Com.Baidu.Mapapi.Search.Busline;
    using Com.Baidu.Mapapi.Search.Core;
    using Com.Baidu.Mapapi.Search.Poi;
    using System.Collections.Generic;
    using BdMapV371Demos.SrcOverlayUtil;
    
    namespace BdMapV371Demos.SrcSdkDemos
    {
        /// <summary>
        /// 此demo用来展示如何进行公交线路详情检索,并使用RouteOverlay在地图上绘制 同时展示如何浏览路线节点并弹出泡泡
        /// </summary>
        [Activity(Label = "@string/demo_name_bus",
            ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.KeyboardHidden,
            ScreenOrientation = ScreenOrientation.Sensor)]
        public class Demo14BusLineSearch : FragmentActivity,
            IOnGetPoiSearchResultListener,
            IOnGetBusLineSearchResultListener,
            BaiduMap.IOnMapClickListener
        {
            private Button mBtnPre = null;// 上一个节点
            private Button mBtnNext = null;// 下一个节点
            private int nodeIndex = -2;// 节点索引,供浏览节点时使用
            private BusLineResult route = null;// 保存驾车/步行路线数据的变量,供浏览节点时使用
            private IList<string> busLineIDList = null;
            private int busLineIndex = 0;
    
            // 搜索相关
            private PoiSearch mSearch = null; // 搜索模块,也可去掉地图模块独立使用
            private BusLineSearch mBusLineSearch = null;
    
            private BaiduMap mBaiduMap = null;
            BusLineOverlay overlay;//公交路线绘制对象
    
            protected override void OnCreate(Bundle savedInstanceState)
            {
                base.OnCreate(savedInstanceState);
                SetContentView(Resource.Layout.demo14_busline);
    
                mBtnPre = FindViewById<Button>(Resource.Id.pre);
                mBtnPre.Click += delegate { NodeClick(Resource.Id.pre); };
    
                mBtnNext = FindViewById<Button>(Resource.Id.next);
                mBtnPre.Click += delegate { NodeClick(Resource.Id.next); };
    
                mBtnPre.Visibility = ViewStates.Invisible;
                mBtnNext.Visibility = ViewStates.Invisible;
                mBaiduMap = FragmentManager.FindFragmentById<TextureMapFragment>(Resource.Id.bmapView).BaiduMap;
                mBaiduMap.SetOnMapClickListener(this);
    
                mSearch = PoiSearch.NewInstance();
                mSearch.SetOnGetPoiSearchResultListener(this);
    
                mBusLineSearch = BusLineSearch.NewInstance();
                mBusLineSearch.SetOnGetBusLineSearchResultListener(this);
    
                busLineIDList = new List<string>();
                overlay = new BusLineOverlay(mBaiduMap);
                mBaiduMap.SetOnMarkerClickListener(overlay);
    
                //【开始】按钮
                var btnSearch = FindViewById<Button>(Resource.Id.search);
                btnSearch.Click += delegate
                {
                    busLineIDList.Clear();
                    busLineIndex = 0;
                    mBtnPre.Visibility = ViewStates.Invisible;
                    mBtnNext.Visibility = ViewStates.Invisible;
                    EditText editCity = FindViewById<EditText>(Resource.Id.city);
                    EditText editSearchKey = FindViewById<EditText>(Resource.Id.searchkey);
                    //// 发起poi检索,从得到所有poi中找到公交线路类型的poi,再使用该poi的uid进行公交详情搜索
                    mSearch.SearchInCity(new PoiCitySearchOption()
                        .City(editCity.Text).Keyword(editSearchKey.Text));
                };
    
                //【下一条】按钮
                var btnNextline = FindViewById<Button>(Resource.Id.nextline);
                btnNextline.Click += delegate
                {
                    SearchNextBusline();
                };
            }
    
            private void SearchNextBusline()
            {
                if (busLineIndex >= busLineIDList.Count)
                {
                    busLineIndex = 0;
                }
                if (busLineIndex >= 0 && busLineIndex < busLineIDList.Count
                        && busLineIDList.Count > 0)
                {
                    mBusLineSearch.SearchBusLine(new BusLineSearchOption()
                        .City(FindViewById<EditText>(Resource.Id.city).Text)
                        .Uid(busLineIDList[busLineIndex]));
                    busLineIndex++;
                }
            }
    
            /// <summary>
            /// 节点浏览示例
            /// </summary>
            /// <param name="id">按钮的id</param>
            public void NodeClick(int id)
            {
                if (nodeIndex < -1 || route == null
                        || nodeIndex >= route.Stations.Count)
                    return;
    
                TextView popupText = new TextView(this);
                popupText.SetBackgroundResource(Resource.Drawable.popup);
                popupText.SetTextColor(Android.Graphics.Color.Black);
    
                // 上一个节点
                if (id == Resource.Id.pre && nodeIndex > 0)
                {
                    // 索引减
                    nodeIndex--;
                }
                // 下一个节点
                if (id == Resource.Id.next && nodeIndex < (route.Stations.Count - 1))
                {
                    // 索引加
                    nodeIndex++;
                }
                if (nodeIndex >= 0)
                {
                    // 移动到指定索引的坐标
                    mBaiduMap.SetMapStatus(MapStatusUpdateFactory.NewLatLng(
                        route.Stations[nodeIndex].Location));
                    // 弹出泡泡
                    popupText.Text = route.Stations[nodeIndex].Title;
                    mBaiduMap.ShowInfoWindow(new InfoWindow(popupText,
                        route.Stations[nodeIndex].Location, 0));
                }
            }
    
            protected override void OnPause()
            {
                base.OnPause();
            }
    
            protected override void OnResume()
            {
                base.OnResume();
            }
    
            protected override void OnDestroy()
            {
                mSearch.Destroy();
                mBusLineSearch.Destroy();
                base.OnDestroy();
            }
    
            public void OnGetBusLineResult(BusLineResult result)
            {
                if (result == null || result.Error != SearchResult.ERRORNO.NoError)
                {
                    Toast.MakeText(this, "抱歉,未找到结果", ToastLength.Long).Show();
                    return;
                }
                mBaiduMap.Clear();
                route = result;
                nodeIndex = -1;
                overlay.RemoveFromMap();
                overlay.SetData(result);
                overlay.AddToMap();
                overlay.ZoomToSpan();
                mBtnPre.Visibility = ViewStates.Visible;
                mBtnNext.Visibility = ViewStates.Visible;
                Toast.MakeText(this, result.BusLineName, ToastLength.Short).Show();
            }
    
            public void OnGetPoiResult(PoiResult result)
            {
                if (result == null || result.Error != SearchResult.ERRORNO.NoError)
                {
                    Toast.MakeText(this, "抱歉,未找到结果", ToastLength.Long).Show();
                    return;
                }
                // 遍历所有poi,找到类型为公交线路的poi
                busLineIDList.Clear();
                foreach (PoiInfo poi in result.AllPoi)
                {
                    if (poi.Type == PoiInfo.POITYPE.BusLine
                            || poi.Type == PoiInfo.POITYPE.SubwayLine)
                    {
                        busLineIDList.Add(poi.Uid);
                    }
                }
                SearchNextBusline();
                route = null;
            }
    
            public void OnGetPoiDetailResult(PoiDetailResult result)
            {
    
            }
    
            public void OnMapClick(LatLng point)
            {
                mBaiduMap.HideInfoWindow();
            }
    
            public bool OnMapPoiClick(MapPoi poi)
            {
                return false;
            }
        }
    }

    3、修改MainActivity.cs

    在MainActivity.cs文件的demos字段定义中,去掉【示例14】下面的注释。

    运行观察结果。

  • 相关阅读:
    勿忘初心
    欧拉函数与数论的结合UVA11426
    法雷级数
    欧拉函数及其应用
    poyla计数问题
    组合计数问题中容斥原理的应用
    数学问题当中的一些基本计数问题
    HDU4642博弈好题
    KMP算法在字符串中的应用
    UVA11722概率问题之线性规划
  • 原文地址:https://www.cnblogs.com/rainmj/p/5181615.html
Copyright © 2011-2022 走看看