董健
摘 要:在快速發(fā)展的現(xiàn)代都市生活中,人們追求著各種經(jīng)濟利益最大化,資源成本最小化,出行也都需要進行安排和考量,根據(jù)以上需求,設(shè)計一款有關(guān)出行查詢的城市公交查詢系統(tǒng)軟件。該軟件提供線路查詢、站點查詢、線路或站點收藏、地圖信息查詢等功能,根據(jù)用戶個人喜好可更換界面主題顏色,根據(jù)用戶所在城市,自動定位,切換城市公交數(shù)據(jù)。通過以上功能的設(shè)計與開發(fā)滿足用戶出行需求與體驗。
關(guān)鍵詞:線路查詢;站點查詢;地圖;城市數(shù)據(jù);IOS
中圖分類號:TP399 文獻標識碼:A
1 引言(Introduction)
隨著現(xiàn)代科技的飛速發(fā)展,智能手機已廣泛普及,而占有主要市場的Android系統(tǒng)和IOS系統(tǒng)成為當下人們的首選,尤其在蘋果公司對其IOS系統(tǒng)下產(chǎn)品的不斷更新與創(chuàng)新[1],選擇IOS系統(tǒng)智能手機的人們更是不在少數(shù);另外,隨著科技的發(fā)展,人們的日常生活也越來越智能化、便捷化,因此,在這兩大背景需求下,基于IOS系統(tǒng)的出行軟件成為一種需求[2]。通過設(shè)計開發(fā)基于IOS的城市公交查詢系統(tǒng),在挖掘人們?nèi)粘3鲂猩钪械男枨蟮倪^程中,我們將更加了解現(xiàn)今社會人們的生活狀態(tài)和生活方式,而當軟件推行后,不僅為人們的生活帶來便利,也是對人文科技的發(fā)展的推進與幫助,是科技與生活的結(jié)合,使科技生活化[3]。
2 系統(tǒng)架構(gòu)設(shè)計(System architecture design)
2.1 系統(tǒng)技術(shù)平臺架構(gòu)分析
MVC(Model View Controller)是模型(Model)、視圖(View)、控制器(Controller)的縮寫,它是一種軟件設(shè)計模式,至今已廣泛應用于用戶交互應用程序中[4]。模型對象封裝了應用程序的所有數(shù)據(jù),同時定義了操控和處理這些數(shù)據(jù)的邏輯和運算。例如,模型對象可以指地址簿中的聯(lián)系人,用戶可以在視圖界面中進行創(chuàng)建或修改數(shù)據(jù),這些操作會通過控制器對象傳達出去,最終創(chuàng)建或更新模型對象。當模型對象更改時,操作信息會通知控制器對象,再由控制器對象控制更新相應的視圖對象。在應用程序中用戶可以看得到的對象就是視圖對象[5]。視圖對象是用來顯示來自應用程序模型對象的數(shù)據(jù),并且使該數(shù)據(jù)可以被編輯,變相地完成人機交互??刂破鲗ο蟪洚斠晥D對象和模型對象之間的媒介。因此,控制器對象是同步管道程序,通過控制器對象,視圖對象可以了解模型對象的更改,相反,模型對象也可以了解視圖對象的更改[6]。
MVC的交流模式如圖1所示。
2.2 系統(tǒng)功能架構(gòu)設(shè)計
(1)線路查詢功能設(shè)計:界面上顯示所有線路(看不見的線路可以滑動觸屏查看),設(shè)置搜索框,根據(jù)用戶需要查詢指定線路;點擊所選線路,進入到具體線路的查看界面。
(2)站點查詢功能設(shè)計:界面上顯示所有站點(看不見的站點可以滑動觸屏查看),設(shè)置搜索框,根據(jù)用戶需要查詢指定站點,可以查看經(jīng)過該站點的所有線路,同時還能實現(xiàn)收藏該站點功能。
(3)收藏功能設(shè)計:根據(jù)用戶選擇,界面顯示所收藏的線路或站點,用戶可以對所收藏的線路或站點進行刪除操作。
(4)地圖信息功能設(shè)計:界面上根據(jù)用戶需要自行選擇一般地圖或是衛(wèi)星地圖或是混合地圖??梢赃M行周邊搜索、地點及概括性信息搜索。
(5)系統(tǒng)設(shè)置功能設(shè)計:在系統(tǒng)設(shè)置界面可以設(shè)置主題顏色,也可以根據(jù)用戶選擇更改查詢的城市信息。
根據(jù)以上分析,系統(tǒng)軟件的功能結(jié)構(gòu)圖如圖2所示。
3 系統(tǒng)數(shù)據(jù)庫的設(shè)計(Design of system database)
數(shù)據(jù)庫中必然要出現(xiàn)的是一個城市的所有線路,以及每條線路上的所有站點,但是各條線路上可能存在站點的重合,因此,需要用相應的算法縮小所需占用的數(shù)據(jù)空間節(jié)約資源,進而提高軟件的運行效率。
單從線路角度出發(fā),每條線路都有多于一個的站點,同樣從站點角度出發(fā),每個站點也至少有一條線路會經(jīng)過,所以也可以構(gòu)成一個相對簡單的映射,將所有站點的映射疊加于一張圖內(nèi),如圖3所示。
根據(jù)系統(tǒng)功能設(shè)計,涉及線路和站點,為了縮小數(shù)據(jù)庫占用率,提高數(shù)據(jù)使用率,因此根據(jù)線路及站點分別制作一張表,即lines表和stations表。lines表中設(shè)字段id、lineName和intro,id是線路的編號,每條線路有且僅有唯一的編號;line-Name是線路名稱;intro是對線路的具體介紹,包括發(fā)車時間、收費等。同樣,在stations表中,也設(shè)有id和stationName,分別是站點的編號和名稱。線路與站點之間存在固定但無規(guī)律的映射關(guān)系,所以需要再制作一張表relation表將lines表和stations表聯(lián)系到一起。
4 模塊的具體實現(xiàn)(Implementation of module)
4.1 線路查詢模塊的實現(xiàn)
搜索框搜尋的過程實際是當輸入文字信息,系統(tǒng)會自動遍歷數(shù)據(jù)庫中l(wèi)ines表中的線路名稱,將這些名稱與輸入信息進行匹配,匹配成功的線路通過其線路id將從relation表獲取該線路上的站點id,再由站點id從stations表中獲取站點名稱,最終顯示在界面上,具體功能界面設(shè)置如圖4所示。
搜索功能實現(xiàn)方法如下:
cell.textLabel.text=[arrayFilters objectAtIndex:indexPath.row]; //輸入線路名稱
int lineIndex=[[arrayFilterIndexs objectAtIndex:indexPath.row]intValue]; //獲取線路的索引
long startIndex=[[[sqliteTool getStationIdBaseOnLineId:lineIndex]firstObject]integerValue]; //從relation表獲取起始站索引station_id
NSString*startStationName=[arrayAllSatation objectAtIndex:startIndex]; //從所有站點名獲取起點站站點名
long endIndex=[[[sqliteTool getStationIdBaseOnLineId:lineIndex]lastObject]integerValue]; //獲取終點站索引
NSString*endStationName=[arrayAllSatations objectAtIndex:endIndex]; //獲取終點站站點名
cell.detailTextLabel.text=[NSString stringWithFormat:@"%@-->%@",startStationName,endStationName]; //顯示起點到終點
//所選線路參數(shù)傳遞出去,實現(xiàn)界面跳轉(zhuǎn)
NSString*lineIndex=[arrayFilterIndexs objectAtIndex:indexPath.row];
[self performSegueWithIdentifier:@"lineDetail" sender:lineIndex];
4.2 地圖信息模塊的實現(xiàn)
地圖信息顯示地圖界面,主要顯示當前定位信息和周邊服務查詢,并可以調(diào)用查看網(wǎng)頁地圖信息[7]。地圖信息模塊中,首先通過定位獲取所在位置的經(jīng)緯度,使用反地理編碼得到詳細信息,包括地名、所在區(qū)域、街道等。地圖上的詳細信息實際對應著相應的經(jīng)緯度,通過反地理編碼,即可通過經(jīng)緯度獲取相應的具體信息,具體界面結(jié)構(gòu)如圖5所示。
CLLocationCoordinate2D center=userLocation.location.coordinate;//賦值經(jīng)緯度
[self reverseGeocode:center]; //反地理編碼:根據(jù)經(jīng)緯度得到詳細信息
在輸入框內(nèi)輸入所要查詢的具體信息,如果地址錯誤或地圖中沒有,則彈出對話框提示錯誤;如果信息正確,則進行編碼后確定經(jīng)緯度位置,由大頭針出現(xiàn)標識,附近搜索與此類似:
[self.geocoder geocodeAddressString:param completionHandler:^(NSArray *placemarks,NSError*error)]; //進行編碼,獲得經(jīng)緯度
myAnnotition*anno=[[myAnnotition alloc]init]; //根據(jù)經(jīng)緯度添加大頭針
anno.coordinate=coordinate;
anno.title=param;
anno.subtitle=pm.name;
[self.myMap addAnnotation:anno];
添加導航線路,確定起點和終點,通過地理編碼獲得經(jīng)緯度信息,設(shè)定好方向?qū)ο螅诘貓D上,計算出兩個經(jīng)緯度之間可以連接的線路,然后描畫出來,描畫出來的線路可以設(shè)置顏色和粗細,如圖5所示。
5 結(jié)論(Conclusion)
該款基于IOS的城市公交查詢系統(tǒng)實現(xiàn)了線路的查詢和收藏、站點的查詢和收藏以及定位和周邊服務查詢等。界面簡潔,數(shù)據(jù)算法也簡單,耗費資源成本低,符合用戶的需求,但是在用戶進一步優(yōu)化體驗上還需要僅需一步加強。
參考文獻(References)
[1] Christian D'Orazio,Kim-Kwang Raymond Choo.An Adversary Model to Evaluate DRM Protection of Video Contents on iOS Devices[J].Computers & Security,2016,2:94-110.
[2] Hou-Tsan Lee,et al.Mobile Detecting Robot Controlled by Smartphone Based on iOS[J].Engineering,2014,06(12):750-757.
[3] Farhood Norouzizadeh Dezfouli,Ali Dehghantanha,Brett Eterovic-Soric,Kim-Kwang Raymond Choo.Investigating Social Networking Applications on Smartphones Detecting Facebook,Twitter,LinkedIn and Google+ Artefacts on Android and IOS Platforms[J].Australian Journal of Forensic Sciences,2016,48(4):469-488.
[4] 田趙洋,劉光燦.基于“萌否電臺”API的iOS客戶端開發(fā)[J].計算機應用與軟件,2015,(03):89-92.
[5] 李蕾,李曉麗.基于iOS手持終端的移動學習資源設(shè)計研究[J].中國電化教育,2014,(12):93-97.
[6] 劉鵬,龐小平,艾松濤.基于Android和iOS的極地移動信息平臺設(shè)計與開發(fā)[J].極地研究,2015,(01):98-103.
[7] 鄭貴林,桂初晴.“互聯(lián)網(wǎng)+”iOS智能家居系統(tǒng)設(shè)計與實現(xiàn)[J].電視技術(shù),2016,(05):26-29.
[8] 石銳,等.一種面向iOS系統(tǒng)的雙緩沖改進算法及其應用[J].中國科學院大學學報,2015,(04):549-555.
作者簡介:
董 ?。?980-),男,碩士,講師.研究領(lǐng)域:多媒體信息處理.