返回顶部
首页 > 资讯 > 精选 >android实现查询公交车还有几站的功能
  • 121
分享到

android实现查询公交车还有几站的功能

android查询公交还有 2023-05-31 03:05:28 121人浏览 安东尼
摘要

 上一篇文章介绍了如何在Android平台上利用百度地图进行定位,接下来就介绍一下在获取的定位功能的基础上采用百度地图来获取周边的公交信息。这里采用如上文同样的方式,单独写一个类,该类是对周边搜索功能的封装,NearbySearc

 上一篇文章介绍了如何在Android平台上利用百度地图进行定位,接下来就介绍一下在获取的定位功能的基础上采用百度地图来获取周边的公交信息。

这里采用如上文同样的方式,单独写一个类,该类是对周边搜索功能的封装,NearbySearchHelper。该类向外部只暴露一个函数SearchNearby()接口;

实现的主要流程时,根据当前的定位获取周边的公交车的信息,并排除了冗余的公交车线路信息,根据搜索到的公交线路信息,继续搜索该公交车的uid(百度地图的唯一标示符),再根据具体的uid来搜索详细的公交车信息,包括起始站点。具体代码如下:

创建周边公交搜索帮助类:NearbySearchHelper

import java.util.ArrayList; import java.util.List;  import com.baidu.mapapi.model.LatLng; import com.baidu.mapapi.search.busline.BusLineResult; import com.baidu.mapapi.search.busline.BusLineSearch; import com.baidu.mapapi.search.busline.OnGetBusLineSearchResultListener; 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.PoiDetailResult; import com.baidu.mapapi.search.poi.PoiNearbySearchOption; import com.baidu.mapapi.search.poi.PoiResult; import com.baidu.mapapi.search.poi.PoiSearch; import com.baidu.mapapi.utils.DistanceUtil; import com.busleep.app.CustomApplication; import com.busleep.bean.MrNearbyBus; import com.busleep.config.Constant; import com.busleep.listener.MrNearbySearchListener; import com.busleep.utils.LogUtils;   public class NearbySearchHelper implements OnGetPoiSearchResultListener,    OnGetBusLineSearchResultListener{    public static final String TAG = "NearbySearchHelper";      private final int BUSSTATION=0;          // 先查询周边的公交站点信息;   private final int BUSLINE=1;              // 站点的公交信息;   private PoiSearch mSearch = null;         // Poi点搜索模块;     private BusLineSearch mBusLineSearch = null;  // 公交路线搜索模块;      private int mType;                  // 查询类型;   private int nodeIndex=-1;            // 查询的索引;      private MrNearbySearchListener nearBySearchListener; //查询结束监听对象,该对象是为了封装而重新的一个监听器;      private List<MrNearbyBus> nearbyBuses=null;     //查询的结果;      public NearbySearchHelper(){      }    public void setNearBySearchListener(MrNearbySearchListener nearBySearchListener) {     this.nearBySearchListener = nearBySearchListener;   }       public void init(){          if(mSearch==null||mBusLineSearch==null){              mSearch = PoiSearch.newInstance();       mSearch.setOnGetPoiSearchResultListener(this);       mBusLineSearch = BusLineSearch.newInstance();       mBusLineSearch.setOnGetBusLineSearchResultListener(this);              nearbyBuses=new ArrayList<MrNearbyBus>();            }else {       nearbyBuses.clear();     }   }         public void Destory(){          mSearch.destroy();     mBusLineSearch.destroy();   }         public void searchNearby(){         //设置当前的搜索类型是公交站点的搜索;         mType=BUSSTATION;      //获取当前位置的经度与纬度,该值是通过上文的定位方式来获取的;          double latitude=CustomApplication.mLastLocation.getLatitude();     double longtitude=CustomApplication.mLastLocation.getLongitude();          //查询周边公交线路;采用百度地图的周边搜索接口,并定义周边点搜索选项,其中Constant.nearbyRadius是周边搜索的半径;     mSearch.searchNearby(new PoiNearbySearchOption().keyword("公交站")         .location(new LatLng(latitude,longtitude)).radius(Constant.nearbyRadius));        }      @Override   public void onGetBusLineResult(BusLineResult arg0) {     // TODO Auto-generated method stub        }    @Override   public void onGetPoiDetailResult(PoiDetailResult arg0) {     // TODO Auto-generated method stub        }    //该函数是百度地图的周边兴趣点搜索回调函数;该函数在两处都进行了回调,所以需要根据当前的搜索类型来进行判断;    @Override   public void onGetPoiResult(PoiResult result) {          switch(mType)     {       case BUSSTATION:       {         //如果查询失败直接返回;         if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR)         {           LogUtils.i(TAG, "查询站点失败!");           nearBySearchListener.onRefreshBusNearby(nearbyBuses);           return;         }         //处理公交站点的搜索结果;         ProcessBusStation(result);         break;       }       case BUSLINE:       {         //如果查询失败直接返回;         if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR)         {           LogUtils.i(TAG, "查询线路失败!");           nearBySearchListener.onRefreshBusNearby(nearbyBuses);           return;         }         //处理公交线路的搜索结果;         ProcessBusLine(result);         break;       }     }   }        private boolean FindSameBus(MrNearbyBus nearbyBus){          String busName=nearbyBus.getBusName();          LatLng nowLocation=new LatLng(CustomApplication.mLastLocation.getLatitude(),         CustomApplication.mLastLocation.getLongitude());          LatLng newLocation=nearbyBus.getStationLaction();          double newDistance=DistanceUtil.getDistance(nowLocation, newLocation);     double oldDistance=0.0;          for(int i=0;i<nearbyBuses.size();i++)     {       //如果存在名称相同的公交线路;       if(nearbyBuses.get(i).getBusName().equals(busName))       {         LatLng oldLocation=nearbyBuses.get(i).getStationLaction();          //DistanceUtil是百度地图提供的计算两个经纬度坐标之间的距离工具类;                  oldDistance=DistanceUtil.getDistance(nowLocation, oldLocation);                  //如果当前的距离小于之前的距离,则更新该公交车的信息;         if(newDistance<oldDistance)         {           nearbyBuses.get(i).setStationLaction(newLocation);           nearbyBuses.get(i).setStationName(nearbyBus.getStationName());         }         return true;       }     }     return false;   }         private void ProcessBusStation(PoiResult result){          for (PoiInfo poi : result.getAllPoi())     {       if (poi.type == PoiInfo.POITYPE.BUS_STATION)       {           String busNames []=poi.address.split(";");                  for(int i=0;i<busNames.length;++i){                      MrNearbyBus nearbyBus=new MrNearbyBus();           nearbyBus.setBusName(busNames[i]);           nearbyBus.setStationName(poi.name);           nearbyBus.setStationLaction(poi.location);                      boolean bRes=FindSameBus(nearbyBus);                      if(!bRes)           {             nearbyBuses.add(nearbyBus);           }             }       }     }      //搜索完了公交站点后则根据公交站点来搜索公交路线,由于搜索时间有可能会挺长,故查询完站点后就调用周边搜索监听器      //来刷新数据,UI线程实现了该监听器,则可以直接刷新数据。      searchBusLine();     nearBySearchListener.onRefreshBusNearby(nearbyBuses);   }         private void searchBusLine(){     //nodeIndex表示当前周边站点的索引;          nodeIndex++;          mType=BUSLINE;          if(nearbyBuses.isEmpty()){       return;     }          //部分刷新;     if(nodeIndex%5==0){       nearBySearchListener.onRefreshBusNearby(nearbyBuses);     }          //如果此时返回表明查询完毕;     if(nodeIndex >= nearbyBuses.size()){       LogUtils.i(TAG, "查询完毕!");       nearBySearchListener.onRefreshBusNearby(nearbyBuses);       return;     }          //这里还是采用搜索周边的方式,效率会更高;     double latitude=CustomApplication.mLastLocation.getLatitude();     double longtitude=CustomApplication.mLastLocation.getLongitude();     //获取当前节点下的周边公交车的公交名称;          String busLineName=nearbyBuses.get(nodeIndex).getBusName();     mSearch.searchNearby(new PoiNearbySearchOption().keyword(busLineName+"公交")         .location(new LatLng(latitude,longtitude)).radius(Constant.nearbyRadius));   }         private void ProcessBusLine(PoiResult result)   {     for (PoiInfo poi : result.getAllPoi())     {       if (poi.type == PoiInfo.POITYPE.BUS_LINE)       {         MrNearbyBus nearbyBus=nearbyBuses.get(nodeIndex);                  //如果是第一次进来;         if(nearbyBus.getUid()==null){              nearbyBus.setUid(poi.uid);           String drection=poi.name;           int index=drection.indexOf("(");           int length=drection.length();                      drection=drection.substring(index+1,length-1);           nearbyBus.setBusDrection(drection);                    }else {  //否则是返程公交车;                      nearbyBus.setReverseUid(poi.uid);;         }       }     }     searchBusLine();   } } 

--结束END--

本文标题: android实现查询公交车还有几站的功能

本文链接: https://lsjlt.com/news/223226.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • android实现查询公交车还有几站的功能
     上一篇文章介绍了如何在Android平台上利用百度地图进行定位,接下来就介绍一下在获取的定位功能的基础上采用百度地图来获取周边的公交信息。这里采用如上文同样的方式,单独写一个类,该类是对周边搜索功能的封装,NearbySearc...
    99+
    2023-05-31
    android 查询公交 还有
  • 如何使用PHP实现微信小程序的公交查询功能?
    如何使用PHP实现微信小程序的公交查询功能?随着智能手机的普及,微信小程序成为了一种非常流行的应用形式。微信小程序可以在微信中直接使用,无需下载安装,使用方便,功能丰富。在微信小程序的开发中,公交查询功能是非常常见的需求。本文将介绍如何使用...
    99+
    2023-10-27
    PHP 微信小程序 公交查询
  • 公交查询小程序开发的基本功能有哪些
    这篇文章主要介绍“公交查询小程序开发的基本功能有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“公交查询小程序开发的基本功能有哪些”文章能帮助大家解决问题。1。公交车到站时间查询:公交车到站时间的...
    99+
    2023-06-27
  • Android实现有道辞典查询功能实例详解
    本文实例讲述了Android实现有道辞典查询功能的方法。分享给大家供大家参考,具体如下: 这是我做的一个简单的有道Android的DEMO,只是简单的雏形。界面设计也有点丑陋呵...
    99+
    2022-06-06
    有道 Android
  • 公交实时查询微信小程序包含了什么功能
    小编给大家分享一下公交实时查询微信小程序包含了什么功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.查询公交信息 用户能够依据小程序查询公交实时信息输入比如“...
    99+
    2023-06-27
  • 实现mysql树查询的功能
    这篇文章给大家分享的是有关实现mysql树查询的功能的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。需求:查找当前(任意)级别下的所有子节点。通过自定义mysql函数实现,先贴代码...
    99+
    2024-04-02
  • Android 购物车加减功能的实现代码
    Android 实现购物车加减功能,效果图如下所示: public class adderView extends LinearLayout implements View...
    99+
    2022-06-06
    购物车 Android
  • PHP Websocket开发指南,实现实时交通信息查询功能
    PHP Websocket开发指南,实现实时交通信息查询功能前言Websocket是一种在Web上实现双向通信的技术,它能够实现实时更新数据,适用于需要实时交互的场景。本篇文章将介绍如何使用PHP开发一个实时交通信息查询的功能,并提供相应的...
    99+
    2023-12-09
    PHP websocket 实时查询
  • Android实现购物车及其他功能的角标
    1.先来张效果图 2.自定义一个角标工具类BottomBarView 。 ** * Created by Administrator on 2016/12/27. * ...
    99+
    2022-06-06
    购物车 Android
  • mysql实现分页查询功能的方法
    小编给大家分享一下mysql实现分页查询功能的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!mysql分页查询的方法:1、用具体字段代替【*】;2、先查寻索引;3、使用【between …...
    99+
    2024-04-02
  • Mybatis CURD及模糊查询功能的实现
    命名空间namespace: 配置文件中namespace中的名称为对应Mapper接口或者Dao接口的完整包名,必须一致! 1.查询(select) select: 接...
    99+
    2024-04-02
  • SpringBoot进行多表查询功能的实现
    实体类: Emp 类: @Data @NoArgsConstructor @AllArgsConstructor public class Emp { private i...
    99+
    2024-04-02
  • SpringBoot分页查询功能的实现方法
    目录前言:首先是手动实现分页查询:接下来是关联前端分页和后台数据:总结前言: 学习了SpringBoot分页查询的两种写法,一种是手动实现,另一种是使用框架实现。现在我将具体的实现流...
    99+
    2024-04-02
  • php怎么实现简单的查询功能
    要实现简单的查询功能,可以使用PHP和MySQL数据库进行操作。以下是一个简单的例子:1. 首先,连接到MySQL数据库:```ph...
    99+
    2023-09-07
    php
  • 扩展tk.mybatis的流式查询功能实现
    mybatis查询默认是一次获取全部, 有时候需要查询上万上百万数据时,如果一次性读取到内存中,会容易导致OOM问题。这时候需要采用流式查询。以下扩展了tk.mybatis的流式查询...
    99+
    2024-04-02
  • Python实现的简单dns查询功能示例
    本文实例讲述了Python实现的简单dns查询功能。分享给大家供大家参考,具体如下: #!/usr/bin/python import sys,socket def print_array(*arr):...
    99+
    2022-06-04
    示例 查询功能 简单
  • java怎么实现数据库的查询功能
    要实现Java中数据库的查询功能,需要使用JDBC(Java Database Connectivity)来连接数据库并执行SQL查...
    99+
    2023-09-20
    java 数据库
  • mybatis-plus多表关联查询功能的实现
    学习目标: mybatis-plus多表关联查询 学习内容: mybatis-plus多表关联查询 实体类部分代码 @Data @AllArgsConstructor @NoAr...
    99+
    2024-04-02
  • Spring cloud 实现房源查询功能的实例代码
    目录前言核心组件服务注册中心服务调用方式服务网关断路器数据库设计1 项目搭建1.1添加依赖2  开发房源查询模块:2.1 house-list 模块 2...
    99+
    2024-04-02
  • Android点击Button实现功能的几种方法总结
    Android中Button控件应该算作是比较简单的控件,然而,它的使用频率却是非常的高,今天,我在这里总结了三种常用的点击Button实现其功能的方法。 1.很多时候,我们在...
    99+
    2022-06-06
    button 方法 Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作