竇亞玲 ,謝旭偉
(1.湖南師范大學高性能計算與隨機信息處理省部共建教育部重點實驗室;2.湖南師范大學數(shù)學與計算機科學學院,長沙410081)
中國運動人群基數(shù)不斷擴大,運動健身已經(jīng)成為一種生活方式。湖南百里毅行是一項大型群眾性公益體育運動,每年舉辦兩次,每次參加人數(shù)達萬人。全國各地類似的毅行活動也在如火如荼地開展之中。由于百里毅行活動參加人數(shù)多,毅行者的專業(yè)化程度要求不高,而活動的持續(xù)時間較長,路線比較復雜,因此,對活動的組織要求就變得很高。為了能讓百里毅行活動安全、健康和順利地舉辦成功,除了活動的組織方需要投入大量的人力、物力之外,還需要大量的志愿者參與服務(wù)。即便如此,每次活動開展下來,無論是活動組織方還是各類參與人員,都會感受到一些不如意之處。例如:組織方對毅行者到達服務(wù)點的密度無法準確預估,導致服務(wù)點資源準備不足,擁擠現(xiàn)象時有發(fā)生;毅行者對前方服務(wù)點信息不了解,無法合理安排自己的毅行計劃,等等。因此,百里毅行活動迫切需要一種先進的信息化手段來彌補目前模式下的不足,提高活動組織方的組織能力、降低成本、提升服務(wù)質(zhì)量和效率、改善毅行者的運動體驗等。
隨著移動互聯(lián)網(wǎng)技術(shù)的發(fā)展,與運動健身相關(guān)的互聯(lián)網(wǎng)應(yīng)用及手機App大量涌現(xiàn)。有利用互聯(lián)網(wǎng)進行毅行活動宣傳和報名的系統(tǒng);有利用手機地圖發(fā)布毅行路線軌跡的App;更多的應(yīng)用系統(tǒng)關(guān)注的是運動者個體的運動信息的采集、記錄與展現(xiàn)。但到目前為止還沒有一個針對百里毅行活動全過程支撐的應(yīng)用系統(tǒng)。
本文研究的應(yīng)用系統(tǒng)主要是一個手機App系統(tǒng),旨在建立百里毅行組織方、毅行者和贊助商三者之間互相連接與信息交換的系統(tǒng):一方面方便毅行者定位導航、獲取自身健康狀況、求助、接收組織方推送的消息以及贊助商提供的服務(wù)信息;另一方面幫助組織方獲取毅行者的實時位置、安全和健康等信息,有利于有序調(diào)度資源,保障活動順利完成;同時,為商家提供潛在的需求資訊。
本應(yīng)用系統(tǒng)采用三層客戶機/服務(wù)器架構(gòu)[1-3],如圖1所示。
各手機App客戶端通過無線網(wǎng)絡(luò)連接到應(yīng)用服務(wù)器,由應(yīng)用服務(wù)器完成用戶認證、信息的交換與共享等基礎(chǔ)業(yè)務(wù)功能,并將信息存放到數(shù)據(jù)庫中。管理PC客戶端通過瀏覽器訪問Web服務(wù)器,主要負責用戶管理、信息發(fā)布和數(shù)據(jù)統(tǒng)計與顯示等功能。由于管理PC客戶端的主要功能與手機App類似,后面就不再單獨描述了。

圖1 系統(tǒng)總體架構(gòu)圖
手機App客戶端總體結(jié)構(gòu)分為四層,包括UI(用戶界面層)、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層和數(shù)據(jù)存儲層四個部分[1,4]。客戶端總體結(jié)構(gòu)如圖2所示。

