版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科毕业设计毕业论文题目:Android公交查询系统学生姓名:学号:系别:专业班级:2012级电子信息工程(2)班指导教师姓名及职称:起止时间:年月—年月摘要随着城市化的进程,城市人口越来越多,公交车是大部分市民的出行工具,但是由于公交路线太多、路线时常调整,众多市民对各条公交路线的信息不清楚或掌握得不准确,这对人们的出行带来极大的不便。由于安卓系统的出现,安卓手机价格越来越低,安卓手机使用方便,它已成为人们获取各种信息的重要工具。借助无线互联网,基于安卓手机的公交查询系统可以为用户随时随地地提供公交信息。本文基于在研究和总结了目前的许多公交查询系统的基础上,设计并实现了基于安卓手机的公交查询系统,系统运行在安卓系统上,地图采用了百度地图,地图、公交数据由百度获取,采用Java语言编写。实现了定位用户当前位置、公交路线查询、实时交通地图查询、站点或地点查询、站点(或地点)到站点(地点)的公交路线查询,并把查询结果在地图上以路线形式进行显示,用户更能直观地了解公交信息。关键字:安卓系统;公交查询;百度地图AbstractWiththeprocessofurbanization,urbanpopulationisgettingmoreandmore,thebusisthemostpeopletraveltools,butbecausetoomanybusroutes,routechangesfrequently,manypeopleonthebusrouteinformationunclearormasterisnotaccurate,whichforpeopletotraveltobringgreatinconvenience.DuetotheemergenceofAndroidsystems,Androidmobilephonepricesaregettinglowerandlower,Androidmobilephoneuseisconvenient,ithasbecomeanimportanttoolforpeopletoobtainavarietyofinformation.WiththehelpofthewirelessInternet,thepublictransportationsystembasedonAndroidmobilephonecanprovidethepublictransportationinformationatanytimeandanywhere.Thebasedonthebasisofsummarizingresearchandmanyofthecurrentbusinquirysystembased,thedesignandRealizationofthequerysystembasedonAndroidphonesbus,systemrunningontheAndroidandmapsusingBaidumap.map,busdataacquiredbyBaidu.Thisstystemusesjava.Toachievethepositioningofthecurrentlocationoftheuser,thebusroutequery,real-timetrafficmapquery,siteorlocationquery,thesite(orsites)tosite(place)thebusroutequery,andthequeryresultsonthemapintheformofroutedisplay,userscanintuitivelyunderstandthebusinformation.
Keywords:AndroidSystemsBusInquiryBaiduMap目录TOC\o"1-2"\h\u10231第一章绪论 534651.1研究背景和意义 59451.2移动终端的现状 6247231.3LBS定位技术 6123011.4百度地图数据Poi 7252681.5本文研究内容 811565第二章功能需求分析 954782.1从百度地图获取数据 9309772.2显示查询结果数据 1024523第三章主要技术背景 118423.1GPS定位技术 11110463.2安卓操作系统 1128349第四章平台的搭建 13235254.1安装Java 13287564.2安装Eclipse 13215664.3安装安卓SDK 14261254.4安装ADT 14216124.5创建AVD 1518591第五章程序设计与实现 16281685.1系统体系结构 16307105.3APP欢迎界面 24110395.4主ActivityMainActivity 2683105.5公交线路查询ActivityBusLineSearchActivity 31202055.6站点查询ActivityRoutePlanDemo 3510058第六章系统运行结果分析 4513736.1主要实现功能: 45159566.2系统不足之处 4516333参考文献 461145致谢 47第一章绪论1.1研究背景和意义随着城市化的过程,土地和地域空间不断变化,城市人口不断增长,城市现代化是城市素质的综合反映,具体体现在城市发展水平的方方面面。衡量城市现代化的指标体系划分为三大类11个指标。其中第二类,基础设施现代化水平指标。包括4个指标:人均铺装道路面积(平方米),万人拥有公共汽、电车(辆),万人拥有医生数(人),万人拥有电话机(包括移动电话)数(部)。它们分别反映交通、医疗卫生、通信的发展水平。公共交通与其它交通方式相比具有人均占用道路少、能源消耗低、运输成本低、污染相对较小、客运量大,运送效率高等优点,公交车出行是大部分人的首选,随着城市化进程,城市不断地在向郊区延伸,边缘不断扩大,城市的公交也越来越多,这大大的方便了人们的出行。同时,也将带来许多的问题:城市和郊区的边界开始变得模糊化、公交线路过多、公交线路时常调整,目前众多市民,特别是一些大中型城市的市民,对各条公交路线的信息不清楚或掌握得不准确,这对人们的出行带来极大的不便,如何随时随地方便的查询到公交线路的信息,合理安排出行线路,是很多人关心的问题,所以各大城市都在积极地发展和改善公共交通运输的运用。本毕业设计主要的目的就是实现公交查询以及公交信息的发布。
同时,这个公交查询系统的设计有着重要的意义:
首先,有条理地、清晰地呈现出城市各条线路、各公交站点及各个地点的信息;
其次,节省人们选择公交路线的时间,帮助人们省下宝贵时间做自己的事情;
最后,消除城郊市民和外来人对公交信息的不熟悉导致的不安。1.2移动终端的现状移动智能终端是指具有操作系统,使用宽带无线移动通信技术实现互联网接入,能够通过下载、安装应用软件和数字内容为用户提供服务的移动终端产品。通常具备四大特征:一是具备高速接入网络的能力,4G/Wi-Fi等无线接入技术的发展,使无线高速数据传输成为可能,移动智能终端可方便地接入到互联网;二是具备开放的、可扩展的操作系统平台,这个操作系统平台能够在用户使用过程中灵活地安装和卸载来自第三方的各种应用程序和数字内容,承载更多应用服务,从而使终端的功能可以得到灵活扩展;三是具备较强的处理能力,当前的移动智能终端在硬件上已具有快速的处理速度,可以实现复杂的处理功能,随着芯片技术的发展,终端处理能力还将持续提升;四是拥有丰富的人机交互方式,触摸屏、语音识别、传感输入等交互技术使得终端的操作和应用更加便捷和智能。1.3LBS定位技术LBS英文全称为LocationBasedServices,它包括两层含义:首先是确定移动设备或用户所在的地理位置;其次是提供与位置相关的各类信息服务。意指与定位相关的各类服务系统,简称"定位服务",另外一种叫法为MPS-MobilePositionServices,也称为"移动定位服务"系统,,它是通过电信移动运营商的网络(如GSM网、CDMA网)获取移动终端用户的位置信息(经纬度坐标),在电子地图平台的支持下,为用户提供相应服务的一种增值业务。如找到手机用户的当前地理位置,然后在上海市6340平方公里范围内寻找手机用户当前位置处1公里范围内的宾馆、影院、图书馆、加油站等的名称和地址。所以说LBS就是要借助互联网或无线网络,在固定用户或移动用户之间,完成定位和服务两大功能。其业务特点主要有:一、要求覆盖率高。一方面要求覆盖的范围足够大。另一方面要求覆盖的范围包括室内。用户大部分时间是在室内使用该功能,从高层建筑和地下设施必须保证覆盖到每个角落。根据覆盖率的范围,可以分为三种覆盖率的定位服务:在整个本地网、覆盖部分本地网和提供漫游网络服务类型。除了考虑覆盖率外,网络结构和动态变化的环境因素也可能使一个电信运营商无法保证在本地网络或漫游网络中的服务。二、定位精度。手机定位应该根据用户服务需求的不同提供不同的精度服务,并可以提供给用户选择精度的权利。例如美国FCC推出的定位精度在50米以内的概率为67%,定位精度在150米以内的概率为95%。定位精度一方面与采用的定位技术有关,另外还要取决于提供业务的外部环境,包括无线电传播环境、基站的密度和地理位置、以及定位所用设备等。移动位置服务被认为是继短信之后的杀手级业务之一,有着巨大的市场规模和良好的盈利前景,但实际进展比较缓慢。不过,随着产业链的完善,移动位置和位置服务市场有望日益壮大。1.4百度地图数据Poi目前,gps开发和地图相关开发及移动互联网中很多关于商业(都市消费)、楼宇社区、街道、村庄等应用,都会需要用到百度地图的最新数据和谷歌地图的最新数据,由于谷歌在国内的使用有很大的限制,因此,本设计采用了百度地图的数据。百度的地图数据包括:百度地图兴趣点数据库、baidumap商户数据库、地标数据库、poi数据库等。百度地图已经拥有超过4000万的POI数据,这些数据的更新来自于强大的自采团队和用户大数据。在更新采集工艺和大范围使用OCR技术后,POI的自动处理率已经达到90%,POI信息更新更加高效。同时,百度地图还创新研发高精地图,并成为国内唯一掌握这一无人驾驶汽车的核心技术的地图厂商。基于强大的自采能力和不断开拓的技术创新,百度地图自采团队创新自采方案,推行全新的地图数据采集工艺“1+0”模式,从双人改为单人作业,地图采集效率迅速提高,地图外采速度从此踏上“风火轮”。不断更新的数据,为用户提供了更为准确的道路、POI信息,使得用户越来越多地使用百度地图。除了自采,百度地图还创新推出包括用户UGC、淘金、商户平台等多种POI数据采集模式。与政府相关部门的战略合作也是百度地图不断提升道路数据准确性的方式之一。迄今为止,百度地图已经与江苏省交通运输厅、广东省交通运输厅及北京市交管局等多地的交管部门合作,接入当地的交通运输大数据,这些合作不仅完善了百度地图上的道路数据,而且能够实现道路数据的实时更新,让用户出行变得更加便利。现在,百度地图开放平台每天平均响应定位请求次数超过230亿次,导航功能日服务峰值里程达2亿公里。百度地图正在变革人们对于地图的定义。百度地图的数据分类清晰,完全按照经纬度排序,如果要进行分类,可以根据城市的经纬度,对于商业数据,分类更加清晰,如公交站点,可以按城市区域或线路不通进行区分等等,并且拥有自己独立的代码,数据对于开发者来说,可以非常快捷的使用。1.5本文研究内容本次毕业设计研究的内容是学会调用安卓设备定位功能、Sensor功能、调用BaiduMapApi和图形界面设计,在BaiduMapApi基础上进行公交查询开发。第二章功能需求分析手机公交查询软件最基本的功能是为用户提供公交线路查询服务,为用户提供一条或多条到达目的地的公交线路。在用户查询的过程中,数据信息是从Baidu的服务器中获取的,数据的显示也以路线的形式在BaiduMap上直接显示。因此分别对获取信息和显示查询结果数据进行分析。2.1从百度地图获取数据2.1.1底图数据:其实就是地图中最基本的地物外形数据及一定的相关附加信息(例如道路名,河流名等)。事实上随着遥感和航拍卫拍技术的进步,这部分数据依赖实地采集的比例已经越来越小,商业地图数据商,尤其以高德为代表,处于成本收益考量,基本已经很少采用实地采集的方式了。这部分的数据主要来源于3种:(1)官方地图:严格来说,这不能说是一种单独的渠道,因为官方地图的数据本身,也是来源于下面的两种渠道,但是官方地图一般来源于政府相关部门的权威测绘和发布,因此也单算成一种渠道。当然,需要说明的是,地图厂商能从国家权威部门拿到或者买到的地图,要比我们日常在街上商店里买到的地图要精细丰富很多,当然,很多时候也是用电子格式提供的。当然,无论任何国家,真正高精度的地图(例如1:200比例或更高)是受限制不会对外公布的。(相对应给大家参照的是,我国规定互联网上可以公开发布的地图,最高精度是1:10000)(2)实地外采:说白就是测绘人员利用专业的仪器仪表,在实地环境中测绘所得到的。这样的采集方法耗时耗人都非常厉害,一则成本高,二则周期长,三则是采环境要求高(去喜马拉雅山去测测能弄吐血了),而且未必能够完全跟得上中国现在的城市变化。但是优点在于精度高,置信度,准确度非常高。这是国家测绘部门主要采用的手段,对于像北京市这样一个城市来说,一般几年才会完整重新测绘一轮。一般对于大多数商用测绘时,只是用在少数局部需要时,重点测绘才用得到。在精度和准确度要求没有那么高的地方,实地采集也可以使用一些成本更低更便捷的工具,而不是专业测绘设备。例如用携带高精度GPS或其他定位的手持智能设备步行以绘制轮廓等。(3)航片卫片制作:就是通过自己拍摄或者购买的高精度航空照片或者卫星照片或者遥感照片,在此作为底片的基础上进行人为的矢量标注和勾勒,从而形成自己的矢量数据。现在的航片或者遥感片的精度已经可以很高了,一般来说做到精度在0.05米的程度已经很容易。高德自己的航片据说已经可以做到0.03米的精度,对于商用地图数据来说,通常已经够用了。即便作为国家权威测绘,在大量荒郊野岭的测绘,也主要依赖于这种手段。目前常用的航拍或者卫拍手段包括机载数码摄像,机载遥感以及三维激光扫描(主要用于3D地图数据采集)2.1.2POI数据:严格来说属于矢量数据,不过是最简单的矢量数据,换句话来说就是坐标点标注数据。也是电子地图上最常用的数据图层。我们日常在电子地图上所使用的数据都是POI数据(就是地图上常见的那种标个气球的点)。POI数据只是信息关联坐标点的数据,不涉及到线和面,是最简单的矢量数据,用于简单的地点标注而不需要相应地物轮廓的需求。POI数据的内容五花八门,一般POI数据的供应商提供的POI数据都是日常常用的场所数据,例如饭店,商店,加油站,银行等日常常用设施。当然,在一些特殊的地图应用领域,也可以委托这些数据供应商或者自行去专门采集特殊用途的POI数据,例如井盖,消防栓等。2.1.3实时交通数据:实时交通数据:这个一般来源于专业的数据供应商,这些供应商和交通部门有较深合作,其数据采集主要依赖于在出租车上安装的GPS来采集实时车速为主,或者通过摄像头,红外探头,雷达测速测量车速为辅。2.2显示查询结果数据从百度查询到数据,通过百度地图API的相关函数在百度基本地图上显示百度地图API基本面向对象的技术,包含核心类,基础类,控件类,覆盖物类,右键菜单类,工具类,地图图层类,服务类。本系统使用的是基础类,控件类,覆盖物类,服务类函数,来实现了地图方法缩小,地图的拖曳,卫星地图的显示,已经通过鼠标滚轮实现地图的放大缩小;标注的显示,应用的是百度地图API的覆盖物类,实现的是根据数据库里的经纬度通过一定的标记图标在地图上显示出来;地址的搜索,路线的查询等功能,应用的是百度地图API的服务类,通过调用服务方法来实现地点的搜索以及路线的规划。第三章主要技术背景3.1GPS定位技术GPS是英文GlobalPositioningSystem(全球定位系统)的简称。GPS的前身是美国军方研制的一种子午仪卫星定位系统(Transit),1958年研制,1964年正式投入使用。该系统用5到6颗卫星组成的星网工作,每天最多绕过地球13次,并且无法给出高度信息,在定位精度方面也不尽如人意。然而,子午仪系统使得研发部门对卫星定位取得了初步的经验,并验证了由卫星系统进行定位的可行性,为GPS的研制埋下了铺垫。最初的GPS计划在美国联合计划局的领导下诞生了,该方案将24颗卫星放置在互成120度的三个轨道上。每个轨道上有8颗卫星,地球上任何一点均能观测到6至9颗卫星。这样,粗码精度可达100m,精码精度为10m。由于预算压缩,GPS计划不得不减少卫星发射数量,改为将18颗卫星分布在互成60度的6个轨道上,然而这一方案使得卫星可靠性得不到保障。1988年又进行了最后一次修改:21颗工作星和3颗备用星工作在互成60度的6条轨道上。这也是GPS卫星所使用的工作方式。GPS导航系统是以全球24颗定位人造卫星为基础,向全球各地全天候地提供三维位置、三维速度等信息的一种无线电导航定位系统。它由三部分构成,一是地面控制部分,由主控站、地面天线、监测站及通讯辅助系统组成。二是空间部分,由24颗卫星组成,分布在6个轨道平面。三是用户装置部分,由GPS接收机和卫星天线组成。民用的定位精度可达10米内。GPS系统拥有如下多种优点:使用低频讯号,纵使天候不佳仍能保持相当的讯号穿透性;全球覆盖(高达98%);三维定速定时高精度;快速、省时、高效率;应用广泛、多功能;可移动定位;不同于双星定位系统,使用过程中接收机不需要发出任何信号增加了隐蔽性,提高了其军事应用效能。如今安卓手机基本都装载了GPS接收机,主要作用是从GPS卫星收到信号并利用传来的信息计算用户的三维位置及世界。3.2安卓操作系统Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。[随着科技的迅猛发展,以智能手机为代表的Android设备如雨后春笋般迅速发展状大。Android系统自推出以来,就以明显的优势逐渐扩大自大的市场份额,尤其在国外,其呼声日高,可谓是如日中天,正处于蓬勃发展的开拓阶段。在国内Android系统的应用已不仅局限于手机产业,几年来其迅速扩张到相关领域,例如平板电脑、车载系统、电视STB、智能电器、智能会议系统等。目前,各IT厂商都在努力的研发前沿。随着科技的迅猛发展,以智能手机为代表的Android设备如雨后春笋般迅速发展状大。Android是基于Linux内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统,早期由Google开发,后由开放手持设备联盟(OpenHandsetAlliance)开发。它采用了软件堆层(softwarestack,又名以软件叠层)的架构,主要分为三部分。底层Linux内核只提供基本功能;其他的应用软件则由各公司自行开发,部分程序以Java编写。Android提供包括SDK、KeyApps、Middleware、LinuxKernel四个部分在内的全套手机软件方案。它开放了基于Linux内核以上的开发工具,从而保证了内容的可移植性和多样性。Android平台为我们开发应用程序提供了一套很好的框架,我们可以在这个平台的基础上开发不同的应用程序,也可以开发新的组件供应用程序调用。Android开发四大组件分别是:活动(Activity):用于表现功能。服务(Service):后台运行服务,不提供界面呈现。广播接收器(BroadcastReceiver):用于接收广播。内容提供商(ContentProvider):支持在多个应用中存储和读取数据,相当于数据库。第四章平台的搭建4.1安装Java4.1.1下载jdk1.7搜索“甲骨文中国”--“下载”--“java开发资源”--jdk下“download”--“windowsx64”(64位)即可免费下载jdk安装jdk1.7把下载到的jdk1.7选择开发工具功能安装到无中文或标点字符的目录下4.1.3jdk环境变量1.打开计算机属性2.选择“高级系统设置”3.选择环境变量4.在“系统变量”下选择“新建”5.“变量名”为:classpath、“变量值”为英文输入法下的句号“.”“变量名”为:JAVA_HOME、“变量值”为jdk安装目录的路径找到名为“Path”的变量,选择后点击“编辑”,在变量值后增加英文输入法的分号“;”,在分号后输入“%JAVA_HOME%\bin”,点击“确定”即可完成jdk环境变量的配置安装完成之后,可以在检查JDK是否安装成功。打开cmd窗口,输入java–version查看JDK的版本信息。4.2安装Eclipse4.2.1Eclipse简介Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentKit,JDK)。虽然大多数用户很乐于将Eclipse当作Java集成开发环境(IDE)来使用,但Eclipse的目标却不仅限于此。Eclipse还包括插件开发环境(Plug-inDevelopmentEnvironment,PDE),这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。由于Eclipse中的每样东西都是插件,对于给Eclipse提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。这种平等和一致性并不仅限于Java开发工具。尽管Eclipse是使用Java语言开发的,但它的用途并不限于Java语言;例如,支持诸如C/C++和COBOL等编程语言的插件已经可用,或预计将会推出。Eclipse框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。基于Eclipse的应用程序的一个突出例子是IBMRationalSoftwareArchitect,它构成了IBMJava开发工具系列的基础4.2.2下载Eclipse在百度搜索Eclipse-jee-mars-1-win64,然后下载解压即可使用4.3安装安卓SDK4.3.1在AndroidDevelopers下载android-sdkforwindows下载解压到无中文和标点字符的目录4.3.2在环境变量中新建,变量名:“Android_SDK_HOME”,变量值为“SDK解压目录”在path变量的变量值最后加分号输入:“%Android_SDK_HOME%\tools;%Android_SDK_HOME%\platform-tools”进入cmd命令窗口运行android–h,检查SDK是不是安装成功。4.4安装ADT下载ADT压缩包(不能解压缩)打开Eclipse,进入菜单中的“Help”-->“InstallNewSoftware”-->点击Add按钮,弹出对话框要求输入Name和Location;Name随意取,Location点击后面的Archive按钮找到ADT压缩包,点击OK-->勾选中间窗口的复选框(可以先打开看看,看到许多Android选项), 将最下方的复选框(Contactallupdatesitesduring...)取消-->然后一直点击确认或下一步,最后Eclipse会重启图4-4关联SDK菜单windows-->preferences-->左边点击Android,右边点击Browse...-->关联到sdk解压目录4.5创建AVD为使Android应用程序可以在模拟器上运行,必须创建AVD。在Eclipse中。选择Windows>AndroidSDKandAVDManager点击左侧面板的VirtualDevices,再右侧点击New填入Name,选择Target的API,SDCard大小任意,Skin随便选,Hardware目前保持默认值点击CreateAVD即可完成创建AVD第五章程序设计与实现5.1系统体系结构这个图格式不对这个图格式不对图5-1系统体系结构5.2BaiduMapAPI5.2.1申请BaiduMapAPIKEY在使用百度地图SDK为您提供的各种LBS能力之前,需要获取百度地图移动版的开发密钥,该密钥与百度账户相关联。因此,必须先有百度帐户,才能获得开发密钥。并且,该密钥与创建的过程名称有关,具体流程请参考如下介绍。Key的申请地址为:/apiconsole/key注意:a.为了给用户提供更安全的服务,AndroidSDK自v2.1.3版本开始采用了全新的Key验证体系。因此,当您选择使用v2.1.3及之后版本的SDK时,需要到新的Key申请页面进行全新Key的申请;(新旧key不可通用)b.新Key机制,每个Key仅且唯一对于1个应用验证有效,即对该Key配置环节中使用的包名匹配的应用有效。因此,多个应用【包括多个包名】需申请多个Key,或者对1个Key进行多次配置;c.在新key机制下,若你需要在同一个工程中同时使用百度地图、定位、导航SDK可以共用同一个key;d.如果您在AndroidSDK开发过程中使用了LBS云服务则需要为该服务单独申请一个forserver类型的密钥;点击创建应用-->应用名称:软件名称-->应用类型:AndroidSDK-->启动服务:选择APP所用到的服务-->发布版SHA1:在Eclipse中查找(菜单Window-->Preferences-->Android-->Build)-->开发版SHA1不填-->包名填工程中main方法所在的包名-->最后提交图5-2-1图5-2-2*SHA1:如下图5-2-3所示:图5-2-3获得KEY(AK):图5-2-45.2.2Eclipse工程配置BaiduMapApi第一步:在工程里新建libs文件夹,将开发包里的baidumapapi_vX_X_X.jar拷贝到libs根目录下,将libBaiduMapSDK_vX_X_X.so拷贝到libs\armeabi目录下(官网demo里已有这两个文件,如果要集成到自己的工程里,就需要自己添加),拷贝完成后的工程目录如下图5-2-5所示;图5-2-5第二步:在工程属性->JavaBuildPath->Libraries中选择“AddExternalJARs”,选定baidumapapi_vX_X_X.jar,确定后返回。通过以上两步操作后,您就可以正常使用百度地图SDK为您提供的全部功能了。注意:由于adt插件升级,若您使用Eclipseadt22的话,需要对开发环境进行相应的设置,方法如下:1.在Eclipse中选中工程,右键选Properties->JavaBuildPath->OrderandExport使AndroidPrivateLibraries处于勾选状态;2.Project->clean->cleanall.5.2.3基础地图1.地图类型百度地图AndroidSDK为您提供了3种类型的地图资源(普通矢量地图、卫星图和空白地图),开发者可以利用BaiduMap中的mapType()方法来设置地图类型。核心代码如下:mMapView=(MapView)findViewById(R.id.bmapView);mBaiduMap=mMapView.getMap();//普通地图mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);//卫星地图mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);//空白地图,基础地图瓦片将不会被渲染。在地图类型中设置为NONE,将不会使用流量下载基础地图瓦片图层。使用场景:与瓦片图层一起使用,节省流量,提升自定义瓦片图下载速度。mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NONE);实时交通地图当前,全国范围内已支持多个城市实时路况查询,且会陆续开通其他城市。在地图上打开实时路况的核心代码如下:mMapView=(MapView)findViewById(R.id.bmapView);mBaiduMap=mMapView.getMap();//开启交通图mBaiduMap.setTrafficEnabled(true);5.2.4检索功能目前百度地图SDK所集成的检索服务包括:POI检索、公交信息查询、线路规划、地理编码、行政区边界数据检索、在线建议查询、短串分享(包括POI搜索结果分享、驾车/公交/骑行/步行路线规划分享、反向地理编码结果分享)。POI检索POI(PointofInterest),中文可以翻译为“兴趣点”。在地理信息系统中,一个POI可以是一栋房子、一个商铺、一个邮筒、一个公交站等。百度地图SDK提供三种类型的POI检索:周边检索、区域检索和城市内检索。下面将以城市内检索为例,向大家介绍如何使用检索服务。第一步,创建POI检索实例mPoiSearch=PoiSearch.newInstance();第二步,创建POI检索监听者;OnGetPoiSearchResultListenerpoiListener=newOnGetPoiSearchResultListener(){publicvoidonGetPoiResult(PoiResultresult){//获取POI检索结果}publicvoidonGetPoiDetailResult(PoiDetailResultresult){//获取Place详情页检索结果}};第三步,设置POI检索监听者;mPoiSearch.setOnGetPoiSearchResultListener(poiListener);第四步,发起检索请求;mPoiSearch.searchInCity((newPoiCitySearchOption()).city(“北京”).keyword(“美食”).pageNum(10));这抄袭的痕迹太明显了这抄袭的痕迹太明显了第五步,释放POI检索实例;mPoiSearch.destroy();自v3.6.1开始,城市poi检索返回结果,新增门址类列表数据:PoiSearch类的searchInCity(PoiCitySearchOption)发起检索时返回的结果,增加门址类数据:PoiResult中新增getAllAddr()获取门址类列表,当isHasAddrInfo()返回true时,除了原poi列表外,还包含门址结果。例如:在“北京”搜索“上地十街1号”,除返回包含“上地十街1号”的poi列表以外,还包括地址为“上地十街1号”的明确门址。请用系统中你实用的地名OK?请用系统中你实用的地名OK?POI详情信息的检索以上向大家介绍了POI检索功能的使用方法,百度地图SDK还向广大开发者开放了POI详情信息的检索,为开发者提供更多的LBS数据支持。POI详情检索的实现方式如下:第一步,发起检索://uid是POI检索中获取的POIID信息mPoiSearch.searchPoiDetail((newPoiDetailSearchOption()).poiUid(uid));第二步,设置结果监听:publicvoidonGetPoiDetailResult(PoiDetailResultresult){if(result.error!=SearchResult.ERRORNO.NO_ERROR){//详情检索失败//result.error请参考SearchResult.ERRORNO}else{//检索成功}}公交信息检索这是本文最出彩的这是本文最出彩的利用BusLineSearch方法,开发者可查询公交线路的详情信息,实现方式如下:第一步,发起POI检索,获取相应线路的UID;//以城市内检索为例,详细方法请参考POI检索部分的相关介绍mSearch.searchInCity((newPoiCitySearchOption()).city(“东莞”).keyword(“49”);第二步,在POI检索结果中判断该POI类型是否为公交信息;publicvoidonGetPoiResult(PoiResultresult){if(result==null||result.error!=SearchResult.ERRORNO.NO_ERROR){return;}//遍历所有POI,找到类型为公交线路的POIfor(PoiInfopoi:result.getAllPoi()){if(poi.type==PoiInfo.POITYPE.BUS_LINE||poi.type==PoiInfo.POITYPE.SUBWAY_LINE){//说明该条POI为公交信息,获取该条POI的UIDbusLineId=poi.uid;break;}}}第三步,定义并设置公交信息结果监听者(与POI类似),并发起公交详情检索;//如下代码为发起检索代码,定义监听者和设置监听器的方法与POI中的类似mBusLineSearch.searchBusLine((newBusLineSearchOption().city(“东莞”).uid(busLineId)));公交路线规划公交线路规划实现公交线路规划的方式如下:第一步,创建公交线路规划检索实例;mSearch=RoutePlanSearch.newInstance();第二步,创建公交线路规划检索监听者;OnGetRoutePlanResultListenerlistener=newOnGetRoutePlanResultListener(){publicvoidonGetWalkingRouteResult(WalkingRouteResultresult){//}publicvoidonGetTransitRouteResult(TransitRouteResultresult){if(result==null||result.error!=SearchResult.ERRORNO.NO_ERROR){Toast.makeText(RoutePlanDemo.this,"抱歉,未找到结果",Toast.LENGTH_SHORT).show();}if(result.error==SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR){//起终点或途经点地址有岐义,通过以下接口获取建议查询信息//result.getSuggestAddrInfo()return;}if(result.error==SearchResult.ERRORNO.NO_ERROR){TransitRouteOverlayoverlay=newMyTransitRouteOverlay(mBaidumap);mBaidumap.setOnMarkerClickListener(overlay);overlay.setData(result.getRouteLines().get(0));overlay.addToMap();overlay.zoomToSpan();}}publicvoidonGetDrivingRouteResult(DrivingRouteResultresult){//}};第三步,设置公交线路规划检索监听者;mSearch.setOnGetRoutePlanResultListener(listener);第四步,准备检索起、终点信息;PlanNodestNode=PlanNode.withCityNameAndPlaceName("东莞","城市学院正门");PlanNodeenNode=PlanNode.withCityNameAndPlaceName("东莞","鸿福路口");第五步,发起公交线路规划检索;mSearch.transitSearch((newTransitRoutePlanOption()).from(stNode).city("东莞").to(enNode));第六步,释放检索实例;这么看起来类似滴滴打车的味道这么看起来类似滴滴打车的味道mSearch.destory();公交线路规划结果的JSON结构图如下:TransitRouteResult{//换乘路线结果TaxiInfo:{//打车信息inttotalPrice;//总价格Stringdesc;//打车描述信息intdistance;//距离intduration;//时间intperKMPrice;//单价intstartPrice;//起步价}List<TransitRouteLine>:[//换乘方案{TaxiInfotaxitInfo,//打车信息VehicleInfovehicleInfo,//交通工具信息RouteNodeentrance,//路段入口RouteNodeexit,//路段出口TransitRouteStepType,//路段类型Stringinstructions,//路段说明intdistance,//距离intduration//时间},……]SuggestAddrInfo:{//建议起终点信息List<PoiInfo>suggestStartNode;//建议起点List<PoiInfo>suggestEndNode;//建议终点List<List<PoiInfo>>suggestWpNode;//建议途经点List<CityInfo>suggestStartCity;//建议起点城市List<CityInfo>suggestEndCity;//建议终点城市List<List<CityInfo>>suggestWpCity;//建议途经点城市}}公交线路规划结果的JSON结构图如下:TransitRouteResult{//换乘路线结果TaxiInfo:{//打车信息inttotalPrice;//总价格Stringdesc;//打车描述信息intdistance;//距离intduration;//时间intperKMPrice;//单价intstartPrice;//起步价}List<TransitRouteLine>:[//换乘方案{TaxiInfotaxitInfo,//打车信息VehicleInfovehicleInfo,//交通工具信息RouteNodeentrance,//路段入口RouteNodeexit,//路段出口TransitRouteStepType,//路段类型Stringinstructions,//路段说明intdistance,//距离intduration//时间},……]SuggestAddrInfo:{//建议起终点信息List<PoiInfo>suggestStartNode;//建议起点List<PoiInfo>suggestEndNode;//建议终点List<List<PoiInfo>>suggestWpNode;//建议途经点List<CityInfo>suggestStartCity;//建议起点城市List<CityInfo>suggestEndCity;//建议终点城市List<List<CityInfo>>suggestWpCity;//建议途经点城市}}5.3APP欢迎界面咱做的是东莞的换成东莞地标更贴切咱做的是东莞的换成东莞地标更贴切SplashActivity类是本系统的欢迎界面,此类继承自Activity类。重写父类的onCreate(BundlesavedInstanceState)方法,此Activity设置为全屏显示:requestWindowFeature(Window.FEATURE_NO_TITLE);布局中加载一张图片,此Activity效果如图5-3所示:图5-3此Activity还要使用Timer类实现定时跳转的功能,本系统为2秒后,由此Activity跳转到另一个Activity。主要实现代码如下:publicvoidstartLogin(){ Handlerhandler=newHandler(); handler.postDelayed(newRunnable(){ @Override publicvoidrun(){ Intentintent=newIntent(); intent.setClass(SpanshActivity.this,MainActivity.class); startActivity(intent); finish(); } },2000); }5.4主ActivityMainActivity由SpanshActivity跳转到此Activity。此Activity创建初始化时调用定位和方向传感器,定位到用户当前位置和设置当前位置的图标随着手机方向变化而变化,并在地图上显示位置的详细信息。在MainActivity中还设置了选择菜单,因为安卓5.0之后菜单键功能默认为任务切换功能,部分手机按菜单键无法弹出选择菜单,所有在MainActivity布局中再添加了一个按钮来启动选择菜单图5-4-1图5-4-2MainActivity中的选择菜单有6个Item:我的位置:在地图中定位和显示到用户当前位置普通地图:一般地图模式卫星地图:卫星地图模式实时交通(关闭)\实时交通(开启):选择开启或关闭在地图上显示实时交通路线查询:跳转到公交查询的Activity站点查询:跳转到站点查询的ActivityMainActivity的代码如下:publicclassMainActivityextendsActivity{ MapViewmMapView=null;// EditTextinput; privateBaiduMapmBaiduMap; privateLocationClientmLocationClient; privateMyLocationListenermLocationListener; privatebooleanisFirstIn=true; Buttonbtn_setting; privateContextcontext; privatedoublemLatitude; privatedoublemLongtitude; privateBitmapDescriptormIconLocation; privateMyOrientationListenermyOrientationListener; privatefloatmCurrentX; privateList<String>busLineIDList=null; privateintbusLineIndex=0; privatePoiSearchmSearch=null; @Override protectedvoidonCreate(BundlesavedInstanceState){ Log.i("Input","ddd"); //TODOAuto-generatedmethodstub super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.normal_map); this.context=this; initView(); initLocation(); } privatevoidinitLocation(){// input=(EditText)findViewById(R.id.map_input); mLocationClient=newLocationClient(this); mLocationListener=newMyLocationListener(); mLocationClient.registerLocationListener(mLocationListener); btn_setting.bringToFront();// input.bringToFront();// input.setFocusable(true);// input.setFocusableInTouchMode(true);// input.requestFocus(); LocationClientOptionoption=newLocationClientOption(); option.setCoorType("bd09ll"); option.setIsNeedAddress(true); option.setOpenGps(true); option.setScanSpan(1000); mLocationClient.setLocOption(option); mIconLocation=BitmapDescriptorFactory .fromResource(R.drawable.navi_map_gps_locked); myOrientationListener=newMyOrientationListener(context); myOrientationListener.setOnOrientationListener(newOnOrientationListener(){ @Override publicvoidonOrientationChanged(floatx){ mCurrentX=x; } }); } privatevoidinitView(){ //TODOAuto-generatedmethodstub mMapView=(MapView)findViewById(R.id.bmapView); mBaiduMap=mMapView.getMap(); MapStatusUpdatemsu=MapStatusUpdateFactory.zoomTo(15.0f); mBaiduMap.setMapStatus(msu); btn_setting=(Button)findViewById(R.id.btn_setting); btn_setting.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ //TODOAuto-generatedmethodstub Map.this.openOptionsMenu(); } }); } @Override protectedvoidonStop(){ super.onStop(); mBaiduMap.setMyLocationEnabled(false); mLocationClient.stop(); myOrientationListener.stop(); } @Override protectedvoidonDestroy(){ //TODOAuto-generatedmethodstub super.onDestroy(); mMapView.onDestroy(); } @Override protectedvoidonResume(){ //TODOAuto-generatedmethodstub super.onResume(); mMapView.onResume(); } @Override protectedvoidonStart(){ super.onStart(); mBaiduMap.setMyLocationEnabled(true); if(!mLocationClient.isStarted()) mLocationClient.start(); myOrientationListener.start(); } @Override protectedvoidonPause(){ //TODOAuto-generatedmethodstub super.onPause(); mMapView.onPause(); } @Override publicbooleanonCreateOptionsMenu(Menumenu){ getMenuInflater().inflate(R.menu.main,menu); returntrue; } @Override publicbooleanonOptionsItemSelected(MenuItemitem){ switch(item.getItemId()) { caseR.id.id_map_normal: mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); break; caseR.id.id_map_site: mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE); break; caseR.id.id_map_traffic: if(mBaiduMap.isTrafficEnabled()){ mBaiduMap.setTrafficEnabled(false); item.setTitle("实时交通(关闭)"); } else{ mBaiduMap.setTrafficEnabled(true); item.setTitle("实时交通(开启)"); } break; caseR.id.id_map_location: ToMyLocation(); break; caseR.id.id_map_search: Intentintent=newIntent(); intent.setClass(Map.this,BusLineSearchDemo.class); startActivity(intent); break; caseR.id.id_map_search2: Intentintent2=newIntent(); intent2.setClass(Map.this,RoutePlanDemo.class); startActivity(intent2); } returnsuper.onOptionsItemSelected(item); } privatevoidToMyLocation(){ LatLnglatlng=newLatLng(mLatitude,mLongtitude); MapStatusUpdatemsu=MapStatusUpdateFactory.newLatLng(latlng); mBaiduMap.animateMapStatus(msu); } privateclassMyLocationListenerimplementsBDLocationListener{ @Override publicvoidonReceiveLocation(BDLocationlocation){ MyLocationDatadata=newMyLocationData.Builder()// .direction(mCurrentX)// .accuracy(location.getRadius())// .latitude(location.getLatitude())// .longitude(location.getLongitude()).build(); mBaiduMap.setMyLocationData(data); mLatitude=location.getLatitude(); mLongtitude=location.getLongitude(); MyLocationConfigurationconfig=new MyLocationConfiguration(LocationMode.NORMAL,true,mIconLocation); mBaiduMap.setMyLocationConfigeration(config); if(isFirstIn){ LatLnglatlng=newLatLng(location.getLatitude(),location.getLongitude()); MapStatusUpdatemsu=MapStatusUpdateFactory.newLatLng(latlng); mBaiduMap.animateMapStatus(msu); isFirstIn=false; Toast.makeText(context,location.getAddrStr(),Toast.LENGTH_SHORT).show(); } } } }5.5公交线路查询ActivityBusLineSearchActivityBusLineSearchActivity类主要实现公交线路查询功能,输入城市和公交线路名称,即可在地图上显示符合输入的公交线路名称的公交路线,点击下一条切换到显示下一个搜索路线结果,在搜索后点击下方左右箭头按钮可显示搜索到的公交路线经过的各个站点。图5-5实现代码如下:publicclassBusLineSearchDemoextendsFragmentActivityimplements OnGetPoiSearchResultListener,OnGetBusLineSearchResultListener, BaiduMap.OnMapClickListener{ privateButtonmBtnPre=null;//上一个节点 privateButtonmBtnNext=null;//下一个节点 privateintnodeIndex=-2;//节点索引,供浏览节点时使用 privateBusLineResultroute=null;//保存驾车/步行路线数据的变量,供浏览节点时使用 privateList<String>busLineIDList=null; privateintbusLineIndex=0; //搜索相关 privatePoiSearchmSearch=null;//搜索模块,也可去掉地图模块独立使用 privateBusLineSearchmBusLineSearch=null; privateBaiduMapmBaiduMap=null; BusLineOverlayoverlay;//公交路线绘制对象 Stringstring; protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_busline); CharSequencetitleLable="公交线路查询功能"; setTitle(titleLable); mBtnPre=(Button)findViewById(R.id.pre); mBtnNext=(Button)findViewById(R.id.next);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年新教材高中化学 专题2 研究物质的基本方法 2.1 物质的量浓度(2)教案 苏教版必修1
- 机框catia课程设计
- 机构管理系统课程设计
- 九年级化学下册 10.2 化学元素与人体健康教案 (新版)鲁教版
- 机器人脚踝课程设计
- 机上应急处置课程设计
- 职场信息安全意识提升方案
- 本科jsp毕业课程设计
- 本班读书情况研究报告
- 本地小区清洁外包方案
- 第七章 立体几何与空间向量综合测试卷(新高考专用)(教师版) 2025年高考数学一轮复习专练(新高考专用)
- 2024年普通考研-学校体育学考试近5年真题集锦(频考类试题)带答案
- 生产流程(线)外包服务规范 -DB13-T 5224-2020 河北
- 矿山转让合同15篇
- 【互联网金融发展的监管探究国内外文献综述5100字】
- (新版)云南水利安全员(B证)考试题及答案
- 劳动关系协调员测试题及答案
- 三秦思语(2022年陕西中考语文试卷散文阅读题及答案)
- 贵州省建筑与装饰工程计价定额(2016版)
- 2024新教科版一年级上册第二单元《我们自己》第6课观察与比较表格教学设计及反思
- JGT 486-2015 混凝土用复合掺合料
评论
0/150
提交评论