999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Android4.4和百度地圖的遠(yuǎn)程定位系統(tǒng)設(shè)計(jì)※

2014-09-06 10:50:08時(shí)光馬維華魏金文
關(guān)鍵詞:百度系統(tǒng)

時(shí)光,馬維華,魏金文

(南京航空航天大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,南京 210016)

?

基于Android4.4和百度地圖的遠(yuǎn)程定位系統(tǒng)設(shè)計(jì)※

時(shí)光,馬維華,魏金文

(南京航空航天大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,南京 210016)

針對(duì)遠(yuǎn)程定位的應(yīng)用需求,設(shè)計(jì)了一套基于Android4.4和百度地圖的遠(yuǎn)程定位系統(tǒng)。首先利用注冊(cè)機(jī)制,構(gòu)建一個(gè)由5個(gè)線程和3個(gè)消息隊(duì)列組成的支持多用戶(hù)同時(shí)使用的服務(wù)器系統(tǒng),然后針對(duì)Android4.4版本特點(diǎn),闡述了如何使用Looper機(jī)制進(jìn)行消息線程間傳遞,最后通過(guò)百度地圖API和定位終端的位置信息,實(shí)現(xiàn)多用戶(hù)的實(shí)時(shí)定位。實(shí)驗(yàn)表明,本系統(tǒng)結(jié)構(gòu)合理、性能穩(wěn)定。

Android4.4;Looper;消息隊(duì)列;定位終端;百度地圖;遠(yuǎn)程定位

引 言

隨著社會(huì)發(fā)展和科技進(jìn)步,人們?cè)谌粘I钪袑?duì)于遠(yuǎn)程定位的需求越來(lái)越強(qiáng)烈,尤其在登山、家庭監(jiān)護(hù)、寵物看管等應(yīng)用場(chǎng)合,遠(yuǎn)程定位扮演著十分重要的角色[1]。本文根據(jù)遠(yuǎn)程定位的應(yīng)用場(chǎng)景及需求特點(diǎn),基于Android4.4版本[2]和百度地圖開(kāi)放API[3]設(shè)計(jì)了一套可以同時(shí)支持多個(gè)定位與接收顯示終端的遠(yuǎn)程位置定位系統(tǒng),用戶(hù)可以通過(guò)Android終端查看當(dāng)前綁定了相應(yīng)定位終端的具體位置,位置信息由定位終端發(fā)出。文中主要闡述了服務(wù)器端程序架構(gòu)的設(shè)計(jì)以及如何實(shí)現(xiàn)多用戶(hù)支持的具體細(xì)節(jié),并且結(jié)合Android4.4版本的特點(diǎn),通過(guò)深入解析Android內(nèi)核源碼,描述了Looper機(jī)制以及系統(tǒng)如何將消息在線程間進(jìn)行傳遞,最后,根據(jù)百度提供的API,詳細(xì)說(shuō)明了如何通過(guò)從服務(wù)器接收的位置消息實(shí)現(xiàn)準(zhǔn)確的定位。實(shí)驗(yàn)結(jié)果表明,系統(tǒng)運(yùn)行穩(wěn)定、定位精確度滿足要求。系統(tǒng)框架如圖1所示。

圖1 系統(tǒng)總體結(jié)構(gòu)

1 服務(wù)器模塊設(shè)計(jì)

從系統(tǒng)總體結(jié)構(gòu)圖可以看出,本系統(tǒng)使用一臺(tái)服務(wù)器同時(shí)服務(wù)若干用戶(hù),所以服務(wù)器的結(jié)構(gòu)設(shè)計(jì)對(duì)于系統(tǒng)能否正常穩(wěn)定運(yùn)行起到至關(guān)重要的作用。

1.1 總體框架設(shè)計(jì)

為了讓消息可以有序的被處理,本系統(tǒng)的服務(wù)器程序采用消息隊(duì)列機(jī)制[4]。設(shè)置了3個(gè)消息隊(duì)列,分別是服務(wù)定位終端的定位消息隊(duì)列posMessageQueue、服務(wù)Android接收端的接收消息隊(duì)列recMessageQueue,以及進(jìn)行消息處理與調(diào)度的主消息隊(duì)列mainMessageQueue,同時(shí)在程序運(yùn)行的時(shí)候開(kāi)啟了5個(gè)線程,見(jiàn)表1。

