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

基于Android4.4和百度地圖的遠程定位系統設計※

2014-09-06 10:50:08時光馬維華魏金文
單片機與嵌入式系統應用 2014年11期
關鍵詞:百度系統

時光,馬維華,魏金文

(南京航空航天大學 計算機科學與技術學院,南京 210016)

?

基于Android4.4和百度地圖的遠程定位系統設計※

時光,馬維華,魏金文

(南京航空航天大學 計算機科學與技術學院,南京 210016)

針對遠程定位的應用需求,設計了一套基于Android4.4和百度地圖的遠程定位系統。首先利用注冊機制,構建一個由5個線程和3個消息隊列組成的支持多用戶同時使用的服務器系統,然后針對Android4.4版本特點,闡述了如何使用Looper機制進行消息線程間傳遞,最后通過百度地圖API和定位終端的位置信息,實現多用戶的實時定位。實驗表明,本系統結構合理、性能穩定。

Android4.4;Looper;消息隊列;定位終端;百度地圖;遠程定位

引 言

隨著社會發展和科技進步,人們在日常生活中對于遠程定位的需求越來越強烈,尤其在登山、家庭監護、寵物看管等應用場合,遠程定位扮演著十分重要的角色[1]。本文根據遠程定位的應用場景及需求特點,基于Android4.4版本[2]和百度地圖開放API[3]設計了一套可以同時支持多個定位與接收顯示終端的遠程位置定位系統,用戶可以通過Android終端查看當前綁定了相應定位終端的具體位置,位置信息由定位終端發出。文中主要闡述了服務器端程序架構的設計以及如何實現多用戶支持的具體細節,并且結合Android4.4版本的特點,通過深入解析Android內核源碼,描述了Looper機制以及系統如何將消息在線程間進行傳遞,最后,根據百度提供的API,詳細說明了如何通過從服務器接收的位置消息實現準確的定位。實驗結果表明,系統運行穩定、定位精確度滿足要求。系統框架如圖1所示。

圖1 系統總體結構

1 服務器模塊設計

從系統總體結構圖可以看出,本系統使用一臺服務器同時服務若干用戶,所以服務器的結構設計對于系統能否正常穩定運行起到至關重要的作用。

1.1 總體框架設計

為了讓消息可以有序的被處理,本系統的服務器程序采用消息隊列機制[4]。設置了3個消息隊列,分別是服務定位終端的定位消息隊列posMessageQueue、服務Android接收端的接收消息隊列recMessageQueue,以及進行消息處理與調度的主消息隊列mainMessageQueue,同時在程序運行的時候開啟了5個線程,見表1。

表1 服務器系統線程列表

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

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

系統中接收到消息后將消息發送到消息隊列采用以下函數:

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

其中,msgID表示消息隊列的ID號,如為主消息隊列,則直接用main_que_id定義一個int類型的數。

線程pos_write和rec_write監聽消息隊列,并從消息隊列接收消息,系統的實現采用以下函數:

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

其中參數與sndMessageQueue一致。

系統服務器程序的框架如圖2所示。CEO線程從主消息隊列中接收的消息經過處理后發送到recMessageQueue和posMessageQueue,然后再將消息通過對應線程和socket端口發送出去。系統采用這樣的設計方式,可以使得在有多個終端同時工作的時候,信息得到穩定高效的處理。

圖2 服務器系統框架

1.2 系統終端注冊機制和主線程設計

系統需要同時滿足多個用戶的定位需求,每個用戶對應一個定位終端和Android終端,這樣不同的定位終端發過來的消息需要找到對應的Android終端來接收。從圖2可以看到,所有的消息都是通過3個消息隊列和5個線程來接收、處理和轉發的。當不同的消息進入同一個消息隊列中,系統需要知道消息是由哪個用戶發出的,這樣終端在開始發送和接收消息的時候首先需要進行配對,也就是在服務器上面注冊用戶信息。

本系統定義了5種消息類型,如表2所列。

表2 服務器系統消息列表

