何 宇,林曉煥,郭 靖
(西安工程大學電信學院,西安710048)
·微機應用·
iOS平臺上實時查詢公交的設計與實現
何 宇,林曉煥,郭 靖
(西安工程大學電信學院,西安710048)
針對現在生活節奏快、工作壓力大、以公交車為主要交通工具的時代,設計了一款可以查看具體公交實時信息的App,準確判斷離自己最近的公交位置,解決了緊急情況下人們對于選擇乘車路線的糾結。本課題采用了觸摸靈活、可以隨時隨地查詢公交的iOS客戶端平臺,采用多線程運動方式,可以從服務器上取數據,同時顯示數據,并且采用了解析服務器上數據效果最好的NSJSONSerialization方法,快速實時處理,提高了用戶體驗。可以讓用戶在時間緊迫的情況下合理安排自己的乘車路線,讓人們的生活和工作更加方便、便捷。
公交車;查詢;體驗;iOS操作系統
iOS(iPhone/iPad/iPod Operationing System)是目前集觸摸靈活性最高、穩定性最好、應用范圍最廣于一身的手機系統[1]。在如此強大的系統平臺上開發App,不僅可以提升用戶的體驗,而且可以最大化地刺激經濟更快發展。
在提倡低碳環保的時代,購買私房車的壓力與日俱增,給私房車安家和補給燃油的困難隨之而來。乘坐公交車正在成為人們上班、購物、短途旅行等的首選交通工具?,F在,人們的生活壓力越來越大,生活節奏也越來越快,為了能夠上班不遲到,不影響正常的工作生活,人們通常需要準確知道一輛公交車的實時位置和時間。
目前市場上的軟件實現了在Android平臺上,實時查詢一個城市的公交信息。但受地域和平臺的限制,用戶的體驗也有很大程度的限制,并且查詢速度緩慢。針對現在遇到的問題,本論文主要對某市所有公交車,設計和實現了在iOS設備(即客戶端)上實時查看其所處的具體位置及到達時間,同時簡單說明了服務端的實現。
某市的每輛公交車上都安裝一款類定位儀,記錄公交車所經過的站點名字,并且每經過一站就要把這個站的名字上傳到服務器,當同一輛公交車上傳到服務器上站名的數量、起始站和終點站的名字與本趟車應該經過的總站數相等、與服務器上記錄的起始站和終點站名字相同時,清空該趟車的記錄。
公交名:1,2,3,…,56,假設該市有56條不同線路的公交。
站點:A1?Z1,A1、Z1分別為某一條線路的始發站和終點站,其中間的站名為b1,c1,d1,…,x1,y1。
公交車編號:一條線路下有多輛公交車,用公交車的車牌號作為每輛公交車的標識。例:陜A001,陜A002…

圖1 服務端框架
客戶端的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 查詢公交車的具體位置
經過測試,多線程的使用,對卡屏現象有很大改善,巧妙的上傳數據到服務器和從服務器上取數據,減少了連接服務器和取大量數據的時間,避免了用戶長時間的等待。這款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