表1 服務(wù)器系統(tǒng)線程列表

從表1中可以看到,pos_read和rec_read線程都是監(jiān)聽(tīng)socket端口,如果有相關(guān)消息,則接收并發(fā)送到對(duì)應(yīng)的消息隊(duì)列中。本系統(tǒng)監(jiān)聽(tīng)接收消息采用以下函數(shù):socket_recv_from(const int sock_fd, char *buff, const int max_len, const int flags,struct sockaddr *pcliaddr, socklen_t *clilen)

其中,sockaddr表示socket地址和端口信息。

系統(tǒng)中接收到消息后將消息發(fā)送到消息隊(duì)列采用以下函數(shù):

sndMessageQueue(int msgID, void *pData, unsigned long dwSize,long mtype)

其中,msgID表示消息隊(duì)列的ID號(hào),如為主消息隊(duì)列,則直接用main_que_id定義一個(gè)int類(lèi)型的數(shù)。

線程pos_write和rec_write監(jiān)聽(tīng)消息隊(duì)列,并從消息隊(duì)列接收消息,系統(tǒng)的實(shí)現(xiàn)采用以下函數(shù):

rcvMessageQueue(int msgID, void *pData, unsigned long dwSize, int isBlock)

其中參數(shù)與sndMessageQueue一致。

系統(tǒng)服務(wù)器程序的框架如圖2所示。CEO線程從主消息隊(duì)列中接收的消息經(jīng)過(guò)處理后發(fā)送到recMessageQueue和posMessageQueue,然后再將消息通過(guò)對(duì)應(yīng)線程和socket端口發(fā)送出去。系統(tǒng)采用這樣的設(shè)計(jì)方式,可以使得在有多個(gè)終端同時(shí)工作的時(shí)候,信息得到穩(wěn)定高效的處理。

圖2 服務(wù)器系統(tǒng)框架

1.2 系統(tǒng)終端注冊(cè)機(jī)制和主線程設(shè)計(jì)

系統(tǒng)需要同時(shí)滿足多個(gè)用戶(hù)的定位需求,每個(gè)用戶(hù)對(duì)應(yīng)一個(gè)定位終端和Android終端,這樣不同的定位終端發(fā)過(guò)來(lái)的消息需要找到對(duì)應(yīng)的Android終端來(lái)接收。從圖2可以看到,所有的消息都是通過(guò)3個(gè)消息隊(duì)列和5個(gè)線程來(lái)接收、處理和轉(zhuǎn)發(fā)的。當(dāng)不同的消息進(jìn)入同一個(gè)消息隊(duì)列中,系統(tǒng)需要知道消息是由哪個(gè)用戶(hù)發(fā)出的,這樣終端在開(kāi)始發(fā)送和接收消息的時(shí)候首先需要進(jìn)行配對(duì),也就是在服務(wù)器上面注冊(cè)用戶(hù)信息。

本系統(tǒng)定義了5種消息類(lèi)型,如表2所列。

表2 服務(wù)器系統(tǒng)消息列表

其中注冊(cè)類(lèi)消息用來(lái)完成終端注冊(cè),心跳消息用來(lái)通知服務(wù)器終端是否還在工作狀態(tài),數(shù)據(jù)消息用來(lái)傳遞具體的位置信息數(shù)據(jù)。對(duì)于回復(fù)OK的消息,因?yàn)楸鞠到y(tǒng)采用的是UDP方式通信,是無(wú)連接的,非安全性通信,所以對(duì)于終端發(fā)送過(guò)來(lái)的消息,服務(wù)器需要發(fā)送一個(gè)確定接收的消息,這個(gè)消息本系統(tǒng)定義為回復(fù)OK的消息。如果消息傳遞錯(cuò)誤,終端就會(huì)發(fā)送錯(cuò)誤消息到服務(wù)器。

除了這5種消息,系統(tǒng)還定義了終端類(lèi)型,如表3所列。

表3 終端類(lèi)型列表

另外為了對(duì)消息進(jìn)行管理,定義了三個(gè)結(jié)構(gòu)體。

終端管理結(jié)構(gòu)體:

