專利名稱:一種基于分布式計(jì)算的地圖聚合車輛刷新方法
技術(shù)領(lǐng)域:
本發(fā)明屬于GPS監(jiān)控系統(tǒng)領(lǐng)域,具體涉及一種基于分布式計(jì)算的地圖聚合車輛刷新方法。
背景技術(shù):
目前,在GPS監(jiān)控系統(tǒng)中,最常用的功能是在電子地圖上,實(shí)時(shí)顯示并刷新車輛的實(shí)時(shí)位置以及其他附屬信息。由于PC機(jī)的處理器及顯示卡的處理能力及網(wǎng)絡(luò)傳輸瓶頸的限制,在電子地圖上顯示的車輛數(shù)量是有一定上限的,超過(guò)這個(gè)限制值后,系統(tǒng)的性能就會(huì)有明顯的下降,影響其他系統(tǒng)功能的正常使用,因此如何突破車輛顯示數(shù)量的瓶頸,讓用戶能夠在系統(tǒng)上看到盡可能多的實(shí)時(shí)車輛信息,就成為了一個(gè)技術(shù)難題?,F(xiàn)在普遍采用的方案是地圖聚合以減少不必要的地圖刷新,但是這種方案有明顯的局限,就是它只能降低顯示卡的負(fù)擔(dān),卻增加了 CPU與內(nèi)存的負(fù)擔(dān),而且隨著車輛數(shù)量的不斷增長(zhǎng),花費(fèi)在地圖聚合計(jì)算上的CPU與內(nèi)存資源也將隨之不斷增長(zhǎng),最終仍然會(huì)到達(dá)系統(tǒng)能處理的極限值。有鑒于此,本發(fā)明人針對(duì)現(xiàn)有技術(shù)的缺陷深入研究,并有本案產(chǎn)生。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題在于提供一種基于分布式計(jì)算的地圖聚合車輛刷新方法,該方法運(yùn)用了分布式計(jì)算技術(shù),來(lái)解決車輛顯示數(shù)量瓶頸的問(wèn)題,在保證提高系統(tǒng)的性能的同時(shí),增強(qiáng)系統(tǒng)的擴(kuò)展性,降低維護(hù)升級(jí)的成本。本發(fā)明采用以下技術(shù)方案解決上述技術(shù)問(wèn)題:
一種基于分布式計(jì)算的地圖聚合車輛刷新方法,包括兩大部分,以下所述第一部分與第二部分無(wú)先后順序;
第一部分:服務(wù)器端接受并接析GPS數(shù)據(jù),具體包括如下步驟:
步驟1.1:GPS服務(wù)器通過(guò)Internet接受從車載終端發(fā)送來(lái)的實(shí)時(shí)GPS數(shù)據(jù),并進(jìn)行簡(jiǎn)單的解析,轉(zhuǎn)換為系統(tǒng)內(nèi)部的二進(jìn)制數(shù)據(jù)格式;
步驟1.2 =GPS服務(wù)器每隔一段時(shí)間,將收到解析過(guò)的若干個(gè)GPS數(shù)據(jù)組成一個(gè)大的數(shù)據(jù)包,通過(guò)局域網(wǎng)或者專用網(wǎng)將該數(shù)據(jù)包發(fā)送給GPS計(jì)算集群的主服務(wù)器;
步驟1.3 =GPS計(jì)算集群的主服務(wù)器先將大數(shù)據(jù)包拆分為多個(gè)單獨(dú)的GPS數(shù)據(jù)包,然后根據(jù)各工作站的當(dāng)前負(fù)載進(jìn)行調(diào)度,將GPS數(shù)據(jù)包分配給各個(gè)工作站進(jìn)行數(shù)據(jù)處理;
步驟1.4:工作站處理GPS數(shù)據(jù)包,保存GPS數(shù)據(jù)到數(shù)據(jù)庫(kù)中,并對(duì)GPS數(shù)據(jù)進(jìn)行經(jīng)緯度計(jì)算的處理,然后將處理后的數(shù)據(jù)返回給GPS計(jì)算集群的主服務(wù)器;
步驟1.5:GPS計(jì)算集群的主服務(wù)器將步驟1.4中返回的GPS數(shù)據(jù)緩存到分布式緩存中的一個(gè)字典數(shù)據(jù)結(jié)構(gòu)中,該字典數(shù)據(jù)結(jié)構(gòu)的鍵是車輛的標(biāo)識(shí)符,該鍵的值就是一個(gè)內(nèi)存結(jié)構(gòu)與步驟1.4返回的GPS數(shù)據(jù)一樣的一個(gè)結(jié)構(gòu)體,用于保存工作站處理返回的GPS數(shù)據(jù),對(duì)應(yīng)每個(gè)車輛標(biāo)識(shí)符,字典數(shù)據(jù)結(jié)構(gòu)中只保存一個(gè)對(duì)應(yīng)的GPS時(shí)間最新的GPS數(shù)據(jù),如果要保存的GPS數(shù)據(jù)的GPS時(shí)間比當(dāng)前已保存的數(shù)據(jù)的GPS時(shí)間還要早的話,則放棄此次保存;第二部分:客戶端地圖聚合,具體包括如下步驟:
步驟2.1:用戶啟動(dòng)客戶端軟件,加載電子地圖,并向GPS計(jì)算集群主服務(wù)器請(qǐng)求獲取所有車輛的GPS數(shù)據(jù),并發(fā)送當(dāng)前地圖范圍的經(jīng)緯度坐標(biāo)及視野大小給GPS計(jì)算集群主服務(wù)器,請(qǐng)求進(jìn)行地圖聚合的統(tǒng)計(jì)計(jì)算;
步驟2.2 =GPS計(jì)算集群主服務(wù)器收到GPS數(shù)據(jù)及地圖聚合統(tǒng)計(jì)請(qǐng)求,首先將所有車輛按車輛標(biāo)識(shí)符排序,分為幾個(gè)小的車輛列表,并給每個(gè)列表編號(hào),排序后的結(jié)果放在分布式緩存內(nèi);然后將本工作站要處理的車輛列表序號(hào),請(qǐng)求聚合的地圖范圍的經(jīng)緯度坐標(biāo),發(fā)送給各個(gè)工作站,分配各個(gè)工作站進(jìn)行每個(gè)車輛列表的具體的地圖聚合統(tǒng)計(jì);
步驟2.3:工作站根據(jù)收到的請(qǐng)求聚合的地圖范圍的經(jīng)緯度坐標(biāo),將這部分地圖再分割為N行N列的N*N個(gè)矩形格子 ,并計(jì)算出每個(gè)格子的長(zhǎng)和寬,同時(shí)創(chuàng)建一個(gè)字典數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)統(tǒng)計(jì)結(jié)果,字典的鍵是格子的行和列,對(duì)應(yīng)的值是一個(gè)對(duì)象,這個(gè)對(duì)象有兩個(gè)成員變量,第一個(gè)是一個(gè)計(jì)數(shù)器來(lái)存放該鍵對(duì)應(yīng)的格子內(nèi)車輛的總數(shù);第二個(gè)是一個(gè)List對(duì)象,里面保存著該格子內(nèi)的車輛標(biāo)識(shí)符;然后工作站根據(jù)收到的自己要處理的車輛列表序號(hào),從分布式緩存中獲取待處理車輛列表的GPS數(shù)據(jù),并循環(huán)遍歷這個(gè)車輛GPS數(shù)據(jù)的List ;
步驟2.4:工作站在步驟2.3中所述的循環(huán)內(nèi)部,使用地圖引擎提供的接口,首先根據(jù)每輛車當(dāng)前的經(jīng)緯度判斷該車輛是否在請(qǐng)求的地圖范圍,如果否,則跳到下一輛車,重新開始本步驟;如果是,則判斷該車輛所在的格子,算法是:
列=(GPS數(shù)據(jù)的經(jīng)度-地圖范圍左上角的經(jīng)度)/格子寬度,如果列不為整數(shù),則列=取整(列)+1 ;
行=(地圖范圍左上角的緯度-GPS數(shù)據(jù)的緯度)/格子長(zhǎng)度,如果行不為整數(shù),則行=取整(行)+1 ;
判斷之后,根據(jù)得到的行,列,從所述字典數(shù)據(jù)結(jié)構(gòu)中找到此鍵對(duì)應(yīng)的存儲(chǔ)統(tǒng)計(jì)對(duì)象,將對(duì)應(yīng)格子的車輛總數(shù)計(jì)數(shù)器,將計(jì)數(shù)器的值加I;同時(shí)將此車輛的標(biāo)識(shí)符加入到保存車輛標(biāo)識(shí)符的List中;
步驟2.5:所有車輛GPS數(shù)據(jù)循環(huán)處理完成后,工作站將存儲(chǔ)統(tǒng)計(jì)結(jié)果的字典進(jìn)行二進(jìn)制序列化后返回給GPS計(jì)算集群主服務(wù)器;
步驟2.6 =GPS計(jì)算集群主服務(wù)器收到步驟2.5中各個(gè)工作站返回的統(tǒng)計(jì)結(jié)果,當(dāng)確認(rèn)所有分配了此次任務(wù)的工作站都返回結(jié)果后,GPS計(jì)算集群主服務(wù)器對(duì)所有的統(tǒng)計(jì)結(jié)果進(jìn)行匯總:將各個(gè)統(tǒng)計(jì)結(jié)果中,有相同行,列對(duì)應(yīng)的車輛總數(shù)計(jì)數(shù)器相加,得到步驟2.3中所述的地圖分區(qū)格子內(nèi)的車輛總數(shù);
步驟2.7:GPS計(jì)算集群主服務(wù)器需要同時(shí)向客戶端返回一個(gè)List結(jié)構(gòu)的數(shù)據(jù),該List的每個(gè)元素存儲(chǔ)著一個(gè)步驟2.3中所述的的地圖分區(qū)格子內(nèi)的統(tǒng)計(jì)數(shù)據(jù)對(duì)象,該統(tǒng)計(jì)數(shù)據(jù)對(duì)象內(nèi)有以下的成員變量:
步驟2.3中所述的地圖各個(gè)格子區(qū)域內(nèi)的車輛總數(shù);
步驟2.3中所述的地圖各個(gè)格子區(qū)域的中心點(diǎn)經(jīng)緯度坐標(biāo);
如果某格子內(nèi)的車輛總數(shù)小于某個(gè)閥值,則應(yīng)包含該格子內(nèi)的所有車輛標(biāo)識(shí)符列表數(shù)據(jù)結(jié)構(gòu);如果車輛總數(shù)大于該閥值,則不需要包含該格子內(nèi)的車輛標(biāo)識(shí)符列表數(shù)據(jù)結(jié)構(gòu);步驟2.8:客戶端收到計(jì)算集群主服務(wù)器返回的統(tǒng)計(jì)結(jié)果List結(jié)構(gòu)的數(shù)據(jù),循環(huán)遍歷該List,對(duì)每個(gè)步驟2.3中所述的地圖分區(qū)格子的統(tǒng)計(jì)結(jié)果,判斷是否存在著該區(qū)域的車輛標(biāo)識(shí)列表,如果不存在,則使用步驟2.7中所述的格子區(qū)域的中心點(diǎn)經(jīng)緯度坐標(biāo),在地圖上繪制車輛聚合的標(biāo)識(shí)圖標(biāo),并在該圖標(biāo)下顯示該區(qū)域的車輛數(shù);如果統(tǒng)計(jì)結(jié)果中存在該區(qū)域的車輛標(biāo)識(shí)列表,則根據(jù)這些車輛標(biāo)識(shí),從分布式緩存中獲取這些車輛的最新GPS數(shù)據(jù),并在地圖上顯示這些車輛的圖標(biāo);
步驟2.9:客戶端定時(shí)向GPS計(jì)算集群主服務(wù)器發(fā)送地圖聚合統(tǒng)計(jì)請(qǐng)求,每次在刷新地圖前,先將原來(lái)的車輛圖標(biāo)全部清除。進(jìn)一步地,所述步驟1.5中的車輛標(biāo)識(shí)符是車牌號(hào),或車載手機(jī)號(hào),或數(shù)據(jù)庫(kù)生成的唯一 ID。本發(fā)明的優(yōu)點(diǎn)在于:本發(fā)明在傳統(tǒng)的地圖聚合技術(shù)方案之上,進(jìn)行創(chuàng)新性的改進(jìn),主要是將原來(lái)全部由客戶端承擔(dān)的地圖聚合處理功能,按負(fù)載均衡的原則,分配給分布式的工作站進(jìn)行處理,而這些工作站可以由廉價(jià)的普通PC來(lái)承擔(dān),甚至可以使用現(xiàn)有在使用中的機(jī)器,這樣可以充分利用閑置機(jī)器的CPU計(jì)算能力;按照本發(fā)明技術(shù)方案中的描述,假設(shè)整個(gè)地圖被分為N個(gè)區(qū)域,而每個(gè)局域內(nèi)設(shè)置顯示具體車輛GPS信息的閾值數(shù)量為10,則地圖上需要顯示刷新的圖標(biāo)最多為N*10個(gè),最少只有N個(gè),而且如果需要處理的車輛數(shù)量增長(zhǎng),客戶端地圖需要顯示刷新的圖標(biāo)數(shù)量并不增加,只是分布式的工作站的負(fù)載加大而已,這樣就可以簡(jiǎn)單用增加工作站的數(shù)量的方法來(lái)支撐不斷增加的車輛數(shù),而不需要對(duì)客戶端做任何的改動(dòng),這樣就完全消除了客戶端解析處理大量GPS數(shù)據(jù)與在地圖顯示大量圖標(biāo)帶來(lái)的性能的瓶頸,極大的提高了整個(gè)系統(tǒng)的可擴(kuò)展性。同時(shí),由于具體的聚合計(jì)算都在服務(wù)器端完成,以后如果需要改進(jìn)聚合算法時(shí),只需要更新服務(wù)器端的程序即可,大量的客戶端并不受影響,這也降低了維護(hù)升級(jí)的成本。
下面參照附圖結(jié)合實(shí)施例對(duì)本發(fā)明作進(jìn)一步的描述。圖1是本發(fā)明系統(tǒng)邏輯框圖。
具體實(shí)施例方式如圖1所示,本發(fā)明涉及的GPS監(jiān)控系統(tǒng)包括下述模塊:GPS服務(wù)器,GPS計(jì)算集群和客戶端。各模塊的功能和作用如下:
GPS服務(wù)器:與車載GPS終端連接,具備接受并解析車載GPS數(shù)據(jù)的功能。負(fù)責(zé)向地圖計(jì)算集群轉(zhuǎn)發(fā)實(shí)時(shí)GPS數(shù)據(jù)。GPS計(jì)算集群:由一組服務(wù)器組成的一個(gè)集群,它由一個(gè)主服務(wù)器和多個(gè)工作站組成,主服務(wù)器與GPS服務(wù)器通過(guò)Internet或局域網(wǎng)連接,主服務(wù)與所有工作站和客戶端通過(guò)局域網(wǎng)連接,具備對(duì)GPS數(shù)據(jù)進(jìn)行分布式處理的功能。負(fù)責(zé)接受并解析GPS服務(wù)器傳來(lái)的GPS數(shù)據(jù),按照客戶端的請(qǐng)求對(duì)GPS數(shù)據(jù)進(jìn)行地圖聚合統(tǒng)計(jì),并將統(tǒng)計(jì)結(jié)果發(fā)送回給客戶端??蛻舳?與地圖計(jì)算集群通過(guò)局域網(wǎng)連接,具備地圖顯示與客戶端界面。負(fù)責(zé)從地圖計(jì)算集群獲取所需的車輛實(shí)時(shí)GPS數(shù)據(jù)及地圖聚合統(tǒng)計(jì)信息,并在地圖上顯示聚合后的車輛實(shí)時(shí)信息。
具體地圖聚合車輛刷新方法,包括兩大部分,以下所述第一部分與第二部分無(wú)先后順序;
第一部分:服務(wù)器端接受并接析GPS數(shù)據(jù),具體包括如下步驟:
步驟1.1:GPS服務(wù)器通過(guò)Internet接受從車載終端發(fā)送來(lái)的實(shí)時(shí)GPS數(shù)據(jù),并進(jìn)行簡(jiǎn)單的解析,轉(zhuǎn)換為系統(tǒng)內(nèi)部的二進(jìn)制數(shù)據(jù)格式;
步驟1.2 =GPS服務(wù)器每隔一段時(shí)間,將收到解析過(guò)的若干個(gè)GPS數(shù)據(jù)組成一個(gè)大的數(shù)據(jù)包,通過(guò)局域網(wǎng)或者專用網(wǎng)將該數(shù)據(jù)包發(fā)送給GPS計(jì)算集群的主服務(wù)器;
步驟1.3 =GPS計(jì)算集群的主服務(wù)器先將大數(shù)據(jù)包拆分為多個(gè)單獨(dú)的GPS數(shù)據(jù)包,然后根據(jù)各工作站的當(dāng)前負(fù)載進(jìn)行調(diào)度,將GPS數(shù)據(jù)包分配給各個(gè)工作站進(jìn)行數(shù)據(jù)處理;
步驟1.4:工作站處理GPS數(shù)據(jù)包,保存GPS數(shù)據(jù)到數(shù)據(jù)庫(kù)中,并對(duì)GPS數(shù)據(jù)進(jìn)行經(jīng)緯度計(jì)算的處理,然后將處理后的數(shù)據(jù)返回給GPS計(jì)算集群的主服務(wù)器;
步驟1.5:GPS計(jì)算集群的主服務(wù)器將步驟1.4中返回的GPS數(shù)據(jù)緩存到分布式緩存中的一個(gè)字典數(shù)據(jù)結(jié)構(gòu)中,該字典數(shù)據(jù)結(jié)構(gòu)的鍵是車輛的標(biāo)識(shí)符(可以是車牌號(hào),或車載手機(jī)號(hào),或數(shù)據(jù)庫(kù)生成的唯一 ID),該鍵的值就是一個(gè)內(nèi)存結(jié)構(gòu)與步驟1.4返回的GPS數(shù)據(jù)一樣的一個(gè)結(jié)構(gòu)體,用于保存工作站處理返回的GPS數(shù)據(jù),對(duì)應(yīng)每個(gè)車輛標(biāo)識(shí)符,字典數(shù)據(jù)結(jié)構(gòu)中只保存一個(gè)對(duì)應(yīng)的GPS時(shí)間最新的GPS數(shù)據(jù),如果要保存的GPS數(shù)據(jù)的GPS時(shí)間比當(dāng)前已保存的數(shù)據(jù)的GPS時(shí)間還要早的話,則放棄此次保存;
第二部分:客戶端地圖聚合,具體包括如下步驟:
步驟2.1:用戶啟動(dòng)客戶端軟件,加載電子地圖,并向GPS計(jì)算集群主服務(wù)器請(qǐng)求獲取所有車輛的GPS數(shù)據(jù),并發(fā)送當(dāng)前地圖范圍的經(jīng)緯度坐標(biāo)(左上角經(jīng)緯度與右下角經(jīng)緯度)及視野大小給GPS計(jì)算集群主服務(wù)器,請(qǐng)求進(jìn)行地圖聚合的統(tǒng)計(jì)計(jì)算;
步驟2.2 =GPS計(jì)算集群主服務(wù)器收到GPS數(shù)據(jù)及地圖聚合統(tǒng)計(jì)請(qǐng)求,首先將所有車輛按車輛標(biāo)識(shí)符排序,分為幾個(gè)小的車輛列表,并給每個(gè)列表編號(hào),例如第1-500輛車是I號(hào),第501-1000輛是2號(hào)(排序僅在主服務(wù)器啟動(dòng)時(shí)進(jìn)行,編號(hào)的上限是根據(jù)工作站的數(shù)量動(dòng)態(tài)變化的),排序后的結(jié)果放在分布式緩存內(nèi);然后將本工作站要處理的車輛列表序號(hào),請(qǐng)求聚合的地圖范圍的經(jīng)緯度坐標(biāo),發(fā)送給各個(gè)工作站,分配各個(gè)工作站進(jìn)行每個(gè)車輛列表的具體的地圖聚合統(tǒng)計(jì);
步驟2.3:工作站根據(jù)收到的請(qǐng)求聚合的地圖范圍的經(jīng)緯度坐標(biāo),將這部分地圖再分割為N行N列的N*N個(gè)矩形格子,并計(jì)算出每個(gè)格子的長(zhǎng)和寬,同時(shí)創(chuàng)建一個(gè)字典數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)統(tǒng)計(jì)結(jié)果,字典的鍵是格子的行和列,對(duì)應(yīng)的值是一個(gè)對(duì)象,這個(gè)對(duì)象有兩個(gè)成員變量,第一個(gè)是一個(gè)計(jì)數(shù)器來(lái)存放該鍵對(duì)應(yīng)的格子內(nèi)車輛的總數(shù);第二個(gè)是一個(gè)List對(duì)象,里面保存著該格子內(nèi)的車輛標(biāo)識(shí)符;然后工作站根據(jù)收到的自己要處理的車輛列表序號(hào),從分布式緩存中獲取待處理車輛列表的GPS數(shù)據(jù),并循環(huán)遍歷這個(gè)車輛GPS數(shù)據(jù)的List ;
步驟2.4:工作站在步驟2.3中所述的循環(huán)內(nèi)部,使用地圖引擎提供的接口,首先根據(jù)每輛車當(dāng)前的經(jīng)緯度判斷該車輛是否在請(qǐng)求的地圖范圍,如果否,則跳到下一輛車,重新開始本步驟;如果是,則判斷該車輛所在的格子,算法是:
列=(GPS數(shù)據(jù)的經(jīng)度-地圖范圍左上角的經(jīng)度)/格子寬度,如果列不為整數(shù),則列=取整(列)+1 ;行=(地圖范圍左上角的緯度-GPS數(shù)據(jù)的緯度)/格子長(zhǎng)度,如果行不為整數(shù),則行=取整(行)+1 ;
判斷之后,根據(jù)得到的行,列,從所述字典數(shù)據(jù)結(jié)構(gòu)中找到此鍵對(duì)應(yīng)的存儲(chǔ)統(tǒng)計(jì)對(duì)象,將對(duì)應(yīng)格子的車輛總數(shù)計(jì)數(shù)器,將計(jì)數(shù)器的值加I;同時(shí)將此車輛的標(biāo)識(shí)符加入到保存車輛標(biāo)識(shí)符的List中;
步驟2.5:所有車輛GPS數(shù)據(jù)循環(huán)處理完成后,工作站將存儲(chǔ)統(tǒng)計(jì)結(jié)果的字典進(jìn)行二進(jìn)制序列化后返回給GPS計(jì)算集群主服務(wù)器;
步驟2.6 =GPS計(jì)算集群主服務(wù)器收到步驟2.5中各個(gè)工作站返回的統(tǒng)計(jì)結(jié)果,當(dāng)確認(rèn)所有分配了此次任務(wù)的工作站都返回結(jié)果后,GPS計(jì)算集群主服務(wù)器對(duì)所有的統(tǒng)計(jì)結(jié)果進(jìn)行匯總:將各個(gè)統(tǒng)計(jì)結(jié)果中,有相同行,列對(duì)應(yīng)的車輛總數(shù)計(jì)數(shù)器相加,得到步驟2.3中所述的地圖分區(qū)格子內(nèi)的車輛總數(shù);
步驟2.7:GPS計(jì)算集群主服務(wù)器需要同時(shí)向客戶端返回一個(gè)List結(jié)構(gòu)的數(shù)據(jù),該List的每個(gè)元素存儲(chǔ)著一個(gè)步驟2.3中所述的的地圖分區(qū)格子內(nèi)的統(tǒng)計(jì)數(shù)據(jù)對(duì)象,該統(tǒng)計(jì)數(shù)據(jù)對(duì)象內(nèi)有以下的成員變量:
步驟2.3中所述的地圖各個(gè)格子區(qū)域內(nèi)的車輛總數(shù);
步驟2.3中所述的地圖各個(gè)格子區(qū)域的中心點(diǎn)經(jīng)緯度坐標(biāo);
如果某格子內(nèi)的車輛總數(shù)小于某個(gè)閾值,則應(yīng)包含該格子內(nèi)的所有車輛標(biāo)識(shí)符列表數(shù)據(jù)結(jié)構(gòu);如果車輛總數(shù) 大于該閾值,則不需要包含該格子內(nèi)的車輛標(biāo)識(shí)符列表數(shù)據(jù)結(jié)構(gòu);步驟2.8:客戶端收到計(jì)算集群主服務(wù)器返回的統(tǒng)計(jì)結(jié)果List結(jié)構(gòu)的數(shù)據(jù),循環(huán)遍歷該List,對(duì)每個(gè)步驟2.3中所述的地圖分區(qū)格子的統(tǒng)計(jì)結(jié)果,判斷是否存在著該區(qū)域的車輛標(biāo)識(shí)列表,如果不存在,則使用步驟2.7中所述的格子區(qū)域的中心點(diǎn)經(jīng)緯度坐標(biāo),在地圖上繪制車輛聚合的標(biāo)識(shí)圖標(biāo),并在該圖標(biāo)下顯示該區(qū)域的車輛數(shù);如果統(tǒng)計(jì)結(jié)果中存在該區(qū)域的車輛標(biāo)識(shí)列表,則根據(jù)這些車輛標(biāo)識(shí),從分布式緩存中獲取這些車輛的最新GPS數(shù)據(jù),并在地圖上顯示這些車輛的圖標(biāo);
步驟2.9:客戶端定時(shí)向GPS計(jì)算集群主服務(wù)器發(fā)送地圖聚合統(tǒng)計(jì)請(qǐng)求,每次在刷新地圖前,先將原來(lái)的車輛圖標(biāo)全部清除。本發(fā)明在傳統(tǒng)的地圖聚合技術(shù)方案之上,進(jìn)行創(chuàng)新性的改進(jìn),主要是將原來(lái)全部由客戶端承擔(dān)的地圖聚合處理功能,按負(fù)載均衡的原則,分配給分布式的工作站進(jìn)行處理,而這些工作站可以由廉價(jià)的普通PC來(lái)承擔(dān),甚至可以使用現(xiàn)有在使用中的機(jī)器,這樣可以充分利用閑置機(jī)器的CPU計(jì)算能力;按照本發(fā)明技術(shù)方案中的描述,假設(shè)整個(gè)地圖被分為N個(gè)區(qū)域,而每個(gè)局域內(nèi)設(shè)置顯示具體車輛GPS信息的閾值數(shù)量為10,則地圖上需要顯示刷新的圖標(biāo)最多為N*10個(gè),最少只有N個(gè),而且如果需要處理的車輛數(shù)量增長(zhǎng),客戶端地圖需要顯示刷新的圖標(biāo)數(shù)量并不增加,只是分布式的工作站的負(fù)載加大而已,這樣就可以簡(jiǎn)單用增加工作站的數(shù)量的方法來(lái)支撐不斷增加的車輛數(shù),而不需要對(duì)客戶端做任何的改動(dòng),這樣就完全消除了客戶端解析處理大量GPS數(shù)據(jù)與在地圖顯示大量圖標(biāo)帶來(lái)的性能的瓶頸,極大的提高了整個(gè)系統(tǒng)的可擴(kuò)展性。同時(shí),由于具體的聚合計(jì)算都在服務(wù)器端完成,以后如果需要改進(jìn)聚合算法時(shí),只需要更新服務(wù)器端的程序即可,大量的客戶端并不受影響,這也降低了維護(hù)升級(jí)的成本。以上所述僅為本發(fā)明的較佳實(shí)施用例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換以及改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種基于分布式計(jì)算的地圖聚合車輛刷新方法,其特征在于:包括兩大部分,以下所述第一部分與第二部分無(wú)先后順序; 第一部分:服務(wù)器端接受并接析GPS數(shù)據(jù),具體包括如下步驟: 步驟1.1:GPS服務(wù)器通過(guò)Internet接受從車載終端發(fā)送來(lái)的實(shí)時(shí)GPS數(shù)據(jù),并進(jìn)行簡(jiǎn)單的解析,轉(zhuǎn)換為系統(tǒng)內(nèi)部的二進(jìn)制數(shù)據(jù)格式; 步驟1.2 =GPS服務(wù)器每隔一段時(shí)間,將收到解析過(guò)的若干個(gè)GPS數(shù)據(jù)組成一個(gè)大的數(shù)據(jù)包,通過(guò)局域網(wǎng)或者專用網(wǎng)將該數(shù)據(jù)包發(fā)送給GPS計(jì)算集群的主服務(wù)器; 步驟1.3 =GPS計(jì)算集群的主服務(wù)器先將大數(shù)據(jù)包拆分為多個(gè)單獨(dú)的GPS數(shù)據(jù)包,然后根據(jù)各工作站的當(dāng)前負(fù)載進(jìn)行調(diào)度,將GPS數(shù)據(jù)包分配給各個(gè)工作站進(jìn)行數(shù)據(jù)處理; 步驟1.4:工作站處理GPS數(shù)據(jù)包,保存GPS數(shù)據(jù)到數(shù)據(jù)庫(kù)中,并對(duì)GPS數(shù)據(jù)進(jìn)行經(jīng)緯度計(jì)算的處理,然后將處理后的數(shù)據(jù)返回給GPS計(jì)算集群的主服務(wù)器; 步驟1.5:GPS計(jì)算集群的主服務(wù)器將步驟1.4中返回的GPS數(shù)據(jù)緩存到分布式緩存中的一個(gè)字典數(shù)據(jù)結(jié)構(gòu)中,該字典數(shù)據(jù)結(jié)構(gòu)的鍵是車輛的標(biāo)識(shí)符,該鍵的值就是一個(gè)內(nèi)存結(jié)構(gòu)與步驟1.4返回的GPS數(shù)據(jù)一樣的一個(gè)結(jié)構(gòu)體,用于保存工作站處理返回的GPS數(shù)據(jù),對(duì)應(yīng)每個(gè)車輛標(biāo)識(shí)符,字典數(shù)據(jù)結(jié)構(gòu)中只保存一個(gè)對(duì)應(yīng)的GPS時(shí)間最新的GPS數(shù)據(jù),如果要保存的GPS數(shù)據(jù)的GPS時(shí)間比當(dāng)前已保存的數(shù)據(jù)的GPS時(shí)間還要早的話,則放棄此次保存;第二部分:客戶端地圖聚合,具體包括如下步驟: 步驟2.1:用戶啟動(dòng)客戶端軟件,加載電子地圖,并向GPS計(jì)算集群主服務(wù)器請(qǐng)求獲取所有車輛的GPS數(shù)據(jù),并發(fā)送當(dāng)前地圖范圍的經(jīng)緯度坐標(biāo)及視野大小給GPS計(jì)算集群主服務(wù)器,請(qǐng)求進(jìn)行地圖聚合的統(tǒng)計(jì)計(jì)算; 步驟2.2 =GPS計(jì)算集群主服務(wù)器收到GPS數(shù)據(jù)及地圖聚合統(tǒng)計(jì)請(qǐng)求,首先將所有車輛按車輛標(biāo)識(shí)符排序,分為幾個(gè)小的車輛列表,并給每個(gè)列表編號(hào),排序后的結(jié)果放在分布式緩存內(nèi);然后將本工作站要處理的車輛列表序號(hào),請(qǐng)求聚合的地圖范圍的經(jīng)緯度坐標(biāo),發(fā)送給各個(gè)工作站,分配各個(gè)工作站進(jìn)行每個(gè)車輛列表的具體的地圖聚合統(tǒng)計(jì); 步驟2.3:工作站根據(jù)收到的請(qǐng)求聚合的地圖范圍的經(jīng)緯度坐標(biāo),將這部分地圖再分割為N行N列的N*N個(gè)矩形格子,并計(jì)算出每個(gè)格子的長(zhǎng)和寬,同時(shí)創(chuàng)建一個(gè)字典數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)統(tǒng)計(jì)結(jié)果,字典的鍵是格子的行和列,對(duì)應(yīng)的值是一個(gè)對(duì)象,這個(gè)對(duì)象有兩個(gè)成員變量,第一個(gè)是一個(gè)計(jì)數(shù)器來(lái)存放該鍵對(duì)應(yīng)的格子內(nèi)車輛的總數(shù);第二個(gè)是一個(gè)List對(duì)象,里面保存著該格子內(nèi)的車輛標(biāo)識(shí)符;然后工作站根據(jù)收到的自己要處理的車輛列表序號(hào),從分布式緩存中獲取待處理車輛列表的GPS數(shù)據(jù),并循環(huán)遍歷這個(gè)車輛GPS數(shù)據(jù)的List ; 步驟2.4:工作站在步驟2.3中所述的循環(huán)內(nèi)部,使用地圖引擎提供的接口,首先根據(jù)每輛車當(dāng)前的經(jīng)緯度判斷該車輛是否在請(qǐng)求的地圖范圍,如果否,則跳到下一輛車,重新開始本步驟;如果是,則判斷該車輛所在的格子,算法是: 列=(GPS數(shù)據(jù)的經(jīng)度-地圖范圍左上角的經(jīng)度)/格子寬度,如果列不為整數(shù),則列=取整(列)+1 ; 行=(地圖范圍左 上角的緯度-GPS數(shù)據(jù)的緯度)/格子長(zhǎng)度,如果行不為整數(shù),則行=取整(行)+1 ; 判斷之后,根據(jù)得到的行,列,從所述字典數(shù)據(jù)結(jié)構(gòu)中找到此鍵對(duì)應(yīng)的存儲(chǔ)統(tǒng)計(jì)對(duì)象,將對(duì)應(yīng)格子的車輛總數(shù)計(jì)數(shù)器,將計(jì)數(shù)器的值加I;同時(shí)將此車輛的標(biāo)識(shí)符加入到保存車輛標(biāo)識(shí)符的List中; 步驟2.5:所有車輛GPS數(shù)據(jù)循環(huán)處理完成后,工作站將存儲(chǔ)統(tǒng)計(jì)結(jié)果的字典進(jìn)行二進(jìn)制序列化后返回給GPS計(jì)算集群主服務(wù)器; 步驟2.6 =GPS計(jì)算集群主服務(wù)器收到步驟2.5中各個(gè)工作站返回的統(tǒng)計(jì)結(jié)果,當(dāng)確認(rèn)所有分配了此次任務(wù)的工作站都返回結(jié)果后,GPS計(jì)算集群主服務(wù)器對(duì)所有的統(tǒng)計(jì)結(jié)果進(jìn)行匯總:將各個(gè)統(tǒng)計(jì)結(jié)果中,有相同行,列對(duì)應(yīng)的車輛總數(shù)計(jì)數(shù)器相加,得到步驟2.3中所述的地圖分區(qū)格子內(nèi)的車輛總數(shù); 步驟2.7:GPS計(jì)算集群主服務(wù)器需要同時(shí)向客戶端返回一個(gè)List結(jié)構(gòu)的數(shù)據(jù),該List的每個(gè)元素存儲(chǔ)著一個(gè)步驟2.3中所述的的地圖分區(qū)格子內(nèi)的統(tǒng)計(jì)數(shù)據(jù)對(duì)象,該統(tǒng)計(jì)數(shù)據(jù)對(duì)象內(nèi)有以下的成員變量: 步驟2.3中所述的地圖各個(gè)格子區(qū)域內(nèi)的車輛總數(shù); 步驟2.3中所述的地圖各個(gè)格子區(qū)域的中心點(diǎn)經(jīng)緯度坐標(biāo); 如果某格子內(nèi)的車輛總數(shù)小于某個(gè)閥值,則應(yīng)包含該格子內(nèi)的所有車輛標(biāo)識(shí)符列表數(shù)據(jù)結(jié)構(gòu);如果車輛總數(shù)大于該閥值,則不需要包含該格子內(nèi)的車輛標(biāo)識(shí)符列表數(shù)據(jù)結(jié)構(gòu);步驟2.8:客戶端收到計(jì)算集群主服務(wù)器返回的統(tǒng)計(jì)結(jié)果List結(jié)構(gòu)的數(shù)據(jù),循環(huán)遍歷該List,對(duì)每個(gè)步驟2.3中所述的地圖分區(qū)格子的統(tǒng)計(jì)結(jié)果,判斷是否存在著該區(qū)域的車輛標(biāo)識(shí)列表,如果不存在,則使用步驟2.7中所述的格子區(qū)域的中心點(diǎn)經(jīng)緯度坐標(biāo),在地圖上繪制車輛聚合的標(biāo)識(shí)圖標(biāo),并在該圖標(biāo)下顯示該區(qū)域的車輛數(shù);如果統(tǒng)計(jì)結(jié)果中存在該區(qū)域的車輛標(biāo)識(shí)列表,則根據(jù)這些車輛標(biāo)識(shí),從分布式緩存中獲取這些車輛的最新GPS數(shù)據(jù),并在地圖上顯示這些車輛的圖標(biāo); 步驟2.9: 客戶端定時(shí)向GPS計(jì)算集群主服務(wù)器發(fā)送地圖聚合統(tǒng)計(jì)請(qǐng)求,每次在刷新地圖前,先將原來(lái)的車輛圖標(biāo)全部清除。
2.如權(quán)利要求1所述的一種基于分布式計(jì)算的地圖聚合車輛刷新方法,其特征在于:所述步驟1.5中的車輛標(biāo)識(shí)符是車牌號(hào),或車載手機(jī)號(hào),或數(shù)據(jù)庫(kù)生成的唯一 ID。
全文摘要
一種基于分布式計(jì)算的地圖聚合車輛刷新方法,包括兩大部分,具體是服務(wù)器端接受并接析GPS數(shù)據(jù),與客戶端地圖聚合兩部分,該兩部分無(wú)先后順序;服務(wù)器端接受并接析GPS數(shù)據(jù)具體包括GPS服務(wù)器通過(guò)Internet接受從車載終端發(fā)送來(lái)的實(shí)時(shí)GPS數(shù)據(jù),GPS計(jì)算集群的主服務(wù)器根據(jù)各工作站的當(dāng)前負(fù)載進(jìn)行調(diào)度,將GPS數(shù)據(jù)包分配給各個(gè)工作站進(jìn)行數(shù)據(jù)處理;客戶端地圖聚合具體包括客戶端向GPS計(jì)算集群主服務(wù)器請(qǐng)求獲取所有車輛的GPS數(shù)據(jù),并發(fā)送當(dāng)前地圖范圍的經(jīng)緯度坐標(biāo)及視野大小給GPS計(jì)算集群主服務(wù)器,請(qǐng)求進(jìn)行地圖聚合的統(tǒng)計(jì)計(jì)算。本發(fā)明運(yùn)用了分布式計(jì)算技術(shù),來(lái)解決車輛顯示數(shù)量瓶頸的問(wèn)題,在保證提高系統(tǒng)的性能的同時(shí),增強(qiáng)系統(tǒng)的擴(kuò)展性,降低維護(hù)升級(jí)的成本。
文檔編號(hào)H04L29/08GK103139287SQ20121053053
公開日2013年6月5日 申請(qǐng)日期2012年12月11日 優(yōu)先權(quán)日2012年12月11日
發(fā)明者張嶼, 余建成, 傅建記, 曲建云 申請(qǐng)人:廈門雅迅網(wǎng)絡(luò)股份有限公司