圖2 手機App客戶端總體結(jié)構(gòu)圖
(1)用戶界面層
系統(tǒng)中的XML布局文件可用于對界面進行描述,可用來繪制系統(tǒng)自帶的UI組件。用戶也可以引用App環(huán)境中的圖片、顏色、樣式等資源自定義組件并在XML布局文件中描述,Activity用setContentView方法即可引用該XML布局文件。
(2)業(yè)務(wù)邏輯層
開發(fā)者在Activity中引用XML布局文件后,即可在Activity中對邏輯業(yè)務(wù)功能進行處理。用適配器(Data Adapter)完成UI控件與數(shù)據(jù)之間的綁定。用Intent實現(xiàn)多個Activity之間的通信。用Event Listener處理捕捉用戶點擊觸摸等事件。
(3)數(shù)據(jù)持久層
由于App不但需要從本系統(tǒng)服務(wù)端獲取數(shù)據(jù),還要調(diào)用百度地圖接口,從百度地圖服務(wù)器獲取云數(shù)據(jù),同時,為了提高系統(tǒng)響應(yīng)速度,節(jié)約流量以及斷網(wǎng)時還能使用本系統(tǒng)的基本功能,本地也有數(shù)據(jù)的緩存機制。本層提供與網(wǎng)絡(luò)服務(wù)器數(shù)據(jù)交換中的數(shù)據(jù)封裝和解析處理以及與本地緩存數(shù)據(jù)之間的協(xié)調(diào)應(yīng)用等功能。
(4)數(shù)據(jù)存儲層
本系統(tǒng)中的數(shù)據(jù)來源于用戶的錄入操作、手機端設(shè)備的采集以及百度地圖定位服務(wù)(LBS)提供的云數(shù)據(jù),有效數(shù)據(jù)最終都將存儲到網(wǎng)絡(luò)上的數(shù)據(jù)庫服務(wù)器中。
活動組織方、毅行者和贊助商登錄手機App后都有自己權(quán)限內(nèi)的功能。由于贊助商手機App的功能主要是信息發(fā)布和反饋意見收集和統(tǒng)計,故不在本文中詳細描述。
(1)組織方手機App功能設(shè)計
組織方手機App功能模塊結(jié)構(gòu)圖如圖3所示。

圖3 組織方手機App功能模塊結(jié)構(gòu)圖
注冊登錄:組織方的所有人員都需要先注冊(除PC端的系統(tǒng)管理員外),由PC端的系統(tǒng)管理員審核后激活其賬戶并分配給合適的權(quán)限。系統(tǒng)權(quán)限主要分為志愿者、現(xiàn)場組織者、管理者等。激活后的用戶可以使用權(quán)限內(nèi)的功能。
信息發(fā)布瀏覽統(tǒng)計:由管理者發(fā)布原始信息,所有用戶能瀏覽信息并可在該消息后反饋信息;系統(tǒng)自動將信息發(fā)布情況、反饋情況的統(tǒng)計數(shù)據(jù)分類別顯示出來。
路線制定:管理者將本次毅行活動的分組、規(guī)模及路線規(guī)劃信息,標注到百度地圖上,并提供軌跡數(shù)據(jù)的下載服務(wù)。
資源管理:管理者可錄入、修改本次活動的所有資源,包括志愿者、現(xiàn)場組織者、醫(yī)護人員、飲食、車船等交通工具、垃圾桶、廁所、休息點、帳篷、住宿等的信息,對這些資源在毅行路線上的分配給出方案,并在百度地圖上標記,提供與軌跡數(shù)據(jù)一致的下載服務(wù)。志愿者、現(xiàn)場組織者能對所在區(qū)域的資源變化情況提交修改請求,由管理者審核后生效。
報名與繳費管理:管理者對毅行者的報名情況、組隊情況以及繳費情況進行審核,給出是否通過的意見。
檢錄簽到及退賽管理:通過掃描毅行者手機顯示的二維碼,完成對應(yīng)的功能,并將毅行者信息、掃碼時間和地點、操作者信息、當前操作的事項等記錄到數(shù)據(jù)庫中。
物資及獎證發(fā)放:通過掃描毅行者手機顯示的二維碼,自動核對其信息(包括是否符合條件以及是否已發(fā)等)后完成對應(yīng)的功能,并記錄相關(guān)信息。
人員交互:包括人員查找、定位、呼叫以及文字交流等功能。
救援管理:接收求助請求(能顯示求助位置),救援方案生成與發(fā)布(相關(guān)人員將收到救援的提示信息),管理救援預案。
熱力圖與過程回放:顯示指定時刻或時間段的全局或指定區(qū)域的熱力圖或熱力圖變化;顯示主要的統(tǒng)計信息;回放指定人員的軌跡過程。
(2)毅行者手機App功能設(shè)計
毅行者手機App功能模塊結(jié)構(gòu)圖如圖4所示。
報名登錄:毅行者填寫完整的報名信息,通過審核后即可登錄,登錄之后確定分組和組隊情況。
登錄之后可以查看系統(tǒng)發(fā)布的信息,并可以反饋意見;可以下載路線軌跡及資源分布信息,以備脫網(wǎng)時仍可以在地圖上顯示與查看。在規(guī)定的檢錄點可以通過顯示本人實時生成的二維碼完成簽到、領(lǐng)取物資或獎證的功能,也可提交退賽的請求。
個人狀態(tài)顯示功能與傳統(tǒng)的健身運動App的功能類似,能顯示本人的位置、海拔、速度/步速、每公里速度、完成路程/步數(shù)、能量消耗等信息。
人員互動功能將在地圖上顯示本隊人員的圖標、名字與位置,點擊本隊人員的圖標即可與之文字互動。也可以點擊資源圖上志愿者、現(xiàn)場組織者、醫(yī)護人員的圖標,向其發(fā)起文字互動。
當遇到緊急情況需要求助時,可以使用求助功能,系統(tǒng)將通過救援管理機制快速響應(yīng)。
熱力圖與過程回放:顯示當前的全局熱力圖情況;回放自己和本隊指定人員的軌跡過程。

