《電子技術(shù)應用》
您所在的位置:首頁 > 測試測量 > 設計應用 > 基于Android的多人定位系統(tǒng)的設計與實現(xiàn)*
基于Android的多人定位系統(tǒng)的設計與實現(xiàn)*
2015年微型機與應用第8期
李冬睿1,,趙建保1,,許統(tǒng)德2
(1.廣東農(nóng)工商職業(yè)技術(shù)學院 計算機系,,廣東 廣州 510507,; 2.廣東農(nóng)工商職業(yè)技術(shù)學院 教務處,,廣東 廣州 510507)
摘要: 目前大多數(shù)導航軟件都采用指南針指向的單目標導航模式進行定位和導航,,此模式無法進行一對一定位且導航指示不夠簡明,,為了滿足更多定位情境和提供更簡明的導航指示,,設計了一款基于Android的多人定位系統(tǒng),該系統(tǒng)提供準確快捷的好友定位以及更多導航生活服務,,具有多人定位,、導航找人、定點集合等功能,。在實際應用中,,該系統(tǒng)取得較好的效果。
Abstract:
Key words :

  摘  要: 目前大多數(shù)導航軟件都采用指南針指向的單目標導航模式進行定位和導航,,此模式無法進行一對一定位且導航指示不夠簡明,,為了滿足更多定位情境和提供更簡明的導航指示,設計了一款基于Android的多人定位系統(tǒng),,該系統(tǒng)提供準確快捷的好友定位以及更多導航生活服務,,具有多人定位、導航找人,、定點集合等功能,。在實際應用中,該系統(tǒng)取得較好的效果。

  關(guān)鍵詞Android系統(tǒng),;定位,;導航;一對一定位,;定點集合,;百度地圖

0 引言

  近年來,,隨著3G和4G[1]網(wǎng)絡的日益完善,,智能手機在國內(nèi)的普及率越來越高,國內(nèi)手機市場主要以Android手機和蘋果手機為主流,,而Android系統(tǒng)的開源性和免費性使其在國內(nèi)手機市場占有更高的份額,。目前,集定位與導航功能于一身的Android主流APP有百度地圖,、高德地圖和Google地圖[2],,這些應用已實現(xiàn)汽車導航、公交換乘和步行導航等功能,,都采用指南針指向的單目標導航模式進行定位和導航,。雖然這些主流的導航軟件都能很好地解決用戶的定位和導航問題,但在某些應用場景卻表現(xiàn)得無能為力,,例如逛街找人,、學生考勤、定點集合,、老人或小孩跟蹤定位,、戶外隊員管理等。

  為使地圖資源能得到充分利用,,能適應更多的應用場景,,本文開發(fā)了一款基于Android的多人定位系統(tǒng)。該系統(tǒng)使用百度地圖API,,突破了以往導航定位的單目標模式,,實現(xiàn)了一對一定位、多人定位,、導航找人,、定點集合、動態(tài)好友位置追蹤與指向和手機防盜等功能,,能更好地為便捷生活提供服務,。

1 相關(guān)技術(shù)

  1.1 Android平臺

  Android是Google開發(fā)的基于Linux平臺的開源手機操作系統(tǒng)[3]。Android平臺主要在操作系統(tǒng)和中間件支撐下,,能夠用于用戶界面設計和應用軟件開發(fā)[4],。Android自身集成豐富的API,且大部分代碼開源。Android的應用框架層采用結(jié)構(gòu)化設計,,從而簡化了Android應用程序的開發(fā)[4],。Android四大組件包括Activity、Service,、BroadCastReceiver和ContentProvider[5],,Android應用程序的開發(fā)環(huán)境只需Eclipse和插件ADT即可[6]。

  1.2百度地圖API

  百度地圖API是一套由JavaScript語言編寫的應用程序接口,,它提供了網(wǎng)絡地圖服務的全部功能,,包括地圖數(shù)據(jù)、地圖顯示,、地圖操作,、地圖標注、地圖編輯,、地圖查詢等[7],。百度通過地圖服務應用接口將應用開發(fā)平臺和地理信息數(shù)據(jù)捆綁,將復雜的地理信息系統(tǒng)底層進行封裝,。用戶可不必了解它的技術(shù)細節(jié)就能在應用中快速構(gòu)建基礎(chǔ)地理底圖[8],。