typedef struct _TrmMng{

int pos_fd; //定位終端所注冊(cè)的網(wǎng)絡(luò)套接字

int rec_fd; //Android節(jié)點(diǎn)所注冊(cè)的網(wǎng)絡(luò)套接字

char trm_num; //終端編號(hào)

}TrmMng;

終端端口地址結(jié)構(gòu)體:

typedef struct _AddrMng{

struct sockaddr_in cliaddr;//客戶(hù)端地址和端口相關(guān)信息

socklen_t clilen; //cliaddr的長(zhǎng)度,sendto函數(shù)的參數(shù)

int index; //在當(dāng)前數(shù)組的位置

}AddrMng;

消息體結(jié)構(gòu)體:

typedef struct _MsgBuf{

long mtype; //消息類(lèi)型

char mtext[MAX_MSGSIZE];

} MsgBuf;

在結(jié)構(gòu)體的基礎(chǔ)上定義了TrmMng trm_mng[MAX_TRM_NUM]和AddrMng addr_mng[MAX_TRM_NUM * 2]這兩個(gè)數(shù)組來(lái)進(jìn)行統(tǒng)一的終端和客戶(hù)端地址的管理。

在系統(tǒng)開(kāi)始的時(shí)候,無(wú)論是定位終端還是Android終端,向服務(wù)器發(fā)送的消息都有兩部分:一部分是包含IP地址和端口號(hào),由服務(wù)器自動(dòng)保存;另外一部分是終端號(hào)類(lèi)型。注冊(cè)過(guò)程略——編者注。

系統(tǒng)中服務(wù)器端對(duì)接收到的各種消息的處理是在CEO線程中進(jìn)行的,它根據(jù)不同的消息類(lèi)型進(jìn)行不同的處理,CEO線程也是唯一可以和3個(gè)消息隊(duì)列進(jìn)行信息交流的線程。它從主消息隊(duì)列中取消息,一般采用阻塞監(jiān)聽(tīng)的方式,無(wú)消息時(shí)線程阻塞,有消息時(shí)線程喚醒,讀取消息、解析處理后發(fā)送到另外兩個(gè)消息隊(duì)列中,主線程的設(shè)計(jì)框架如圖3所示。

2 Android端設(shè)計(jì)

本系統(tǒng)位置顯示終端采用的是基于Android的移動(dòng)終端或者中控節(jié)點(diǎn),帶有位置信息的消息通過(guò)定位終端采集后,上傳到服務(wù)器,然后通過(guò)服務(wù)器配對(duì),傳到指定的接收端。Android端在接收到消息后,先將消息通過(guò)線程間傳遞機(jī)制傳到Looper的MessageQueue,然后由百度地圖提供的API獲取后進(jìn)行定位。所以Android端設(shè)計(jì)分為兩個(gè)部分:消息傳遞模塊和百度地圖定位模塊。

2.1 消息傳遞模塊

對(duì)于Android端的位置消息主要通過(guò)socket方式從服務(wù)器獲取。本系統(tǒng)采用Android4.4版本作為其操作系統(tǒng)。由于在Android4.4版本中,主線程中是不能有網(wǎng)絡(luò)相關(guān)操作的,因此采用這種設(shè)計(jì)方式可以避免因?yàn)榫W(wǎng)絡(luò)操作造成的Activity線程等待,提高用戶(hù)體驗(yàn)。而與此同時(shí),主線程中與網(wǎng)絡(luò)通信相關(guān)的操作就要用另外一個(gè)線程去處理,處理完成后將處理結(jié)果傳遞給主線程,這個(gè)傳遞機(jī)制就是Android中使用很廣泛的Looper機(jī)制,采用這種方式也解決了Android中很經(jīng)典的非主線程不能更新UI的問(wèn)題。因?yàn)樵诒鞠到y(tǒng)中的socket操作屬于網(wǎng)絡(luò)操作,所以不能直接在地圖UI中啟動(dòng)socket接收位置消息,需要另外啟動(dòng)一個(gè)線程,專(zhuān)門(mén)用來(lái)接收位置消息和對(duì)消息進(jìn)行解析,然后通過(guò)Looper機(jī)制傳遞給地圖線程,用來(lái)更新當(dāng)前位置。

