徐鋒 吳琰 劉音 淮南師范學(xué)院 電子工程學(xué)院
在公用事業(yè)、城市管理、社會(huì)治安、交通物流、大型工礦企業(yè)等部門行業(yè)中存在大量的例行或臨時(shí)的巡檢工作需求。人工手寫工作簿巡檢、直接標(biāo)記法、基于條形識(shí)別法等傳統(tǒng)巡檢方式存在諸多問(wèn)題;同時(shí)傳統(tǒng)的巡檢平臺(tái)較專一,開(kāi)發(fā)維護(hù)成本高,重復(fù)勞動(dòng)多,不利于推廣,還存在無(wú)法現(xiàn)場(chǎng)指導(dǎo)、管理成本高等缺點(diǎn)。因此,傳統(tǒng)巡檢方式在管理、巡查和考評(píng)上已不能滿足需求,GIS 可靈活顯示管網(wǎng)、設(shè)備以及各類專業(yè)圖層,提供管理、分析、綜合和查詢空間數(shù)據(jù)的智能化手段,提高了平臺(tái)的決策科學(xué)性、可視化和信息化程度 。
針對(duì)傳統(tǒng)巡檢方式存在的問(wèn)題,結(jié)合移動(dòng)GIS 應(yīng)用系統(tǒng)的關(guān)鍵技術(shù),提出一種基于Android 和BaiduMap(百度地圖)的訂單式移動(dòng)巡檢系統(tǒng)的設(shè)計(jì)方案,系統(tǒng)包括移動(dòng)用戶端App 和基于B/S 架構(gòu)的后臺(tái)管理端兩部分。用戶端通過(guò)調(diào)用百度地圖API 實(shí)現(xiàn)GIS 定位與路徑導(dǎo)航功能,接收業(yè)務(wù)訂單,支持現(xiàn)場(chǎng)完成巡檢業(yè)務(wù)報(bào)單并上傳;后臺(tái)管理端通過(guò)SQL 數(shù)據(jù)庫(kù)對(duì)業(yè)務(wù)數(shù)據(jù)進(jìn)行存儲(chǔ)與管理,制定工作計(jì)劃,發(fā)布巡檢業(yè)務(wù)訂單,推送公共消息通告。系統(tǒng)旨在幫助有巡檢工作需求的行業(yè)部門靈活布置規(guī)劃巡檢任務(wù),加強(qiáng)對(duì)巡檢工作的把控,增強(qiáng)數(shù)據(jù)分析,提高巡檢工作效率。
Android 系統(tǒng)使用Linux 內(nèi)核,Android 應(yīng)用程序的開(kāi)發(fā)有兩種方式:程序?yàn)镴ava應(yīng)用,所有的程序軟件完全應(yīng)用于Dalvik虛擬機(jī);使用JNI 原生庫(kù)的Java 應(yīng)用程序。Android 應(yīng)用程序框架由Java服務(wù)、應(yīng)用程序編程接口、公共運(yùn)行庫(kù)、原生庫(kù)以及原生服務(wù)等組成。Android 系統(tǒng)架構(gòu)大致可分為四層,分別包括底層的Linux 內(nèi)核層、系統(tǒng)運(yùn)行庫(kù)層、應(yīng)用框架層,以及上層的應(yīng)用層。
百度地圖Android 版SDK 為基于移動(dòng)客戶端開(kāi)發(fā)LBS 應(yīng)用提供基礎(chǔ)定位能力,支持Android1.5 以及以上設(shè)備,使用百度Android定位SDK 必須注冊(cè)GPS 和網(wǎng)絡(luò)使用權(quán)限。定位SDK 采用GPS、基站、Wi-Fi 信號(hào)混合定位模式返回當(dāng)前所處的位置信息,而反地理編碼功能是解析當(dāng)前所處的位置坐標(biāo),獲得詳細(xì)的地址描述信息。定位SDK 支持多樣化服務(wù)與定位策略,用戶可通過(guò)設(shè)置不同的定位時(shí)間間隔、選擇不同的定位服務(wù)模式、定制不同的定位結(jié)果信息來(lái)滿足自身需求。
移動(dòng)GIS 應(yīng)用系統(tǒng)可以利用目前的普適性數(shù)據(jù)庫(kù)系統(tǒng),普適性數(shù)據(jù)庫(kù)包括PostgreSQL、Oracle、 Microsoft SQL Server 等。Microsoft SQL Server 是由Microsoft 開(kāi)發(fā)的一款數(shù)據(jù)庫(kù),如今其應(yīng)用范圍十分廣泛,最新版本為SQL Server 2017,增加了數(shù)據(jù)庫(kù)引擎新功能(數(shù)據(jù)保護(hù)、訪問(wèn)控 制、訪問(wèn)監(jiān)測(cè))、提高了Linux 版本的安全性、提升了高可用性和災(zāi)害恢復(fù)能力、 增強(qiáng)了自適應(yīng)查詢處理功能等等,該數(shù)據(jù)庫(kù)支持C、VB、ASP、Java、JSP、PHP 等多種計(jì)算機(jī)語(yǔ)言通過(guò)接口對(duì)其進(jìn)行訪問(wèn)。
IIS(Internet Information Services)是Microsoft 公司的服務(wù)器軟件。IIS 是隨Windows 操作系統(tǒng)捆綁發(fā)行的,IIS 在Windows Server上可以免費(fèi)使用,IIS 與Windows 平臺(tái)緊密結(jié)合,支持HTML、ASP、ASP.NET、JSP 等。
基于簡(jiǎn)單有效、友好易用的設(shè)計(jì)目的,系統(tǒng)的總體框架設(shè)計(jì)如圖1 所示。表現(xiàn)層包括移動(dòng)用戶端和基于B/S 架構(gòu)的巡檢管理端;GIS 服務(wù)層和Web 服務(wù)器為應(yīng)用層,管理端 應(yīng)用Web 服務(wù)器通過(guò)Web 瀏覽器和 Web Services 發(fā)送和接受數(shù)據(jù),而移動(dòng)用戶端通過(guò)GIS 服務(wù)層獲取位置定位與路徑導(dǎo)航功能;SQL Server 業(yè)務(wù)數(shù)據(jù)庫(kù)為數(shù)據(jù)層,提供相應(yīng)的空間和業(yè)務(wù)數(shù)據(jù)存儲(chǔ)與管理服務(wù)。
圖1 系統(tǒng)總體框架
移動(dòng)用戶端是由巡檢人使用的基于Android 平臺(tái)的客戶端APP,開(kāi)發(fā)編程語(yǔ)言為Java,??蛻舳斯δ苣K圖如圖2 所示。
圖2 移動(dòng)用戶端功能模塊
(1)定位模塊包括當(dāng)前位置定位、目標(biāo)位置定位、路徑查詢與導(dǎo)航等功能。通過(guò)調(diào)用百度地圖API 在App 訂單業(yè)務(wù)的工作界面上顯示地圖,對(duì)當(dāng)前或目標(biāo)位置進(jìn)行定位與導(dǎo)航,默認(rèn)比例尺為200 米,默認(rèn)中心點(diǎn)為使用者當(dāng)前位置。
(2)業(yè)務(wù)模塊包括業(yè)務(wù)訂單和業(yè)務(wù)報(bào)單兩部分。管理端向特定用戶發(fā)送業(yè)務(wù)訂單文件,用戶點(diǎn)擊打開(kāi)訂單,通過(guò)點(diǎn)擊訂單中地圖界面的目標(biāo)位置氣泡標(biāo)識(shí)即可進(jìn)行路徑規(guī)劃與導(dǎo)航;業(yè)務(wù)報(bào)單內(nèi)容包括經(jīng)緯度地址信息、現(xiàn)場(chǎng)業(yè)務(wù)情況說(shuō)明包括照片、視頻、文字等信息,報(bào)單確認(rèn)生成后上傳并存儲(chǔ)在管理端服務(wù)器的關(guān)系數(shù)據(jù)庫(kù)中。
(3)消息模塊包括系統(tǒng)動(dòng)態(tài)、部門通知公告等功能。管理員在服務(wù)器后臺(tái)管理端可以新建、編輯、推送相關(guān)公共信息;移動(dòng)用戶端在工作主頁(yè)界面以標(biāo)題循環(huán)移動(dòng)的形式展現(xiàn),點(diǎn)擊標(biāo)題進(jìn)入相應(yīng)消息界面。
其中移動(dòng)用戶端業(yè)務(wù)功能模塊中的業(yè)務(wù)報(bào)單工作流程如圖3 所示,移動(dòng)端用戶通過(guò)點(diǎn)擊業(yè)務(wù)訂單界面的“執(zhí)行”按鍵進(jìn)入業(yè)務(wù)報(bào)單界面,點(diǎn)擊拍攝或錄像按鍵后調(diào)用移動(dòng)端設(shè)備(手機(jī))的相機(jī)進(jìn)行拍照或攝像,拍攝完成后進(jìn)入編輯預(yù)覽界面,然后在完成文字信息的錄入編輯后,點(diǎn)擊“確認(rèn)”按鍵合并圖像和文字?jǐn)?shù)據(jù),生成可視化報(bào)單上傳至管理端服務(wù)器。
圖3 業(yè)務(wù)報(bào)單工作流程
圖4 巡檢管理端功能模塊
系統(tǒng)管理端服務(wù)器基于B/S 架構(gòu),前端采用HTML5+JavaScript 實(shí)現(xiàn),后臺(tái)數(shù)據(jù)庫(kù)為Microsoft SQL Server 2012。前端通過(guò)HTML 視圖顯示和操作,使用HTML5 WebSocket技術(shù)向移動(dòng)用戶端實(shí)時(shí)推送消息,后臺(tái)通過(guò)Json 數(shù)據(jù)向移動(dòng)客戶端返回相關(guān)請(qǐng)求數(shù)據(jù)。
管理端有業(yè)務(wù)管理、消息管理、用戶管理3 個(gè)主要功能, 如圖4 所示,各功能模塊分別包含對(duì)各自管理對(duì)象的創(chuàng)建、修改、刪除、發(fā)送/接收、保存等操作功能。
系統(tǒng)數(shù)據(jù)模型根據(jù)需求分析包含以下4 個(gè)實(shí)體:用戶(巡檢員/管理員)、業(yè)務(wù)訂單、業(yè)務(wù)報(bào)單、消息??蛻舳薊-R 關(guān)系圖如圖5 所示,其中用戶(巡檢員)實(shí)體的屬性包括工號(hào)、姓名、手機(jī)號(hào)、密碼等;業(yè)務(wù)報(bào)單實(shí)體的屬性包括報(bào)單編號(hào)、用戶工號(hào)、經(jīng)緯度、報(bào)單類型、報(bào)單名稱、報(bào)單內(nèi)容等。
圖 5 客戶端E-R 圖
表1 業(yè)務(wù)報(bào)單數(shù)據(jù)表
數(shù)據(jù)字典(Data dictionary)是指用特定的格式記錄數(shù)據(jù)的每個(gè)屬性信息,數(shù)據(jù)字典提供了信息管理系統(tǒng)所必需的數(shù)據(jù)元素和基本信息定義,提供了單個(gè)數(shù)據(jù)元素所包含的屬性結(jié)構(gòu),每個(gè)數(shù)據(jù)元素包括名稱、定義、所屬類名稱、數(shù)據(jù)類型、有效值范圍等,并以字典順序?qū)⑺麄兘M織起來(lái),使用戶和分析員對(duì)所有的輸入、輸出、存儲(chǔ)成分和中間計(jì)算(處理)有共同的理解。根據(jù)本系統(tǒng)需求分析及E-R 圖設(shè)計(jì),系統(tǒng)數(shù)據(jù)庫(kù)包括Users(用戶)、News(消息)、Order(業(yè)務(wù)訂單)和Report(業(yè)務(wù)報(bào)單)等4 張數(shù)據(jù)表,其中業(yè)務(wù)報(bào)單數(shù)據(jù)表如表1 所示。
系統(tǒng)平臺(tái)定義了3 種用戶及權(quán)限,系統(tǒng)管理員負(fù)責(zé)系統(tǒng)兩端的安全運(yùn)行及維護(hù)升級(jí);巡檢管理員通過(guò)服務(wù)器管理端進(jìn)行消息推送、業(yè)務(wù)訂單發(fā)布、業(yè)務(wù)數(shù)據(jù)庫(kù)管理與分析等操作;巡檢員通過(guò)登錄移動(dòng)用戶端的App 接收訂單,業(yè)務(wù)訂單界面如圖6 所示,在巡檢現(xiàn)場(chǎng)完成可視化報(bào)單并上傳管理端服務(wù)器。
圖6 業(yè)務(wù)訂單界面
圖 7 目標(biāo)位置定位界面
圖8 業(yè)務(wù)報(bào)單界面
地圖定位功能界面如圖7 所示,程序模塊采用Android 的Fragment 類來(lái)實(shí)現(xiàn)。首先初始化該模塊Fragment 的布局,導(dǎo)入baidumapapi.jar 包,通過(guò)新建initMapView()方法用于顯示地圖及定位,部分關(guān)鍵代碼如下:
...
myMapView = (MapView) fi ndViewById(R.id.myMapView);
myL o c at ionO verL ay = new MyL o c at ion(t h i s,myMapView);
myMapView.getOverlays().add(myLocationOverLay);//監(jiān)聽(tīng)我的位置
myLocatListener = new LocationListener() {
public void onLocationChanged(Location location) {
if(location != null){
mylon g t it u d e=(i nt)(lo c at ion.getLatitude()*(1E6));
m y l a t i t u d e=(i n t)(l o c a t i o n.getLongitude()*(1E6));
P l a c e P o i n t p d = n e w PlacePoint(mylongtitude, mylatitude);
myPlacePoint = pd;
m M apView.getCont rol ler().animateTo(pd);
}
}
};
...
在業(yè)務(wù)報(bào)單模塊ReportFragment 類的onCreate()方法中設(shè)置文本域、拍照/錄像、報(bào)送等三個(gè)主要按鍵的監(jiān)聽(tīng)動(dòng)作,拍攝功能通過(guò)openCamera()方法響應(yīng)并實(shí)現(xiàn),其中設(shè)置拍照按鍵監(jiān)聽(tīng)部分代碼如下:
takePhoto.setOnClickListener(new View.OnClickListener()
{
Public void onClick(View v){
openCamera(getActivity());}}移動(dòng)用戶端通過(guò)使用Okhttp3 中的MultipartBody 插件來(lái)實(shí)現(xiàn)業(yè)務(wù)報(bào)單的網(wǎng)絡(luò)上傳,部分關(guān)鍵代碼如下:
...
OkHttpClient okHttpClient = new OkHttpClient();
MultipartBody.Builder requestBody=
new MultipartBody.Builder().setType(MultipartBody.FORM);
RequestBody.addFormDataPart(“UserId”,String.valueOf(userId));
…RequestBody.addFormDataPart(“ReportContent”,“Rep ort”);
If(tempFile.length()>0) {
RequestBody body=RequestBody.create(MediaType.parse(“image/*”),tempFile);
String filename=tempFile.getName();
requestBody.addFormDataPart(“ReportFile”,filename,bo dy);
};
Request request=new Request.Builder().url(“http://www.xjptcs.cs1/check/report”)
.post(resquestBody.build().tag(getContext()).build();
...
在用戶端的業(yè)務(wù)報(bào)單界面測(cè)試了現(xiàn)場(chǎng)拍攝、文本編輯、報(bào)單上傳等功能,如圖8 所示,報(bào)單上傳后能夠返回相關(guān)提示,后臺(tái)服務(wù)器接收更新后對(duì)上傳數(shù)據(jù)進(jìn)行入庫(kù)管理。
針對(duì)傳統(tǒng)巡檢方式存在的問(wèn)題,研究了移動(dòng)GIS 應(yīng)用相關(guān)技術(shù),引入訂單式工作流程理念,設(shè)計(jì)了移動(dòng)巡檢系統(tǒng)方案,搭建了軟件開(kāi)發(fā)平臺(tái),分別開(kāi)發(fā)并實(shí)現(xiàn)了基于Android 和Windows 平臺(tái)的巡檢移動(dòng)端和管理端,并初步通過(guò)了用戶管理、定位導(dǎo)航、業(yè)務(wù)操作等系統(tǒng)基本功能的測(cè)試。該系統(tǒng)目前尚處于初步試用驗(yàn)證階段, 綜合性能仍有待進(jìn)一步完善提升,尤其系統(tǒng)管理端服務(wù)器對(duì)用戶訪問(wèn)容量、內(nèi)存壓力等影響系統(tǒng)平臺(tái)安全穩(wěn)定運(yùn)行的指標(biāo)還有待進(jìn)一步測(cè)試評(píng)估。