摘 要: 目前大多數導航軟件都采用指南針指向的單目標導航模式進行定位和導航,此模式無法進行一對一定位且導航指示不夠簡明,為了滿足更多定位情境和提供更簡明的導航指示,設計了一款基于Android的多人定位系統,該系統提供準確快捷的好友定位以及更多導航生活服務,具有多人定位、導航找人、定點集合等功能。在實際應用中,該系統取得較好的效果。
關鍵詞: Android系統;定位;導航;一對一定位;定點集合;百度地圖
0 引言
近年來,隨著3G和4G[1]網絡的日益完善,智能手機在國內的普及率越來越高,國內手機市場主要以Android手機和蘋果手機為主流,而Android系統的開源性和免費性使其在國內手機市場占有更高的份額。目前,集定位與導航功能于一身的Android主流APP有百度地圖、高德地圖和Google地圖[2],這些應用已實現汽車導航、公交換乘和步行導航等功能,都采用指南針指向的單目標導航模式進行定位和導航。雖然這些主流的導航軟件都能很好地解決用戶的定位和導航問題,但在某些應用場景卻表現得無能為力,例如逛街找人、學生考勤、定點集合、老人或小孩跟蹤定位、戶外隊員管理等。
為使地圖資源能得到充分利用,能適應更多的應用場景,本文開發了一款基于Android的多人定位系統。該系統使用百度地圖API,突破了以往導航定位的單目標模式,實現了一對一定位、多人定位、導航找人、定點集合、動態好友位置追蹤與指向和手機防盜等功能,能更好地為便捷生活提供服務。
1 相關技術
1.1 Android平臺
Android是Google開發的基于Linux平臺的開源手機操作系統[3]。Android平臺主要在操作系統和中間件支撐下,能夠用于用戶界面設計和應用軟件開發[4]。Android自身集成豐富的API,且大部分代碼開源。Android的應用框架層采用結構化設計,從而簡化了Android應用程序的開發[4]。Android四大組件包括Activity、Service、BroadCastReceiver和ContentProvider[5],Android應用程序的開發環境只需Eclipse和插件ADT即可[6]。
1.2百度地圖API
百度地圖API是一套由JavaScript語言編寫的應用程序接口,它提供了網絡地圖服務的全部功能,包括地圖數據、地圖顯示、地圖操作、地圖標注、地圖編輯、地圖查詢等[7]。百度通過地圖服務應用接口將應用開發平臺和地理信息數據捆綁,將復雜的地理信息系統底層進行封裝。用戶可不必了解它的技術細節就能在應用中快速構建基礎地理底圖[8]。
2 需求分析
2.1 功能描述
本系統為用戶提供準確快捷的好友定位與導航生活服務,典型應用場景有逛街找人、學生考勤、定點集合、老人或小孩跟蹤定位、戶外隊員管理等,因此,需具備以下7個功能:用戶登錄、用戶注冊、好友添加、防盜、多人定位、導航、一對一定位。具體功能詳細描述如表1所示。
2.2 用例分析
根據以上的功能描述,得出圖1所示的用戶用例圖。
3 系統設計
3.1多人定位系統架構設計
為使本系統開發和維護更方便,并提高系統數據的安全性,本系統采用分層模型的設計思想,系統架構如圖2所示。
3.2 多人定位系統時序圖
在用戶使用本系統時,首先進行身份驗證,如果是新用戶則必須先注冊,然后再登錄,登錄成功后可以選擇相應的功能,包括防盜、添加好友和多人定位,在多人定位功能中可以實時顯示好友所在位置以及集合點位置,并能實現3種方式的導航,還可進行一對一定位來實現好友互找。系統詳細時序圖如圖3所示。
3.3 定位功能設計
Android手機可通過GPS+GPRS、只有GPS和只有WiFi這3種情況下進行實時定位,利用百度地圖API實現地圖顯示。終端的實時位置信息保存在定位服務器(定位服務器使用PHP開發)中,定位服務器收到各終端的定位請求后,將位置信息發回給終端,為終端提供必要的路線信息和導航信息。
4 多人定位系統主要功能的實現
4.1 一對一定位的實現
當兩個用戶互相加為好友后,便可使用一對一定位功能,本功能以指針實時指向加距離的方式來實現定位,從而能更直觀地反映好友相對于自己所在的位置和方向。
根據當前用戶和目標用戶的方向來進行實時更新指南針旋轉,更新指南針旋轉的線程代碼如下:
//這是更新指南針旋轉的線程,靈活使用handler,每20 ms檢測方向變化值,對應更新指南針旋轉
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)));
//用了一個加速動畫去旋轉圖片
Log.e("test", ""+mDirection);
float t=mDirection+target;
mPointer.updateDirection(t);// 更新指南針旋轉
}
mHandler.postDelayed(mCompassViewUpdater, 20);
// 20 ms后重新執行自己,比定時器好
}
}
};
當兩個用戶不斷移動位置時,通過兩者的經、緯度實時更新兩者的距離,更新距離的代碼如下:
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 添加集合點的實現
當要向好友添加集合點時,客戶端向定位服務器發送添加集合點請求,添加請求代碼如下:
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多人定位系統的應用
多人定位系統采用Android 4.2.2+PHP開發,使用多層架構設計。系統的登錄、注冊和功能選擇界面如圖4所示。
添加好友、刷新好友位置和導航選擇界面如圖5所示。
一對一定位、添加集合點以及查看好友最近登錄時間如圖6所示。
6 結論
本文詳細介紹了一款基于Android平臺,利用百度地圖API設計和實現的多人定位系統,實現了一對一定位、多人定位、導航找人、定點集合、動態好友位置追蹤與指向和手機防盜等功能,該系統達到了預期的效果并成功上線使用。
參考文獻
[1] 丁革媛,高寶芹,孫強.無線通信技術的發展研究[J].微型機與應用,2014,33(10):1-3,6.
[2] 王秋穎,陸宇含,王成龍.電子地圖在水利工程管理中的應用[J].電子技術與軟件工程,2014,14(7):107.
[3] 陳浩,張敏.基于ARM的車載導航接收機應用軟件設計與實現[J].計算機測量與控制,2013,21(3):813-815.
[4] 農麗萍,王力虎,黃一平.Android在嵌入式車載導航系統的應用研究[J].計算機工程與設計,2010,31(11):2473-2476.
[5] 趙亮,張維.基于Android技術的界面設計與研究[J].電腦知識與技術,2009,5(29):8183-8185.
[6] 韓揚.Android應用軟件安全評測工具的設計與實現[D].北京:北京交通大學,2012.
[7] 王紅崧,周海晏.基于百度地圖API的旅游地理信息系統開發[J].現代計算機(專業版),2012,23(8):57-59.
[8] 李艷.基于地圖API的Web地圖服務及應用研究[J].地理信息世界,2010(2):54-57.