謝明輝 張 奇
(吉林建筑大學管理學院,長春 130118)
位置信息服務在學生監(jiān)護、老人定位追蹤、移動工作隊伍管理等方面展現(xiàn)了巨大的需求[1].目前位置信息服務主要基于GSM(Global System for Mobile Communications:GSM)技術實現(xiàn)定位,在偏遠地區(qū)和一些無GSM網(wǎng)絡的地方,GPS(Global Positioning System:GPS)定位技術應用廣泛,但都只能使用其中一種技術定位,越來越不能滿足用戶的定位需求.本文采用GoogleMap提供的地圖數(shù)據(jù),設計了可以使用兩種不同方式進行定位的地圖應用程序.此程序使定位技術更加靈活,能更好地為用戶服務.
研究利用eclipse加載GoogleMap模塊,使用前須向Google公司申請應用權限,首先要獲取計算機的SHA碼,按照winows->preferance->android->build的流程獲取SHA碼,然后在Google API Console網(wǎng)站上進行Google Map API v2秘鑰的申請,最后把秘鑰寫入eclipse的程序中從而實現(xiàn)谷歌地圖的加載.
android:value="AIzaSyDmekol0xU61tJyJoRjeaq-Ysp0O8-6504"
此代碼是對獲取秘鑰的定義,來驗證秘鑰,如果是真,則可接收地圖數(shù)據(jù),否則不能加載地圖.
GSM網(wǎng)絡的基礎結構是由一系列信號塔構成,通信區(qū)域被這些信號塔分成一個個的小區(qū)域[1].移動終端在GSM網(wǎng)絡中通信,依靠這些信號塔來接入GSM網(wǎng)絡,實現(xiàn)數(shù)據(jù)在GSM網(wǎng)絡中的傳輸.位置區(qū)識別碼(LAC,Lcation Area Code)在GSM的每一個小區(qū)域都有且編號(CELLID)唯一.GSM的定位技術是通過獲取移動終端所在小區(qū)域的LAC和CELLID,并查詢兩者之間的關聯(lián)關系來獲取信號塔的經(jīng)緯度數(shù)據(jù),從而確定目標的位置[1].GSM定位技術的精度取決于信號塔的密集程度,一般在城市中信號塔覆蓋密集,其精度一般在100m~210m之間[2].在精度要求不高的場合可以發(fā)揮積極的作用.
GPS是一個由覆蓋全球的24顆衛(wèi)星組成的系統(tǒng).該系統(tǒng)可保證在任意時刻,地球上任意一點都可以同時觀測到4顆衛(wèi)星,以保證衛(wèi)星可以采集到該觀測點的經(jīng)緯度和高度,實現(xiàn)導航、定位、授時等功能.該技術可用來引導飛機、船舶、車輛及個人安全、準確地沿著選定的路線準時到達目的地.GPS全球衛(wèi)星定位系統(tǒng)由三部分組成:空間部分—GPS星座;地面控制部分—地面監(jiān)控系統(tǒng);用戶設備部分—GPS信號接收機[3].
(1) 空間部分. GPS的空間部分是由位于距地表20 200km的上空,軌道傾角為55°的均勻分布在6個軌道面上(每個軌道面4顆)的24顆工作衛(wèi)星組成.此外,還有4顆備份衛(wèi)星在軌運行[2].衛(wèi)星的分布使得在全球任何地方、任何時間都可觀測到4顆以上的衛(wèi)星,并能保持良好定位解算精度的幾何圖象,提供在時間上連續(xù)的全球?qū)Ш侥芰Γ?/p>
(2) 用戶設備部分. 用戶設備部分即GPS信號接收機.其主要功能是捕獲到按一定衛(wèi)星截止角所選擇的待測衛(wèi)星,并跟蹤這些衛(wèi)星的運行.由接收機硬件、機內(nèi)軟件,以及GPS數(shù)據(jù)的后處理軟件包構成完整的GPS用戶設備.目前,各種類型的接受機體積越來越小,重量越來越輕,便于野外觀測使用.
移動終端通過AT指令控制GSM模塊,獲取GSM模塊中SIM卡在移動通信網(wǎng)絡中注冊的信息,從而得到距離最近的信號塔編號CEELLID和所在小區(qū)域的LAC,根據(jù)獲取的CEL,LID和LAC的關聯(lián)關系,取得信號塔的實際經(jīng)緯度、地理位置描述等位置信息,借助Google Map API實現(xiàn)地圖顯示和實際位置在地圖上的標定[1].定位的關鍵技術是Google Map API如何獲取在GSM方式下的經(jīng)緯度信息.
findViewById(R.id.button1).setOnClickListener(newView.OnClickListener() //獲取信號塔的經(jīng)緯度信息
{ public void onClick(View v)
{ TelephonyManager mTelephonyManager=(TelephonyManager) //獲取lac:mcc:mnc:cell-id
getSystemService(Context.TELEPHONY_SERVICE);}
這里,MCC表示移動國家代碼;MNC代表移動網(wǎng)絡號碼;LAC表示位置區(qū)域碼;CID表示基站編號[4].
GsmCellLocation location=(GsmCellLocation) mTelephonyManager.getCellLocation();
int lac=location.getLac() //獲取LAC
int cellId=location.getCid() //獲取CID
GPS定位技術的實現(xiàn)是通過GPS信號接收機捕獲到跟蹤的衛(wèi)星信號,測量接收天線至衛(wèi)星的偽距離和距離的變化率,解調(diào)出衛(wèi)星軌道參數(shù)等數(shù)據(jù).根據(jù)這些數(shù)據(jù),接收機中的微處理計算機就可按定位解算方法計算出用戶所在地理位置的經(jīng)緯度、高度、速度和時間等信息[2].最后Google Map API對提供的數(shù)據(jù)進行獲取從而實現(xiàn)定位.
if(alm.isProviderEnabled(android.location.LocationManager.GPS_PROVR))
{Toast.makeText(this,“GPS模塊正?!?Toast.LENGTH_SHORT).show();
Return;}
Toast.makeText(this,“請開啟GPS!”,Toast.LENGTH_SHORT).show();
Intent intent=new Intent(Settings.ACTION_SECURITY_SETTINGS);
startActivityForResult(intent,0);
private void getLocation()
{ Criteria criteria=new Criteria(); //Criteria類是描述Location Provider的標準;
criteria.setAccuracy(Criteria.ACCURACY_FINE); //獲取地理位置的setAccurac精度;
criteria.setAltitudeRequired(false); //是否獲取海拔;
String provider=locationManager.getBestProvider(criteria,true); //獲取GPS信息;
Location location=locationManager.getLastKnownLocation(provider); //獲取位置信息;
updateToNewLocation(location); //設置監(jiān)聽器,位置信息自動更新的最小時間為N秒[5].
locationManager.requestLocationUpdates(provider,100*1000,500,locationListener);}
Google Map API雖然在GPS和GSM兩種方式下獲取位置信息,但通過獲取的數(shù)據(jù)進行定位的方法是相同的.
if(location!=null)
{ myPosition.setLocation(location); //對得到的坐標進行設置;
Double geoLat=location.getLatitude()*1E6; //用location的getLatitude()屬性獲取緯度;
Double geoLng=location.getLongitude()*1E6; //用location的getLongitude()屬性獲取經(jīng)度;
mapController.animateTo(point); //實現(xiàn)定位[6]}
運行程序,呈現(xiàn)在屏幕的是世界地圖,點擊屏幕上的定位按鈕程序會自動加載到移動終端所在的地理位置,其精度一般在800m-1 000m.程序運行效果如圖1所示;運行程序,輸入要定位地點的經(jīng)緯度,如定位山東濟南,點擊定位按鈕程序就會把可視區(qū)域移動到濟南從而實現(xiàn)定位,其精度一般在800m~1 000m.程序運行效果如圖2所示.
圖1 在虛擬機上實現(xiàn)GSM和GPS定位
圖2 在虛擬機上實現(xiàn)已知經(jīng)緯度的定位
定位可以是移動終端自身的定位,也可以是對已知經(jīng)緯度坐標的定位,并在GoogleMap上顯示其所在的位置.這種功能是基于GoogleMap API實現(xiàn)的,由于GoogleMap提供免費的地理數(shù)據(jù),因此在eclipse中對GoogleMap進行編程時可以直接用其數(shù)據(jù).通過代碼的編寫來實現(xiàn)已知經(jīng)緯度坐標的定位及顯示.
if(longti.equals(“”)||latti.equals(“”)) //判斷輸入的經(jīng)緯度是否正確;
{Toast.makeText(MainActivity.this“請輸入正確的經(jīng)緯度”;
Toast.LENGTH_LONG).show(); //設置消息出現(xiàn)的時間長短;
return;}
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(Double.valueOf(latti),Double.valueOf(longti)),6.0f));}
使用CameraUpdateFactory類構造CameraUpdate對象.根據(jù)CameraUpdate對象,調(diào)用AMap.moveCamera(CameraUpdate),通過AMap.moveCamera(CameraUpdate)實現(xiàn)已知坐標的定位.
Google Map API提供了一種性價比極高的地圖應用程序開發(fā)方案,綜合使用GSM,GPS技術和Google Map API可以快速地構建電子地圖并進行當前位置的標定.由于GSM和GPS應用于不同的條件下,二者可以相互結合互相補充,使定位技術更加靈活、實用.基于GoogleMap和Android的定位系統(tǒng)可以應用于生活中的各個方面,如跟蹤定位系統(tǒng)、學生監(jiān)護、物流監(jiān)控等方面均可發(fā)揮積極的作用.
參 考 文 獻
[1] 楊 帆.基于GSM和GoogleMap的定位與地圖標注關鍵技術研究[J].山西科技大學學報(自然科學版),2011,(2):122-125.
[2] 張 恒,郭際明,周命瑞,丁 旭.基于GoogleMap的GPS定位跟蹤系統(tǒng)研究實現(xiàn)[C].北京:中國衛(wèi)星導航學術年會組委會,2012.
[3] 李輔成.基于GPS和GIS的車輛監(jiān)控系統(tǒng)[D].武漢:武漢理工大學,2011.
[4] 陳 星,江蘭帆.基于Google Android平臺的移動開發(fā)研究[J].福建電腦,2008(11):156-157.
[5] 李壽林,張 鷹,李秀萍.利用GSM無線模塊收發(fā)短消息[J].計算機與數(shù)字工程,2005,33(7):79-81.
[6] HE Ting-ting,LUO Xiao-shu,LIAO Zhi-xian,HUANG Xiao-han,Design of Real-time Vehicle Monitoring System Based on GPRS&GPS[J].Modern Electronics Technique,2011,34(17):193-195.