王法景,盛 輝,李耀琛
(1.楊凌職業(yè)技術學院,陜西 楊凌 712100;2.中國石油大學(華東)地球科學與技術學院,山東 青島 266580;3.呼和浩特市氣象局,內(nèi)蒙古 呼和浩特 010020)
傳統(tǒng)的體育場地現(xiàn)場調查需要攜帶大量的紙質資料,如行政圖、規(guī)劃圖、遙感圖以及文本資料等,很不方便;并且在調繪過程中,存在定位困難、信息查找麻煩、現(xiàn)場調繪數(shù)據(jù)難以存儲等問題,導致工作效率低下、調研結果準確度低以及調繪成本較高[1-6]。近年來,隨著移動技術的飛速發(fā)展和移動端硬件水平的不斷提高,地圖服務軟件逐漸成為熱門,進入人們的日常生活,如百度地圖、高德地圖、騰訊地圖、谷歌地圖和天地圖等?;谝苿悠脚_的地圖應用開發(fā)也成為開發(fā)者們重點關注的領域。通過移動端開發(fā)技術,調繪人員可隨身攜帶電子化的體育場地數(shù)據(jù),在任何地點、任何時間都能查到所需信息,完全達到3A的效果[7]。
本文根據(jù)調繪人員對體育場地位置和信息的查找、自身位置確定以及調繪數(shù)據(jù)存儲等相關需求,設計了調繪系統(tǒng)的基本框架和主要功能;并以Android平臺為基礎,結合分布式數(shù)據(jù)庫、移動數(shù)據(jù)庫、移動網(wǎng)絡通信以及移動設備定位等技術,利用百度地圖應用程序接口(API)設計了體育場地調繪系統(tǒng)。該系統(tǒng)運行于Android設備上,攜帶方便、實用性強,不僅能在調繪時為調繪人員提供地圖服務和快速、準確的位置信息,而且簡化了體育場地信息采集和編輯后數(shù)據(jù)的更新過程,改變了傳統(tǒng)體育場地調繪方式,提高了調繪工作效率。
根據(jù)規(guī)劃部門的需求,針對目前現(xiàn)場調繪工作中存在的定位困難、場地信息難以查找、現(xiàn)場調繪數(shù)據(jù)難以存儲等問題,本文利用數(shù)據(jù)庫、百度地圖API、Web Service等技術框架建立了一套安全穩(wěn)定、界面友好、實用性強的體育場地現(xiàn)場調繪系統(tǒng),實現(xiàn)了體育場地查詢顯示、信息采集、屬性編輯等功能。系統(tǒng)采用數(shù)據(jù)層、邏輯層和應用層3層體系結構,其中數(shù)據(jù)層是系統(tǒng)開發(fā)的基礎,主要負責體育場地數(shù)據(jù)的存儲檢索、用戶驗證和地圖服務;邏輯層是系統(tǒng)的核心,也稱數(shù)據(jù)服務層,負責鏈接數(shù)據(jù)層和應用層,可直接訪問數(shù)據(jù)庫,為應用層提供所需數(shù)據(jù);應用層是移動客戶端,是系統(tǒng)的應用界面,負責將從邏輯層獲取的請求信息展示給用戶,以滿足用戶的應用需求。系統(tǒng)架構如圖1所示。
圖1 系統(tǒng)架構圖
體育場地調繪系統(tǒng)的主要功能包括用戶驗證、地圖操作、查詢顯示、屬性編輯、信息采集、GPS定位、路線規(guī)劃、統(tǒng)計分析和繪圖等(圖2)。為了保證系統(tǒng)安全、防止數(shù)據(jù)泄露,在進入系統(tǒng)前需輸入用戶名和密碼,服務器將根據(jù)輸入的信息判斷用戶名是否存在、密碼是否正確,然后將驗證結果返回給客戶端,完成用戶驗證。地圖操作功能包括地圖放大、地圖縮小、地圖平移、圖層切換、距離測量、面積測量等。體育場地信息可通過兩種方式進行查詢:①根據(jù)體育場地名稱進行模糊查詢,以標注點的形式將匹配的體育場地顯示在地圖上,點擊標注點則可顯示該場地的詳細信息;②根據(jù)場地所在行政區(qū)劃、場地分布類型和場地類型進行綜合查詢,以列表的形式展示查詢到的場地詳細信息,點擊某一列表項則可跳轉到地圖圖層上顯示。屬性編輯首先通過點擊待修改的體育場地標注點,顯示該點的詳細信息;然后修改變化信息并保存到數(shù)據(jù)庫中。體育場地信息采集,即將體育場地的屬性信息(場地名稱、場地分布、場地類型、經(jīng)緯度、場地位置、行政區(qū)劃等)和圖片信息保存到數(shù)據(jù)庫中,位置信息通過移動設備自帶的GPS定位模塊獲取。路線規(guī)劃首先輸入起點和終點,再選擇檢索方式和策略,最后將規(guī)劃結果顯示在地圖上。以駕車方式為例,包括最短距離、最小費用和時間優(yōu)先3種駕車策略,若選擇最短距離策略,則規(guī)劃路線就會顯示在地圖上,點擊路線中的節(jié)點將顯示詳細的途徑點提示信息。統(tǒng)計分析功能包括統(tǒng)計不同行政區(qū)劃體育場地數(shù)量、不同類型體育場地數(shù)量以及某一行政區(qū)劃不同類型體育場地數(shù)量等,并以柱狀圖的形式顯示這些統(tǒng)計結果。繪圖功能類似于畫板,工作人員可在移動設備上選擇不同的畫筆對地圖進行描繪標注,再調用平板的截屏功能將標注保存。
圖2 系統(tǒng)主要功能設計
系統(tǒng)采用兩種措施相結合的方式來保證系統(tǒng)的安全性和數(shù)據(jù)的保密性,即進入系統(tǒng)前需進行用戶驗證以及對數(shù)據(jù)庫文件進行加密。由于體育場地數(shù)據(jù)量較大,為提高數(shù)據(jù)傳輸效率,系統(tǒng)將原有的體育場地數(shù)據(jù)存放到本地SQLite數(shù)據(jù)庫中。為保證數(shù)據(jù)的安全性,需對本地的SQLite數(shù)據(jù)庫文件進行加密,即使設備丟失數(shù)據(jù)也不會泄露。數(shù)據(jù)庫加密主要包括將內(nèi)容加密后再寫入數(shù)據(jù)庫和對數(shù)據(jù)庫文件加密兩種思路,前者每次操作均需解密,內(nèi)存消耗大,數(shù)據(jù)處理慢;后者只需對文件解密即可進行數(shù)據(jù)庫操作,其他軟件都無法打開,保證了數(shù)據(jù)安全。
本文采用AES對稱加密算法對本地數(shù)據(jù)庫文件進行加密[8]。系統(tǒng)采用開源的SQLCipher對SQLite數(shù)據(jù)庫進行加密。SQLCipher采用的是基于SQLite的256-bit AES算法,主要的加密接口與SQLite相同,增加了一些自己的接口。
體育場地查詢結果是以Marker標記點的形式展示的,當查詢到的點數(shù)量較少時,系統(tǒng)可流暢運行,但當查詢到的標記點過多時會出現(xiàn)問題,一方面標記點全部加載耗時較多,系統(tǒng)將出現(xiàn)明顯卡頓,另一方面在縮放級別較小時點位會非常密集,造成點位重疊覆蓋,產(chǎn)生不良的視覺效果。
為解決上述問題,本文采用直接距離法對標記點進行聚合[9-10],首先獲取當前屏幕范圍內(nèi)所有標記點的集合,設定聚合距離,初始時沒有任何已知的聚合點,隨機選取一個標記點作為原始聚合點,根據(jù)當前縮放級別計算該聚合點的外包正方形大??;然后逐個計算其他標記點與所有聚合點中心的距離,并獲得離標記點最近的聚合點,判斷二者的距離是否大于設定的聚合距離,若大于聚合距離,則形成新的聚合點,若小于聚合距離,則判斷該標記點是否在聚合點外包正方形內(nèi),如果在外包正方形內(nèi),則將標記點添加到該聚合點集合中,并重新計算聚合點中心,如果不在外包正方形內(nèi),則形成新的聚合點;依據(jù)該原則,直到遍歷完所有標記點為止。標記點聚合流程見圖3。
圖3 標記點聚合流程圖
系統(tǒng)以Android Studio1.2.2為開發(fā)平臺,以Java語言為開發(fā)語言,利用SQL Server 2012數(shù)據(jù)庫存儲服務器端數(shù)據(jù),利用SQLite數(shù)據(jù)庫存儲移動端數(shù)據(jù),以C#為Web Service開發(fā)語言,結合百度地圖API for Android進行開發(fā)。
系統(tǒng)采用百度地圖API for Android組件進行開發(fā),底圖采用百度地圖提供的平面圖和遙感圖。百度地圖Android SDK是一套基于Android2.1及以上版本設備的應用程序接口,通過調用地圖SDK接口,可輕松訪問百度地圖服務和數(shù)據(jù),構建功能豐富、交互性強的地圖類應用程序。在使用百度地圖Android SDK前需使用百度賬戶申請開發(fā)密鑰。本文以體育場地查詢顯示和體育場地信息采集兩個功能為例,介紹其主要的實現(xiàn)思路。
1)體育場地查詢顯示。體育場地查詢所用的數(shù)據(jù)庫是本地SQLite數(shù)據(jù)庫,這樣不僅可以保證查詢效率而且在離線情況下也能使用該功能。由于SQLite數(shù)據(jù)庫中體育場地坐標采用WGS84坐標系,而百度地圖采用BD-09坐標系,因此在加載前需利用Coordinate-Converter類進行坐標轉換。該功能包括體育場地名稱和綜合查詢兩種方式,查詢結果以標記點的形式進行展示,點擊標記點將彈出體育場地的詳細信息窗口。當查詢所有體育場地時,由于數(shù)據(jù)量較大,標記點加載效率和顯示效果較差,為了解決該問題,需要自定義聚合器類Cluster和聚合標注物類ClusterMarker。ClusterMarker具有網(wǎng)格大小和中心兩個重要屬性,網(wǎng)格大小由當前縮放級別計算得到,中心為被聚合的所有標記點的平均位置。聚合器類Cluster即一個判別標準,用于判斷標記點屬于哪一個ClusterMarker。通過這兩個類將屏幕可視范圍內(nèi)所有的標記點聚合,聚合點記錄被聚合的標記點的個數(shù),效果圖如圖4所示。
圖4 標記點聚合效果圖
2)體育場地信息采集。采集的體育場地信息包括場地經(jīng)緯度、名稱、類型、分布、面積、位置、行政區(qū)劃和圖片等。由于對GPS精度要求不高,體育場地的經(jīng)緯度信息利用平板設備自帶的GPS模塊,通過LocationManager類獲取。體育場地的圖片信息通過調用平板設備自帶的拍照功能獲得。屬性信息填寫完成后,點擊提交按鈕將屬性信息和圖片信息上傳至服務器端SQL Server數(shù)據(jù)庫中,即可完成體育場地數(shù)據(jù)的采集。體育場地信息采集流程如圖5所示。
圖5 體育場地信息采集流程圖
Android移動端對嵌入式SQLite數(shù)據(jù)庫具有良好的支持,但當數(shù)據(jù)庫為服務器端的SQL Server數(shù)據(jù)庫時,移動端很難以直接訪問的形式對數(shù)據(jù)庫進行操作。為了實現(xiàn)移動端與SQL Server數(shù)據(jù)庫的數(shù)據(jù)交互,本文采用ASP.NET技術創(chuàng)建了服務器端Web Service,并通過IIS發(fā)布。當系統(tǒng)需要執(zhí)行數(shù)據(jù)操作時,移動端通過HttpURLConnection類向Web Service所在服務器發(fā)送SOAP請求,服務器通過解析請求參數(shù)調用相應的方法;然后將結果以xml的形式返回給客戶端,客戶端通過XmlPullParser類將xml解析為所需的形式展示給用戶。
兼顧移動網(wǎng)絡訪問速度和用戶流量費用兩個方面,系統(tǒng)采用離線地圖功能,首先將離線地圖包存放到本地內(nèi)存中,然后系統(tǒng)運行時會優(yōu)先加載本地離線地圖為底圖,這樣在網(wǎng)絡條件差的情況下也能流暢查看地圖信息,給用戶帶來良好的體驗效果。
本文首先論述了體育場地規(guī)劃的必要性以及傳統(tǒng)體育場地現(xiàn)場調研過程中存在的不足,然后針對存在的問題設計了體育場地調繪系統(tǒng)的架構和功能?;诎俣鹊貓DAPI、SQLite數(shù)據(jù)庫和Web Service技術,本文開發(fā)了Android移動端的體育場地調繪系統(tǒng),實現(xiàn)了體育場地調繪移動辦公,提高了調繪工作的效率和精度,降低了調繪成本,具有一定的實用價值。