2 需求分析

  2.1 功能描述

  本系統(tǒng)為用戶提供準確快捷的好友定位與導航生活服務,典型應用場景有逛街找人,、學生考勤,、定點集合、老人或小孩跟蹤定位,、戶外隊員管理等,,因此,需具備以下7個功能:用戶登錄,、用戶注冊,、好友添加、防盜,、多人定位,、導航、一對一定位,。具體功能詳細描述如表1所示,。

005.jpg

  2.2 用例分析

  根據(jù)以上的功能描述,得出圖1所示的用戶用例圖,。

001.jpg

3 系統(tǒng)設計

  3.1多人定位系統(tǒng)架構(gòu)設計

  為使本系統(tǒng)開發(fā)和維護更方便,,并提高系統(tǒng)數(shù)據(jù)的安全性,本系統(tǒng)采用分層模型的設計思想,,系統(tǒng)架構(gòu)如圖2所示,。

  3.2 多人定位系統(tǒng)時序圖

  在用戶使用本系統(tǒng)時,,首先進行身份驗證,如果是新用戶則必須先注冊,,然后再登錄,,登錄成功后可以選擇相應的功能,包括防盜,、添加好友和多人定位,,在多人定位功能中可以實時顯示好友所在位置以及集合點位置,并能實現(xiàn)3種方式的導航,,還可進行一對一定位來實現(xiàn)好友互找,。系統(tǒng)詳細時序圖如圖3所示。

002.jpg

  3.3 定位功能設計

  Android手機可通過GPS+GPRS,、只有GPS和只有WiFi這3種情況下進行實時定位,,利用百度地圖API實現(xiàn)地圖顯示。終端的實時位置信息保存在定位服務器(定位服務器使用PHP開發(fā))中,,定位服務器收到各終端的定位請求后,將位置信息發(fā)回給終端,,為終端提供必要的路線信息和導航信息,。