圖4 毅行者手機App功能模塊結(jié)構(gòu)圖
本系統(tǒng)選擇MySQL作為后臺數(shù)據(jù)庫管理系統(tǒng)。與毅行者用戶相關(guān)的數(shù)據(jù)庫表主要包括用戶信息表、用戶注冊狀態(tài)表、用戶分組表,用戶軌跡表,用戶簽到表,用戶運動信息表,用戶事件表等;與活動相關(guān)的信息表包括:毅行路線表、簽到點表、物資表、人力資源表、資源分配表、通知信息表、活動事件表、互動信息表等。
用戶信息表是本系統(tǒng)的基礎(chǔ),其具體定義如表1所示。其中,用戶ID是與其他表信息關(guān)聯(lián)的重要字段,而用戶權(quán)限UP決定了該用戶的角色是毅行者、志愿者、組織者還是管理者等。

表1 用戶信息表
移動定位技術(shù)就是將獲取到的手機或移動終端的位置信息顯示在移動終端的電子地圖上[5-7]。本系統(tǒng)利用百度地圖API提供的定位功能接口[8-9],通過調(diào)用百度地圖開發(fā)接口實現(xiàn)手機的定位功能。
將定位功能與方向傳感器結(jié)合起來,可以控制定位的圖標方向,也即定位圖標會隨著手機方向的轉(zhuǎn)動而轉(zhuǎn)動,從而實現(xiàn)有方向定位的目的。方向傳感器可以監(jiān)測到手機在X,Y,Z軸方向上的偏移量,但由于手機一般是在一個平面內(nèi)轉(zhuǎn)動,所以只需要用方向傳感器去實時監(jiān)測X軸方向的偏移量即可。當X軸方向的當前偏移值與上一次偏移值的絕對值超過一個臨界值時,就可以判定方向發(fā)生改變。
用戶輸入簽到點即可獲取百里毅行步行路線導航,也可點擊簽到點的標志進行導航到特定的簽到點。地圖定位及導航界面如圖5、圖6所示。

圖5 地圖定位

