iOS平台上实时查询公交的设计与实现
2014-08-07林晓焕
何 宇,林晓焕,郭 靖
(西安工程大学电信学院,西安710048)
·微机应用·
iOS平台上实时查询公交的设计与实现
何 宇,林晓焕,郭 靖
(西安工程大学电信学院,西安710048)
针对现在生活节奏快、工作压力大、以公交车为主要交通工具的时代,设计了一款可以查看具体公交实时信息的App,准确判断离自己最近的公交位置,解决了紧急情况下人们对于选择乘车路线的纠结。本课题采用了触摸灵活、可以随时随地查询公交的iOS客户端平台,采用多线程运动方式,可以从服务器上取数据,同时显示数据,并且采用了解析服务器上数据效果最好的NSJSONSerialization方法,快速实时处理,提高了用户体验。可以让用户在时间紧迫的情况下合理安排自己的乘车路线,让人们的生活和工作更加方便、便捷。
公交车;查询;体验;iOS操作系统
1 引 言
iOS(iPhone/iPad/iPod Operationing System)是目前集触摸灵活性最高、稳定性最好、应用范围最广于一身的手机系统[1]。在如此强大的系统平台上开发App,不仅可以提升用户的体验,而且可以最大化地刺激经济更快发展。
在提倡低碳环保的时代,购买私房车的压力与日俱增,给私房车安家和补给燃油的困难随之而来。乘坐公交车正在成为人们上班、购物、短途旅行等的首选交通工具。现在,人们的生活压力越来越大,生活节奏也越来越快,为了能够上班不迟到,不影响正常的工作生活,人们通常需要准确知道一辆公交车的实时位置和时间。
目前市场上的软件实现了在Android平台上,实时查询一个城市的公交信息。但受地域和平台的限制,用户的体验也有很大程度的限制,并且查询速度缓慢。针对现在遇到的问题,本论文主要对某市所有公交车,设计和实现了在iOS设备(即客户端)上实时查看其所处的具体位置及到达时间,同时简单说明了服务端的实现。
2 服务端设计与实现
某市的每辆公交车上都安装一款类定位仪,记录公交车所经过的站点名字,并且每经过一站就要把这个站的名字上传到服务器,当同一辆公交车上传到服务器上站名的数量、起始站和终点站的名字与本趟车应该经过的总站数相等、与服务器上记录的起始站和终点站名字相同时,清空该趟车的记录。
公交名:1,2,3,…,56,假设该市有56条不同线路的公交。
站点:A1↔Z1,A1、Z1分别为某一条线路的始发站和终点站,其中间的站名为b1,c1,d1,…,x1,y1。
公交车编号:一条线路下有多辆公交车,用公交车的车牌号作为每辆公交车的标识。例:陕A001,陕A002…
图1 服务端框架
3 客户端设计与实现
客户端的App主要功能是:搜索某个城市的名字后,可以显示出该市所有的公交车路线和相应的起始站、终点站名字,点击想要查询的公交路线,可以准确显示这条路线所有站点的名字,以及这趟路线的所有公交车目前分布情况,确保用户可以比较准确的了解,还需要多长时间,可以过来一趟公交车,给时间紧迫的人们带来很大帮助。
3.1 搜索功能的实现
进入App后,首页是搜索功能,点击最上面的搜索栏,就会自动调用软键盘,输入所要查询的城市名字,点击软键盘的搜索键,将调用UISearchBarDelegate协议里面的searchBarSearchButtonClicked方法,即搜索方法,在该方法里面设置适合与在线服务通信的URL请求[2-3],即设置NSMutableURLRequest的实例为POST,通过NSURLConnection连接服务器上收集城市名字的地址,sendSynchronousRequest方法把搜索栏输入的城市名字上传到服务器,与服务器上已有的城市名字比较,如果有相同的城市名字,说明服务器上收集了这个城市的公交车信息。
UITableView对象会向数据源查询要显示的行数、显示表格行数所需要的数据及显示其他UITableView对象所需要的数据,所以遵守UITable-ViewDataSource协议后,可以在首页的表格视图里面正确显示所查询城市的所有公交路线,以及每趟公交路线所对应的起始站和终点站[4-5]。如图2(a)所示查询到了西安的公交车,例如,1路车的起始站和终点站分别为A1和Z1;反之,如果服务器上没有与上传到服务器的城市名字相匹配的内容,说明服务器端没有搜集查询城市的公交信息,将会提示找不到相关内容,如图2(b)所示。
图2 公交路线显示
找到符合条件的公交信息时,需要从服务器上取相应的公交路线数据显示在表格视图里面,设置NSMutableURLRequest的实例为GET,从服务器上取到数据,然后通过NSJSONSerialization的类方法解析取到的数据,最后将解析好的数据显示在表格视图上,如图3所示。
从服务器上取数据显示在表格视图上,受网络影响,会有很大的延迟,为了减少正确显示内容需要的时间,本论文采用了多线程。多线程模式下,任务可以“并行”[6],就是多个线程并行工作来完成多项任务,提高工作效率,即取数据和显示数据在两个不同的线程里面同时执行,这样达到了同步执行,一边取数据一边将数据显示在表格视图里面,减少了用户等待的时间,提高了用户体验效果。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^(void){//从服务器上取数据,解析数据dispatch_async(dispatch_get_main_queue(),^{//在表格视图里显
示解析的数据});});
图3 从服务器取数据流程图
如果没有找到用户要查询城市的公交信息,将会调用UIAlertView实例,提醒用户没有符合条件的内容。
3.2 公交详细信息显示的实现
查到城市的所有公交线路后,拖动表格视图,查看符合自己要求的公交,点击符合要求的公交线路所在的位置,就会触发UITableViewDelegate协议下的点击某一行的方法tableView:didSelectRowAtIndex-Path:。在该方法里面调用实现presentViewController方法,显示公交车详细信息的界面。公交车的详细界面应是UIViewController的子类,在其子类里面添加UILabel显示最上面的标题,即在首页点击几路公交车所在的一行,就会把这行的公交数传到详细界面,并显示在UILabel上。例如点击搜索界面的5路公交车所在的行,在详细界面的UILabel上就会显示西安5路公交车;在标题的下面添加一个UITextView,可以显示查询公交路线从起始站到终点站的所有站名。当站名较长或者站点较多,一行不能完全显示所有公交站名时,可以滚动UITextView查看详细站名。上面的返回按钮可以调用dismissViewControllerAnimated:方法,返回到首页的搜索界面,方便用户继续查询公交的实时信息;最下面的表格视图显示了查询公交线路的所有公交车目前所在的位置,如图4所示,如果用户现在在d5站,那么陕A5001公交车在c5站,即用户所在位置的前一站,从而更好的判断等一辆公交车大概需要多长时间,尤其在时间紧迫的情况下,可以合理安排自己的乘车路线。
图4 查询公交车的具体位置
4 结束语
经过测试,多线程的使用,对卡屏现象有很大改善,巧妙的上传数据到服务器和从服务器上取数据,减少了连接服务器和取大量数据的时间,避免了用户长时间的等待。这款App不会因为地域原因而限制用户的体验,可以满足人们出行对具体公交线路的查询,帮助时间紧迫的人们合理安排乘车路线,极大方便了人们的生活和工作。
[1]赵海,彭海霞,朱剑.IOS平台上基于GPRS技术的Web客户端系统的设计与实现[J].东北大学学报(自然科学版),2012,33(10):1399-1402.
[2]张彩霞,高颖,易磊.iPhone开发秘籍(第2版)[M].北京:人民邮电出版社,2010.
[3]李亮,杨武,张永强,苟振兴.iPhone SDK 3开发指南[M].北京:电子工业出版社,2010.
[4]夏伟频.ios编程(第3版)[M].武汉:华中科技大学出版社,2013.
[5]Gene Backlin.Professional iPhone and iPad Application Development[M].北京:清华大学出版社,2012.
[6]XMobileApp.iPhone创意开发入门与实践[M].北京:人民邮电出版社,2010.
Design and Im plementation of a Real-time Query Bus on iOS Platform
HE Yu,LIN Xiao-huan,GUO Jing
(School of Electronic and Information,Xi’an Polytechnic University,Xi’an 710048,China)
Facing the life of high efficiency,high pressure and high frequency for taking the bus,this paper designs an App,which can check the real-time bus information and accurately judge the nearest bus location,to solve problems while choosing routes in emergency for the people.The flexible touch is adopted in this App to inquire the bus iOS client platform anytime and anywhere.The multi thread is used to read data from the server and display data in the same time,and the NSJSONSerialization method which analyzes the data on the server with best effect is used to process the data in real time for improving the user experience.The design and implementation can complete the reasonable arrangement for the bus routes and make the convenient life for the people.
Bus;Check;Experience;The iOS operating systerm
10.3969/j.issn.1002-2279.2014.03.017
TP311.52
:A
:1002-2279(2014)03-0060-03
何宇(1990-),女,山西省长治市人,硕士研究生,主研方向:数据通信与计算机软件编程。
2013-11-12