其中注冊類消息用來完成終端注冊,心跳消息用來通知服務器終端是否還在工作狀態,數據消息用來傳遞具體的位置信息數據。對于回復OK的消息,因為本系統采用的是UDP方式通信,是無連接的,非安全性通信,所以對于終端發送過來的消息,服務器需要發送一個確定接收的消息,這個消息本系統定義為回復OK的消息。如果消息傳遞錯誤,終端就會發送錯誤消息到服務器。

除了這5種消息,系統還定義了終端類型,如表3所列。

表3 終端類型列表

另外為了對消息進行管理,定義了三個結構體。

終端管理結構體:

typedef struct _TrmMng{

int pos_fd; //定位終端所注冊的網絡套接字

int rec_fd; //Android節點所注冊的網絡套接字

char trm_num; //終端編號

}TrmMng;

終端端口地址結構體:

typedef struct _AddrMng{

struct sockaddr_in cliaddr;//客戶端地址和端口相關信息

socklen_t clilen; //cliaddr的長度,sendto函數的參數

int index; //在當前數組的位置

}AddrMng;

消息體結構體:

typedef struct _MsgBuf{

long mtype; //消息類型

char mtext[MAX_MSGSIZE];

} MsgBuf;

在結構體的基礎上定義了TrmMng trm_mng[MAX_TRM_NUM]和AddrMng addr_mng[MAX_TRM_NUM * 2]這兩個數組來進行統一的終端和客戶端地址的管理。

在系統開始的時候,無論是定位終端還是Android終端,向服務器發送的消息都有兩部分:一部分是包含IP地址和端口號,由服務器自動保存;另外一部分是終端號類型。注冊過程略——編者注。

系統中服務器端對接收到的各種消息的處理是在CEO線程中進行的,它根據不同的消息類型進行不同的處理,CEO線程也是唯一可以和3個消息隊列進行信息交流的線程。它從主消息隊列中取消息,一般采用阻塞監聽的方式,無消息時線程阻塞,有消息時線程喚醒,讀取消息、解析處理后發送到另外兩個消息隊列中,主線程的設計框架如圖3所示。

2 Android端設計

本系統位置顯示終端采用的是基于Android的移動終端或者中控節點,帶有位置信息的消息通過定位終端采集后,上傳到服務器,然后通過服務器配對,傳到指定的接收端。Android端在接收到消息后,先將消息通過線程間傳遞機制傳到Looper的MessageQueue,然后由百度地圖提供的API獲取后進行定位。所以Android端設計分為兩個部分:消息傳遞模塊和百度地圖定位模塊。

2.1 消息傳遞模塊

對于Android端的位置消息主要通過socket方式從服務器獲取。本系統采用Android4.4版本作為其操作系統。由于在Android4.4版本中,主線程中是不能有網絡相關操作的,因此采用這種設計方式可以避免因為網絡操作造成的Activity線程等待,提高用戶體驗。而與此同時,主線程中與網絡通信相關的操作就要用另外一個線程去處理,處理完成后將處理結果傳遞給主線程,這個傳遞機制就是Android中使用很廣泛的Looper機制,采用這種方式也解決了Android中很經典的非主線程不能更新UI的問題。因為在本系統中的socket操作屬于網絡操作,所以不能直接在地圖UI中啟動socket接收位置消息,需要另外啟動一個線程,專門用來接收位置消息和對消息進行解析,然后通過Looper機制傳遞給地圖線程,用來更新當前位置。

Looper機制和系統位置信息傳遞原理略——編者注。

2.2 百度地圖定位模塊

本系統采用的定位服務是基于百度地圖API移動版本的,它支持Android設備應用程序接口,通過這些API可以構建強交互性的應用,同時還可以實現定位、本地搜索、路線規劃等數據服務[5]。

百度地圖應用程序的開發可以通過設置布局文件權限、添加jar包以及顯示百度地圖的控件等幾個步驟實現。其中有一些比較重要的類和對象見表4。

表4 百度地圖類和對象列表

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

initMap()是在地圖線程開始執行的,而在Looper消息隊列的處理函數handleMessage中放置了另外兩個函數moveToPoint(cLat, cLon)和showCurtainPoint(double cLat,double cLon)。這樣當Looper對象調用loop()方法后,就可以循環執行這兩個函數,從而達到對地圖的實時更新。具體流程略——編者注。

3 系統測試