圖6 路線導航
使用百度地圖API之前需要到指定的網(wǎng)址http://lbsyun.baidu.com/apiconsole/key申請 APIKey密鑰,然后把百度地圖開發(fā)jar包復制到自己的工程app/libs目錄下,配置好后調(diào)用。
手機設(shè)備大都內(nèi)置了各種功能傳感器,開發(fā)者可以通過手機操作系統(tǒng)平臺提供的統(tǒng)一傳感器硬件抽象層接口來調(diào)用。下面以方向傳感器的調(diào)用為例說明開發(fā)方法(計步器等類似):
private SensorManagermSensorManager;
private SensormSensor;
public MyOrientationListener(Contextcontext)
{this.mContext=context;}
public voidstart()
{mSensorManager=(SensorManager)mContext.
getSystemService(Context.SENSOR_SERVICE);
if(mSensorManager!=null)//獲得傳感器服務(wù)
mSensor=mSensorManager.getDefaultSensor(Sensor.TYPE ORIENTATION);//獲得方向傳感器
if(mSensor!=null)
mSensorManager.registerListener(this,mSensor,SensorManager.SENSOR_DELAY UI);//注冊監(jiān)聽器
}
@Override//方向改變判斷
public voidonSensorChanged(SensorEventevent)
{if(event.sensor.getType()==Sensor.TYPE_ORIENTATION)
{float x=event.values[SensorManager.DATA_X];
if(Math.abs(x-lastX)>1.0)
{if(mOnOrientationListener!=null)
mOnOrientationListener.onOrientationChanged(x);}}
lastX=x;}
實時統(tǒng)計圖功能以JavaScript開發(fā)技術(shù)為主,引入jQuery與Highcharts技術(shù),實現(xiàn)功能強大且美觀的實時統(tǒng)計圖表,包括曲線圖、柱狀圖、餅狀圖、散狀點圖、區(qū)域圖和綜合圖表[10-12]。實現(xiàn)的方法主要有以下兩步。
首先需要配置開發(fā)環(huán)境,在HTML頁面引入jQuery與Highcharts庫,代碼如下:
然后從數(shù)據(jù)庫獲取需要的數(shù)據(jù),加載并設(shè)置數(shù)據(jù)到頁面,調(diào)用highcharts(json)方法將數(shù)據(jù)傳入,最終實現(xiàn)Highcharts統(tǒng)計圖。其核心代碼如下:
var json={};
json.chart=chart;
json.title=title;
json.yAxis=yAxis;
json.tooltip=tooltip;
json.series=series;
json.plotOptions=plotOptions;
$('#container').highcharts(json);
其中一部分的實現(xiàn)效果如圖7至圖10所示。

圖7 毅行者年齡層次及男女比例分布圖

圖8 毅行者各簽到點人數(shù)及男女比例分布圖
消息的推送采用個推推送技術(shù)實現(xiàn)[13-15]。首先,手機App端集成個推SDK,應(yīng)用服務(wù)器端集成個推服務(wù)器提供的推送API;然后,系統(tǒng)按照圖11所示的順序進行消息推送處理。
第一步:手機App調(diào)用個推SDK初始化接口,獲取推送標識ClientID(簡稱CID);
第二步:手機App將CID上傳到應(yīng)用服務(wù)器進行保存。通常需要將該CID與相應(yīng)的用戶ID進行關(guān)聯(lián),以便后續(xù)針對特定用戶進行消息推送;
第三步:應(yīng)用服務(wù)器需要給指定CID的設(shè)備發(fā)送透傳數(shù)據(jù)(Payload)時,調(diào)用個推服務(wù)器消息推送接口,將消息下發(fā)給相應(yīng)手機App下的個推SDK后臺服務(wù),進而將Payload發(fā)送給手機App進行后續(xù)處理。手機App可以實時接收到后臺發(fā)送的消息。

圖9 計步器數(shù)據(jù)顯示