Looper機(jī)制和系統(tǒng)位置信息傳遞原理略——編者注。

2.2 百度地圖定位模塊

本系統(tǒng)采用的定位服務(wù)是基于百度地圖API移動(dòng)版本的,它支持Android設(shè)備應(yīng)用程序接口,通過(guò)這些API可以構(gòu)建強(qiáng)交互性的應(yīng)用,同時(shí)還可以實(shí)現(xiàn)定位、本地搜索、路線規(guī)劃等數(shù)據(jù)服務(wù)[5]。

百度地圖應(yīng)用程序的開(kāi)發(fā)可以通過(guò)設(shè)置布局文件權(quán)限、添加jar包以及顯示百度地圖的控件等幾個(gè)步驟實(shí)現(xiàn)。其中有一些比較重要的類(lèi)和對(duì)象見(jiàn)表4。

表4 百度地圖類(lèi)和對(duì)象列表

本系統(tǒng)百度地圖中的位置顯示分為3個(gè)部分,分別是初始化地圖initMap()、定位中心位置moveToPoint(cLat, cLon),以及顯示當(dāng)前位置圖層showCurtainPoint(double cLat,double cLon)。

initMap()是在地圖線程開(kāi)始執(zhí)行的,而在Looper消息隊(duì)列的處理函數(shù)handleMessage中放置了另外兩個(gè)函數(shù)moveToPoint(cLat, cLon)和showCurtainPoint(double cLat,double cLon)。這樣當(dāng)Looper對(duì)象調(diào)用loop()方法后,就可以循環(huán)執(zhí)行這兩個(gè)函數(shù),從而達(dá)到對(duì)地圖的實(shí)時(shí)更新。具體流程略——編者注。

3 系統(tǒng)測(cè)試

本系統(tǒng)自定義通信協(xié)議(協(xié)議略),在服務(wù)器端接收到從定位終端發(fā)送的位置信息處理后,發(fā)送到Android終端,再對(duì)通信協(xié)議進(jìn)行解析,調(diào)用百度地圖服務(wù)進(jìn)行處理,將其顯示在Android終端,可以實(shí)現(xiàn)實(shí)時(shí)獲取與顯示地理位置的功能。在Android端的顯示效果略——編者注。

結(jié) 語(yǔ)

隨著目前智能硬件的發(fā)展熱潮和我國(guó)自主研發(fā)的北斗定位系統(tǒng)的普及,遠(yuǎn)程定位系統(tǒng)給人們?nèi)粘I顜?lái)了很多便利。本文采用的多線程和消息隊(duì)列的方式,不僅可以為多個(gè)用戶(hù)提供同時(shí)通信服務(wù),而且還可以應(yīng)用于很多領(lǐng)域。在Android4.4版本中實(shí)現(xiàn)位置信息線程間傳遞和百度地圖的應(yīng)用,對(duì)于其他的位置消息傳遞應(yīng)用也有很好的借鑒作用,可以在百度地圖的基礎(chǔ)上進(jìn)行功能擴(kuò)展。

[1] 曹秀海, 周傳運(yùn).具有遠(yuǎn)程定位功能的電纜故障監(jiān)測(cè)系統(tǒng)方案[J].建筑電氣,2007,26(4): 29-32.

[2] 鐘文昌. Android4.4新功能解密[J].程序員,2014 (1): 105-107.

[3] 杜傳明.百度地圖API在小型地理信息系統(tǒng)中的應(yīng)用[J].測(cè)繪與空間地理信息,2011, 34(2): 152-153.

[4] 劉大瑋,劉瑞虹.基于WSE和消息隊(duì)列的異步Web服務(wù)研究及實(shí)現(xiàn)[J].計(jì)算機(jī)工程, 2007, 33(8): 127-129.

[5] 百度. 百度地圖API開(kāi)發(fā)指南[EB/OL].[2014-06]. http://wenku.baidu.com/link?url=EyOICRzoKgbhtsAZLoZAp9JVG8afgiJ2P9CZZ7ZP_5-shK4mnCCg MViXFbRfKBHRBDBoLKVC7_LiwqhHGfb1zpbLQeb6EZzSWp7q Q6xj2Li.