4 多人定位系統(tǒng)主要功能的實現(xiàn)

  4.1 一對一定位的實現(xiàn)

  當兩個用戶互相加為好友后,便可使用一對一定位功能,,本功能以指針實時指向加距離的方式來實現(xiàn)定位,,從而能更直觀地反映好友相對于自己所在的位置和方向。

  根據(jù)當前用戶和目標用戶的方向來進行實時更新指南針旋轉(zhuǎn),,更新指南針旋轉(zhuǎn)的線程代碼如下:

  //這是更新指南針旋轉(zhuǎn)的線程,,靈活使用handler,每20 ms檢測方向變化值,,對應更新指南針旋轉(zhuǎn)

  protected Runnable mCompassViewUpdater=new Runnable(){

  @Override

  public void run(){

  if(mPointer!=null&&!mStopDrawing)

  {

  if(mDirection!=mTargetDirection)

  {

  //計算耗時最短的動畫

  float to=mTargetDirection,;

  if(to-mDirection>180)

  {to-=360;}

  else if(to-mDirection<-180)

  {to+=360,;}

  //限制MAX_ROTATE_DEGREE的最大速度

  float distance=to-mDirection,;

  if(Math.abs(distance)>MAX_ROATE_DEGREE)

  {distance = distance > 0 MAX_ROATE_DEGREE:(-1.0f*

  MAX_ROATE_DEGREE);}

  //如果距離短的話需要減慢速度

  mDirection=normalizeDegree(mDirection+((to-mDirection)*

  mInterpolator.getInterpolation(Math.abs(distance)>

  MAX_ROATE_DEGREE 0.4f: 0.3f))),;

  //用了一個加速動畫去旋轉(zhuǎn)圖片

  Log.e("test",, ""+mDirection);

  float t=mDirection+target,;

  mPointer.updateDirection(t),;// 更新指南針旋轉(zhuǎn)

  }

  mHandler.postDelayed(mCompassViewUpdater, 20);

  // 20 ms后重新執(zhí)行自己,,比定時器好

  }

  }

  };

  當兩個用戶不斷移動位置時,,通過兩者的經(jīng),、緯度實時更新兩者的距離,,更新距離的代碼如下:

  private void setjuli(int la, int lo){

  GeoPoint p1=new GeoPoint((int)(Omylocation.getMyLocation().latitude*1e6),, (int)(Omylocation.getMyLocation().longitude*1e6)),;

  GeoPoint p2=new GeoPoint(la, lo),;

  int jl=(int)(DistanceUtil.getDistance(p1,, p2));

  juli.setText(jl+"米"),;

  target=get(p1.getLatitudeE6(),,p1.getLongitudeE6(),p2.getLatitudeE6(),,p2.getLongitudeE6()),;

  }

  4.2 添加集合點的實現(xiàn)

  當要向好友添加集合點時,客戶端向定位服務器發(fā)送添加集合點請求,,添加請求代碼如下:

  public void AddCollection(ArrayList<String> array,, int la, int lo)

  throws Exception {

  // 添加集合點

  String url=BASE_URL+"/addCollection.php",;

  int len=array.size(),;

  String str="[";

  for (int i=0,; i < len,;i++){

  str=str+"\""+array.get(i)+"\"";

  if((i+1)<len) {

  str=str +",,",;

  }

  }

  str=str+"]";

  Map<String,, String>map=new HashMap<String,, String>();

  map.put("la",, "" + la),;

  map.put("lo", "" + lo),;

  map.put("arr",, str);

  Log.e("info",, "addCollection la:"+la+"lo:"+lo),;

  Log.e("info",, this.postRequest(url, map)),;

  }

5多人定位系統(tǒng)的應用

  多人定位系統(tǒng)采用Android 4.2.2+PHP開發(fā),,使用多層架構(gòu)設計。系統(tǒng)的登錄,、注冊和功能選擇界面如圖4所示,。

003.jpg

  添加好友、刷新好友位置和導航選擇界面如圖5所示,。

004.jpg

  一對一定位,、添加集合點以及查看好友最近登錄時間如圖6所示。

6 結(jié)論

  本文詳細介紹了一款基于Android平臺,,利用百度地圖API設計和實現(xiàn)的多人定位系統(tǒng),,實現(xiàn)了一對一定位、多人定位,、導航找人,、定點集合、動態(tài)好友位置追蹤與指向和手機防盜等功能,,該系統(tǒng)達到了預期的效果并成功上線使用,。

參考文獻

  [1] 丁革媛,高寶芹,,孫強.無線通信技術(shù)的發(fā)展研究[J].微型機與應用,2014,,33(10):1-3,,6.

  [2] 王秋穎,陸宇含,,王成龍.電子地圖在水利工程管理中的應用[J].電子技術(shù)與軟件工程,,2014,14(7):107.

  [3] 陳浩,,張敏.基于ARM的車載導航接收機應用軟件設計與實現(xiàn)[J].計算機測量與控制,,2013,21(3):813-815.

  [4] 農(nóng)麗萍,,王力虎,,黃一平.Android在嵌入式車載導航系統(tǒng)的應用研究[J].計算機工程與設計,2010,,31(11):2473-2476.

  [5] 趙亮,,張維.基于Android技術(shù)的界面設計與研究[J].電腦知識與技術(shù),2009,,5(29):8183-8185.

  [6] 韓揚.Android應用軟件安全評測工具的設計與實現(xiàn)[D].北京:北京交通大學,,2012.

  [7] 王紅崧,,周海晏.基于百度地圖API的旅游地理信息系統(tǒng)開發(fā)[J].現(xiàn)代計算機(專業(yè)版),2012,,23(8):57-59.

  [8] 李艷.基于地圖API的Web地圖服務及應用研究[J].地理信息世界,,2010(2):54-57.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。