圖10 毅行者平均步速動態(tài)走勢圖
個推SDK服務(wù)在手機平臺上可以長期后臺運行。由于采用了特殊設(shè)計的省電省流量技術(shù),后臺服務(wù)對手機設(shè)備的影響非常小。當網(wǎng)絡(luò)不穩(wěn)定時,個推SDK服務(wù)處于離線狀態(tài),待網(wǎng)絡(luò)條件恢復后,會立即重連上線,并且重新接收在離線期間服務(wù)端推送的消息。圖12是手機App接收到的消息列表示意圖。
本文針對全國越來越廣泛開展的毅行活動中缺乏有效的信息化管理與服務(wù)手段的問題,以湖南百里毅行活動中常見的需求為背景,設(shè)計實現(xiàn)了以手機App為主要操作客戶端的應(yīng)用系統(tǒng)。該系統(tǒng)基于成熟的手機App開發(fā)技術(shù),以百度地圖為支撐,通過調(diào)用智能手機傳感器以及集成個推推送技術(shù),較好地滿足了設(shè)計要求。該應(yīng)用系統(tǒng)的功能較為完善,實現(xiàn)了百里毅行活動的全程管理,能較好地提高百里毅行活動組織方工作人員的工作效率和服務(wù)質(zhì)量,輔助毅行者更好地完成百里毅行活動以及為活動贊助商提供一個有針對性的宣傳平臺。

圖11 個推推送的處理順序示意圖

圖12 手機APP接收到的推送消息列表
[1]劉亞秋,吳雙滿,韓大明,等.基于云計算的手機智能出租車呼叫系統(tǒng)[J].計算機工程,2014,40(4):14-18.
[2]嚴武軍.基于Android校園活動App系統(tǒng)設(shè)計與實現(xiàn)[J].現(xiàn)代計算機,2015(28):70-71.
[3]王勇,李業(yè)芝,王瑛,等.基于工作流和智能手機的城市綜合管理平臺[J].計算機工程與設(shè)計,2014,35(12):4390-4394.
[4]李佐彬.Android開發(fā)入門與實戰(zhàn)體驗[M].北京:機械工業(yè)出版社,2011.
[5]楊國林.GPS技術(shù)在導航電子地圖中的應(yīng)用研究[J].科技信息(學術(shù)版),2006(3):70-71。
[6]李業(yè)芝,王勇,王瑛.基于GIS和智能手機的監(jiān)控與應(yīng)急指揮系統(tǒng).計算機工程與設(shè)計,2014,35(9):3326-3331.
[7]鄭偉.基于Android的百度地圖車輛定位系統(tǒng)設(shè)計與實現(xiàn)[D].呼和浩特:內(nèi)蒙古大學,2014.
[8]杜傳明.百度地圖API在小型地理信息系統(tǒng)中的應(yīng)用[J].測繪與空間地理信息,2011,34(2):152-153.
[9]張凱,陳峰,杜警.城市公交實時位置手機查詢系統(tǒng)設(shè)計[J].計算機工程與科學,2014,36(7):1296-1300.
[10]孫更新,賓晟,宮生文.Java程序開發(fā)大全[M].北京:中國鐵道出版社,2010.
[11]Richard Monson-Haefel.J2EE Web Services[M].Addison-Wesley Longman Publishing Co.,Inc.,2003.
[12]張俊杰,張海燕,羅銳.基于Android平臺的移動GIS研究與實現(xiàn)[J].計算機工程與設(shè)計,2013,34(9):3322-3326.
[13]劉永玲,劉兀,郭克華.一種面向移動終端的自適應(yīng)消息推送策略[J].計算機工程與科學,2013,35(12):114-119.
[14]姜妮,張宇,趙志軍.基于消息隊列遙測傳輸?shù)耐扑拖到y(tǒng)[J].計算機工程,2015,41(9):1-6.
[15]王克鋒.基于Android的信息推送管理系統(tǒng)的設(shè)計和實現(xiàn)[D].大連:大連理工大學,2012.