時(shí)光、魏金文(碩士研究生),主要研究方向?yàn)槲锫?lián)網(wǎng)與嵌入式系統(tǒng);馬維華(教授),主要研究方向?yàn)榍度胧较到y(tǒng)與自動(dòng)化控制。

Design of Remote Positioning System Based on Android4.4 and Baidu Maps※

Shi Guang, Ma Weihua,Wei Jinwen

(College of Computer Science and Technology, Nanjing University of Aeronautics and Astronautics, Nanjing 210016,China)

Aiming at the application requirement of the remote positioning,a remote positioning system is designed,which is based on Android4.4 and Baidu maps.Firstly,the system based the registration mechanism designs a server program, having 5 theads and 3 messagequeues,which can support multiple users at the same time.Secondly,according to the characteristics of Android4.4 version,the paper describes how to transmit messages using Looper.Finally,the system realizes real-time positioning for multiple users through using API of Baidu maps and location information from positioning terminal.Test results show that the system has a reasonable structure and stable performance.

Android4.4; Looper; messagequeue; positioning terminal; Baidu maps; remote positioning

TP36

A

士然

2014-06-30)

猜你喜歡
百度系統(tǒng)
Smartflower POP 一體式光伏系統(tǒng)
WJ-700無(wú)人機(jī)系統(tǒng)
ZC系列無(wú)人機(jī)遙感系統(tǒng)
Robust adaptive UKF based on SVR for inertial based integrated navigation
百度年度熱搜榜
連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
百度遭投行下調(diào)評(píng)級(jí)
百度“放衛(wèi)星”,有沒(méi)有可能?
太空探索(2014年4期)2014-07-19 10:08:58
主站蜘蛛池模板: 国产99视频在线| 一本大道香蕉中文日本不卡高清二区| 少妇人妻无码首页| 波多野结衣一区二区三视频 | 乱人伦中文视频在线观看免费| 国内精品小视频在线| 99久久国产综合精品2023| 亚洲中文久久精品无玛| 国产高清在线观看91精品| 亚洲欧洲日韩综合| 自慰高潮喷白浆在线观看| 无码精品国产dvd在线观看9久| 国产成人av大片在线播放| 久久精品国产精品青草app| 激情爆乳一区二区| 爱爱影院18禁免费| 欧美www在线观看| 影音先锋亚洲无码| 久久久亚洲色| 国产91导航| 亚洲欧美不卡| 国产一级做美女做受视频| 在线观看91香蕉国产免费| 国产精品嫩草影院av| 色综合久久88色综合天天提莫| 亚洲色图欧美一区| 国产麻豆福利av在线播放| 四虎AV麻豆| 久久久噜噜噜| 亚洲制服丝袜第一页| 国产中文一区二区苍井空| 黄色在线不卡| 毛片网站在线看| 91黄视频在线观看| 国产xxxxx免费视频| 在线国产91| 免费福利视频网站| 亚洲最大福利视频网| 国产激情在线视频| 国产午夜小视频| 国产精品永久免费嫩草研究院| 性网站在线观看| 2021精品国产自在现线看| 精品国产网| 国产成人无码AV在线播放动漫 | 亚洲精品不卡午夜精品| 毛片免费在线视频| 尤物成AV人片在线观看| 91精品国产综合久久香蕉922 | 成人在线综合| 成年人国产网站| 亚洲精品国产综合99| 四虎综合网| 在线精品亚洲国产| 日本成人福利视频| 久久精品亚洲中文字幕乱码| 欧美日本中文| 婷婷成人综合| 国产成人精品高清不卡在线| 欧美区国产区| 国产精品免费p区| 国产欧美精品午夜在线播放| 亚洲国产精品一区二区高清无码久久| 人人爽人人爽人人片| 欧美A级V片在线观看| 国产无码制服丝袜| 日韩无码视频网站| 91视频99| 亚洲欧美极品| 欧美日本一区二区三区免费| 欧美另类精品一区二区三区| 国产内射一区亚洲| 欧美成人精品一级在线观看| 日韩A∨精品日韩精品无码| 97免费在线观看视频| 国产成人精品免费av| 免费A∨中文乱码专区| 狼友视频一区二区三区| 在线欧美日韩国产| 亚洲福利网址| 国产真实乱人视频| 国产精品流白浆在线观看|