孫嬌嬌,王天涯,王 飛
1.淮北師范大學(xué)數(shù)學(xué)科學(xué)學(xué)院,安徽淮北,235000;2.宿州學(xué)院機械與電子工程學(xué)院,安徽宿州,234000;3.徐工信息技術(shù)股份有限公司,江蘇徐州,221004
車聯(lián)網(wǎng)的概念最早在2009年提出,源于物聯(lián)網(wǎng),是以行駛中的車輛為信息感知對象,借助新一代信息技術(shù),車與平臺之間的網(wǎng)絡(luò)連接,實現(xiàn)車輛的遠程監(jiān)控和遠程控制,提升車輛的智能服務(wù)水平。目前,車聯(lián)網(wǎng)技術(shù)已被列入國家重點項目,其中GPS終端是平臺和車輛的“紐帶”,它主要通過GPRS無線通信技術(shù),實現(xiàn)平臺與車輛之間的數(shù)據(jù)交互。
Python語言在實現(xiàn)數(shù)據(jù)批量處理方面具有獨特的優(yōu)勢,其內(nèi)部提供了列表數(shù)據(jù)結(jié)構(gòu),具有高級語言集合類數(shù)據(jù)結(jié)構(gòu)的特點,且操作非常簡單,廣泛應(yīng)用于大數(shù)據(jù)挖掘和數(shù)據(jù)分析中。Thrift是一種接口描述語言[1],是Facebook開發(fā)的遠程過程調(diào)用(RPC)框架[2],已經(jīng)被應(yīng)用于大量開源的分布式系統(tǒng)中,特別是在大數(shù)據(jù)集群的處理能力上應(yīng)用較為廣泛,比如查詢、存儲、通訊等。隨著互聯(lián)網(wǎng)技術(shù)和地圖測繪技術(shù)的發(fā)展,大數(shù)據(jù)挖掘與知識發(fā)現(xiàn)成為現(xiàn)代科學(xué)技術(shù)的前沿發(fā)展方向,地理信息系統(tǒng)的發(fā)展正面臨大數(shù)據(jù)時代的發(fā)展機遇和新的挑戰(zhàn)[3-4]。一些地圖應(yīng)用服務(wù)的出現(xiàn),一定程度上滿足了開發(fā)者對地圖業(yè)務(wù)的需求,如高德、百度等公司給開發(fā)者提供了公共平臺,個人或企業(yè)通過注冊認證成為開發(fā)者,可以方便地調(diào)用他們提供的在線API接口獲取服務(wù),很大程度上提高了公眾的地理信息認知能力。然而,這種公眾平臺提供的接口往往會在調(diào)用量和并發(fā)數(shù)量上做限制,一定程度上影響了使用者的開發(fā)效率,并且這種接口的使用要求具備外網(wǎng)網(wǎng)絡(luò)環(huán)境。而實際上,往往有很多工廠、企業(yè)規(guī)定內(nèi)部應(yīng)用服務(wù)是不允許使用外網(wǎng)環(huán)境的,這在很大程度上限制了依賴地圖服務(wù)的業(yè)務(wù)工作開展。本文提供了一種可以部署在本地服務(wù)器或者局域網(wǎng)內(nèi)的離線服務(wù)方法,很大程度上滿足了開發(fā)者的需求。
車聯(lián)網(wǎng)應(yīng)用中,需要實時地獲取地理位置信息。一般情況下,GPS終端通過2G、3G、LET、4G等無線通信技術(shù)上傳該車輛的定位信息,包含經(jīng)緯度、GPS時間等位置信息。本文設(shè)計的離線方法主要是運用Python技術(shù),結(jié)合地圖服務(wù)提供的API接口,抓取全國各省、市、區(qū)縣的城市地圖邊緣點的坐標信息,對在線地圖提供的數(shù)據(jù)進行篩選、過濾、格式化,最終保存為文本格式。把文件按照省市名稱命名,分成兩種命名格式,一種是“省份”文件,命名格式為“省份名稱_省份區(qū)域編碼”;另外一種為“市”文件,命名格式為“市名稱_市區(qū)域編碼_市所屬省份區(qū)域編碼”。這樣,兩種文件通過命名中的“省份區(qū)域編碼”把省和市進行關(guān)聯(lián),可以方便地確定每個“市”的所屬省份。最終,通過Python抓取并存儲,區(qū)域編碼被分成三個級別,即省、市、區(qū)縣(存儲在市文件內(nèi)部),內(nèi)容及命名格式如表1、表2所示。這種格式化后的數(shù)據(jù),易于管理和分析,通過省、市、縣分層數(shù)據(jù)的不同程度的簡化,形成分層數(shù)據(jù)集合存儲,并將該數(shù)據(jù)和GPS本身上傳的數(shù)據(jù)作為本文研究的對象,這樣就實現(xiàn)了城市邊緣點坐標的離線存儲,這些數(shù)據(jù)將作為本文離線方法的基礎(chǔ)數(shù)據(jù),因此,開發(fā)者在使用的過程中只需調(diào)取本地數(shù)據(jù),無需每次都從公共接口中獲取,解決了開發(fā)者使用公共接口的調(diào)用量限制的問題。
表1 “省份”文件內(nèi)容格式(江蘇省_320000)
表2 “市”文件內(nèi)容格式(南京市_320100_320000)
Apache Thrift是一種主流的新型RPC框架,在大數(shù)據(jù)傳輸和高并發(fā)的系統(tǒng)中性能表現(xiàn)優(yōu)異。RPC,即遠程過程調(diào)用,是互聯(lián)網(wǎng)時代分布式集群中的核心組件[5]。本文從以下兩點進行闡述。
理論上,對于城市邊緣點采集,數(shù)據(jù)越密集,數(shù)據(jù)量越大,計算出的結(jié)果精準值就越高,但大量的數(shù)據(jù)計算會影響處理的速度,特別在實時處理要求很高的系統(tǒng)上,是不可容忍的,本文基于Douglas-Peucker算法將適量數(shù)據(jù)簡化。
Douglas-Peucker算法是通過去除微小的彎曲獲得每個幾何特點的一種算法[6]。在數(shù)字化時,要對曲線進行采樣,即在曲線上取有限個點,將其變?yōu)檎劬€,并且能在一定程度上保持原有的形狀。
Douglas-Peucker算法原理步驟如下:
(1)在曲線首尾兩點A,B之間連接一條線段AB,該線段為曲線的弦;
(2)計算起始點和最終點的中間所有特征點的里面最大失徑的特征點Pi,得到曲線上離該線段距離最大的點Pmax,計算其與AB的距離;
(3)比較該距離與預(yù)先給定的閾值的大小,如果小于閾值,則將該線段作為曲線的近似,該段曲線處理完畢。
(4)如果距離大于閾值,則用C將曲線分為兩段AC和BC,并分別對兩段進行(1)~(3)的處理。
(5)當所有曲線都處理完畢時,依次連接各個分割點形成折線,即可以作為曲線的近似,形成新的數(shù)據(jù)集合。
考慮系統(tǒng)的高并發(fā)、易擴展性,本方法選擇將Thrift框架作為RPC服務(wù)載體[7],將城市邊緣信息在服務(wù)端進行緩存,并設(shè)計合理的存儲結(jié)構(gòu),最終,用戶只要在本地或局域網(wǎng)內(nèi)通過Thrift客戶端,把國內(nèi)任意一個位置的經(jīng)緯度作為輸入?yún)?shù)調(diào)取該服務(wù),便可獲取該位置的行政區(qū)域編碼,具體實現(xiàn)步驟如圖1所示。
圖1 離線地圖服務(wù)示意圖
第一步,根據(jù)第1節(jié)中獲取的數(shù)據(jù)文件分別構(gòu)建“省份”邊緣位置信息集合和“市區(qū)縣”邊緣位置信息集合,并通過文件命名建立兩者之間的關(guān)系,根據(jù)Douglas-Peucker算法對原有數(shù)據(jù)集進行優(yōu)化;
第二步,構(gòu)建Thrift服務(wù)端。當客戶端發(fā)送請求時,根據(jù)輸入的經(jīng)緯度,首先遍歷國內(nèi)所有“省份”,把該省份所有邊緣位置信息集合連接成多邊形區(qū)域,判斷該經(jīng)緯度的點是否包含在該區(qū)域內(nèi)。如果不包含則輸出無效,如果屬于某個“省份”則進一步遍歷該“省份”所屬的“市區(qū)縣”;同樣把該“市區(qū)縣”集合的所有點連接成多邊形區(qū)域,如果不包含則輸出無效,包含則輸出對應(yīng)的區(qū)域編碼信息,返回給客戶端查詢結(jié)果。
第三步,經(jīng)緯度的點是否在一個多邊形區(qū)域內(nèi)可采用“射線法”進行判斷。“射線法”算法步驟原理如下:
(1)從點開始,作一條任意的射線,如果射線與多邊形邊的交點個數(shù)為偶數(shù)則表明點在多邊形外,交點個數(shù)為奇數(shù)時則表明點在多邊形內(nèi)。
(2)如果點在多邊形內(nèi)部時,無論如何畫射線都會有交點,且為奇數(shù)個。
(3)如圖2所示的“點射法”示意圖,可以看出點A、B、D和該多邊形交點個數(shù)為偶數(shù),判斷在多邊形外部;點C、E、F和該多邊形交點個數(shù)為奇數(shù),判斷在多邊形內(nèi)部。
圖2 “射線法”示意圖
LVS是Linux Virtual Server的簡稱,也就是Linux虛擬服務(wù)器。LVS主要用于多服務(wù)器的負載均衡,它工作在OSI模型中的網(wǎng)絡(luò)層,可以實現(xiàn)高性能,高可用的服務(wù)器集群技術(shù);其配置非常簡單,且有多種負載均衡的算法,即使在集群的服務(wù)器中某臺服務(wù)器無法正常工作,也不影響整體效果。Keepalived是Linux下一個輕量級別的高可用(High Avalilability,HA)解決方案。所謂高可用,意思是一種冗余和接管,當一臺服務(wù)器宕機時,另外一臺服務(wù)器可以無縫接管該服務(wù)器上的服務(wù)。
本文離線服務(wù)采用LVS+Keepalived部署方案,融合了兩種技術(shù)的特性,從而提高系統(tǒng)的可用性,且有利于系統(tǒng)的變更和擴展[8],具體的部署方案,如圖3所示。
圖3 系統(tǒng)部署架構(gòu)圖
(1)兩臺服務(wù)器master和backup分別部署LVS和Keepalived,并配置一個虛擬IP(VIP)供外部調(diào)用,realserver上部署本文離線服務(wù)。
(2)當大量客戶端向服務(wù)端發(fā)送連接請求時,LVS會通過內(nèi)部算法,合理分配到不同的realserver上,達到負載均衡的效果,兩臺Keepalived服務(wù)器保證系統(tǒng)的高可用。
(3)當客戶端鏈接個數(shù)增加時,只需要簡單的增加realserver的個數(shù),便可分擔(dān)各服務(wù)器上的壓力,這種分布式部署方式易于系統(tǒng)的擴展,且能夠跨語言,跨平臺,具有高可用性和可擴展性。
本實驗將車聯(lián)網(wǎng)行業(yè)中實際的應(yīng)用場景作為實驗背景。一種常用的應(yīng)用場景為,車輛信息通過GPS終端采集信息上傳到平臺,平臺會根據(jù)GPS上傳的經(jīng)緯度信息判斷該車輛所在的區(qū)域,當有大量車輛信息上傳到平臺時,平臺還可以統(tǒng)計全國各區(qū)域車輛分布情況。
實驗中服務(wù)器IP分配及各服務(wù)器配置如表3所示,搭建分布式離線服務(wù),其中IP:10.80.0.90為虛擬IP,作為本文離線API服務(wù)的入口,在10.80.0.102和10.80.0.103服務(wù)器上部署keepalived高可用組件,把10.80.0.0.104和10.80.0.0.105作為realserver服務(wù)器部署的離線API服務(wù)。
表3 實驗測試環(huán)境說明
4.2.1 有效性測試
在高德地圖上隨機選取100個城市的坐標點,分別調(diào)用高德在線API方法和本文離線地圖方法計算行政區(qū)域編碼,計算結(jié)果如表4所示(列舉部分測試信息)。
表4 兩種計算行政區(qū)域編碼方法對比
實驗結(jié)果:從表4中可以看出,對于各測試樣本點,本文方法計算出的結(jié)果與高德在線API計算的結(jié)果一致。
4.2.2 高可靠性測試
同4.2.1中的實驗方法,對該100個城市的坐標點調(diào)用本文離線地圖方法計算區(qū)域編碼,但此時停止IP為10.80.0.0.104和10.80.0.105中一臺的離線地圖服務(wù),實驗結(jié)果仍能得到表4中的正確行政區(qū)域編碼。
4.2.3 性能測試
隨機選取國內(nèi)某一城市的經(jīng)緯度計算該位置的行政區(qū)域編碼,選取高德地圖和百度地圖提供的服務(wù)接口和本文方法進行對比測試。分別進行以下兩種實驗:
實驗一:實驗中選擇同一個坐標點作為輸入?yún)?shù)輸入經(jīng)緯度(116.121 344,30.444 291),按照調(diào)用100次為計時單位,共做了20次實驗,測試高德地圖API、百度地圖API及本文離線方法API輸出結(jié)果的準確性及各個方法的耗時。
實驗結(jié)果:三種方法的計算結(jié)果:均能計算出該經(jīng)緯度的行政區(qū)域編碼為“340825”(安徽省安慶市太湖縣),三種方法在計算上的時間消耗見圖4。
圖4 三種方法耗時對比圖
實驗二:并發(fā)測試,實驗分別對三種API進行并發(fā)測試。計時單位為1次調(diào)用接口的消耗時間,并發(fā)數(shù)均為100,輸入?yún)?shù)仍選擇實驗一中的坐標值,測試三種方法輸出結(jié)果的準確性及各方法的耗時。
實驗結(jié)果:三種方法均能輸出正確結(jié)果:該經(jīng)緯度坐標所在的行政區(qū)域編碼為“340825”(安徽省安慶市太湖縣),三種方法在計算上的時間消耗如圖5所示,可以看出,本文方法計算耗時最少。
4.3 實驗結(jié)論及分析
從4.2.1可以看出本離線方案的計算準確性及有效性;4.2.2中的結(jié)果表明該方案的高可用性,即使在一臺服務(wù)器出現(xiàn)故障的情況下也不影響系統(tǒng)服務(wù)的正常使用;4.2.3兩組實驗可以看出,相比其他兩種方法,本文方法提供的API接口無論是多次調(diào)用還是并發(fā)調(diào)用,在計算耗時上都表現(xiàn)出較為明顯的優(yōu)勢,這是因為局域網(wǎng)內(nèi)的接口調(diào)用相比外網(wǎng)更有優(yōu)勢,所以本方案更適合在局域網(wǎng)內(nèi)使用。
圖5 三種方法并發(fā)測試耗時對比圖
本文介紹了目前主流在線地圖服務(wù)及其在使用方面存在的問題,并針對這些問題,提出了一種基于車聯(lián)網(wǎng)的獲取行政區(qū)域編碼的設(shè)計方法,詳細介紹了該方法的設(shè)計思路、實現(xiàn)方法,闡述了該方法在實際使用中能夠跨語言、跨平臺、具有高可用性和可擴展性,并可以無限次調(diào)用,解決了公共接口服務(wù)調(diào)用量和并發(fā)量的局限性問題。最后結(jié)合車聯(lián)網(wǎng)的實際應(yīng)用場景,利用實驗的方法,證明了該方法在局域網(wǎng)內(nèi)使用的優(yōu)越性。