本系統自定義通信協議(協議略),在服務器端接收到從定位終端發送的位置信息處理后,發送到Android終端,再對通信協議進行解析,調用百度地圖服務進行處理,將其顯示在Android終端,可以實現實時獲取與顯示地理位置的功能。在Android端的顯示效果略——編者注。

結 語

隨著目前智能硬件的發展熱潮和我國自主研發的北斗定位系統的普及,遠程定位系統給人們日常生活帶來了很多便利。本文采用的多線程和消息隊列的方式,不僅可以為多個用戶提供同時通信服務,而且還可以應用于很多領域。在Android4.4版本中實現位置信息線程間傳遞和百度地圖的應用,對于其他的位置消息傳遞應用也有很好的借鑒作用,可以在百度地圖的基礎上進行功能擴展。

[1] 曹秀海, 周傳運.具有遠程定位功能的電纜故障監測系統方案[J].建筑電氣,2007,26(4): 29-32.

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

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

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

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

時光、魏金文(碩士研究生),主要研究方向為物聯網與嵌入式系統;馬維華(教授),主要研究方向為嵌入式系統與自動化控制。

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)

猜你喜歡
百度系統
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
Robust adaptive UKF based on SVR for inertial based integrated navigation
百度年度熱搜榜
青年與社會(2018年2期)2018-01-25 15:37:06
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
百度遭投行下調評級
IT時代周刊(2015年8期)2015-11-11 05:50:22
百度“放衛星”,有沒有可能?
太空探索(2014年4期)2014-07-19 10:08:58
主站蜘蛛池模板: 亚洲AⅤ永久无码精品毛片| 国产美女丝袜高潮| 国产白浆视频| 亚洲欧洲日韩综合色天使| 国产精品露脸视频| 欧美精品H在线播放| 国产综合精品日本亚洲777| 91亚洲精选| 欧美国产综合色视频| 国产精品开放后亚洲| 亚洲AV无码不卡无码| 狠狠干欧美| 亚洲最大在线观看| 91娇喘视频| 啊嗯不日本网站| 久久亚洲综合伊人| 狠狠色噜噜狠狠狠狠色综合久| 国产一区二区免费播放| 国产乱子伦一区二区=| 久热中文字幕在线| 99999久久久久久亚洲| 波多野结衣久久高清免费| 国产导航在线| 国产精品无码AⅤ在线观看播放| 国产精品男人的天堂| 国产亚洲欧美日韩在线一区| 久久香蕉国产线看观看精品蕉| 国产91视频免费| 日本a级免费| 最新国产精品第1页| 白浆免费视频国产精品视频| 97超碰精品成人国产| 美女毛片在线| 老司机久久99久久精品播放| 国产精品三级专区| 国产大片喷水在线在线视频| 亚洲人成影院在线观看| 黄色在线不卡| 色AV色 综合网站| 亚洲欧美人成电影在线观看| 亚洲无码不卡网| 九九免费观看全部免费视频| 国产性爱网站| 免费观看亚洲人成网站| 亚洲精品午夜天堂网页| 国产精品欧美激情| 国产无人区一区二区三区| 欧美区国产区| 伊人激情久久综合中文字幕| 国产原创自拍不卡第一页| 91探花在线观看国产最新| 日韩美一区二区| 国产三级国产精品国产普男人| 成人欧美日韩| 免费人成网站在线高清| 尤物视频一区| 99久久亚洲综合精品TS| 亚洲人成网站在线播放2019| 亚洲成年网站在线观看| 色网站在线视频| 国产成人精品视频一区二区电影 | 日韩在线观看网站| 国产精品黄色片| 四虎影视永久在线精品| 欧美人与牲动交a欧美精品 | 色香蕉影院| 国产免费a级片| 亚洲欧美人成人让影院| 婷婷成人综合| 日韩欧美高清视频| 亚洲AV成人一区国产精品| 日本爱爱精品一区二区| 国产乱子伦一区二区=| 国产资源站| 91午夜福利在线观看| 在线日本国产成人免费的| 中国国语毛片免费观看视频| 中文字幕第1页在线播| 亚洲精品图区| 内射人妻无码色AV天堂| 欧美在线视频不卡| 亚洲欧洲自拍拍偷午夜色无码|