楊 帆
(陜西科技大學(xué)電氣與信息工程學(xué)院, 陜西 西安 710021)
隨著社會(huì)的發(fā)展和技術(shù)的進(jìn)步,基于位置的信息服務(wù)開(kāi)始備受關(guān)注,物流監(jiān)控、學(xué)生監(jiān)護(hù)、老弱病殘追蹤管理、司法監(jiān)視以及企業(yè)移動(dòng)工作隊(duì)伍管理等方面也出現(xiàn)了巨大的技術(shù)需求.目前位置信息的服務(wù)系統(tǒng)大多基于GPS定位與專(zhuān)業(yè)地圖標(biāo)定的方法,致使成本居高不下,而且由于GPS技術(shù)的原因,在室內(nèi)、林蔭道、地下室等多種環(huán)境下無(wú)法接收信號(hào),使其定位服務(wù)功能受到一定影響.近年來(lái)基于GSM通信網(wǎng)絡(luò)基站的定位技術(shù)開(kāi)始嶄露頭角,GSM基站定位不受環(huán)境限制,相比GPS定位技術(shù)費(fèi)用極低,同時(shí)Google公司推出的免費(fèi)地圖Google Map使得傳統(tǒng)的定位與地圖標(biāo)注業(yè)務(wù)現(xiàn)在只需要很小的代價(jià)就可以實(shí)現(xiàn).本文使用Google Map和GSM Modem給出了一個(gè)快速實(shí)現(xiàn)定位與地圖標(biāo)注的實(shí)驗(yàn)系統(tǒng).定位與地圖標(biāo)注僅僅是基于位置服務(wù)的信息系統(tǒng)的基本功能,但是一旦和其他應(yīng)用領(lǐng)域結(jié)合則可能帶來(lái)巨大的商機(jī),這也正是本文研究的意義.
眾所周知,GSM網(wǎng)絡(luò)的基礎(chǔ)結(jié)構(gòu)是由一系列的蜂窩基站構(gòu)成的,這些蜂窩基站把整個(gè)通信區(qū)域劃分成一個(gè)個(gè)蜂窩小區(qū).這些小區(qū)小則幾十米,大則幾千米.利用移動(dòng)通信終端在GSM網(wǎng)絡(luò)中通信,實(shí)際上就是通過(guò)某一個(gè)蜂窩基站接入GSM網(wǎng)絡(luò),然后通過(guò)GSM網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)(語(yǔ)音數(shù)據(jù)、文本數(shù)據(jù)、多媒體數(shù)據(jù)等)傳輸?shù)?也就是說(shuō)在GSM中通信時(shí),總是需要和某一個(gè)蜂窩基站連接的,或者說(shuō)是處于某一個(gè)蜂窩小區(qū)中.
GSM無(wú)線通信網(wǎng)的每一個(gè)蜂窩小區(qū)都有位置區(qū)識(shí)別碼(LAC,Location Area Code),小區(qū)內(nèi)基站都有全球唯一的編號(hào)(CELLID,Cell IDentification).GSM基站定位技術(shù)就是通過(guò)獲取通信終端接入基站的CELLID和LAC,查詢基站的CELLID和LAC和基站經(jīng)緯度等地理位置信息的關(guān)聯(lián)關(guān)系,獲取基站的經(jīng)緯度數(shù)據(jù)、所在位置描述,從而大致確定目標(biāo)所在的位置,這種由網(wǎng)絡(luò)側(cè)采集用戶當(dāng)前所在的基站信息以獲取用戶當(dāng)前位置,其精度取決于移動(dòng)基站的分布及覆蓋范圍的大小,一般在城市區(qū)域,由于基站覆蓋密度比較大,定位誤差大躍在150~200 m之間.這種定位技術(shù)投資極小,在精度要求不是很高的應(yīng)用場(chǎng)合可以發(fā)揮積極的作用.
應(yīng)用Google Map和GSM Modem實(shí)現(xiàn)定位與地圖標(biāo)定的實(shí)驗(yàn)系統(tǒng)由計(jì)算機(jī)、GSM通信網(wǎng)絡(luò)和GSM Modem 3部分構(gòu)成,其組成結(jié)構(gòu)示意圖如圖1所示.
圖1 定位與地圖標(biāo)定實(shí)驗(yàn)系統(tǒng)構(gòu)成
定位和地圖標(biāo)注時(shí),計(jì)算機(jī)通過(guò)AT指令控制GSM Modem,獲取GSM Modem中SIM卡在移動(dòng)通信網(wǎng)絡(luò)中注冊(cè)信息,從而得到距離最近的基站編號(hào)CELLID和所在小區(qū)LAC,根據(jù)獲取的CELLID和LAC與基站的關(guān)聯(lián)關(guān)系,獲取基站實(shí)際經(jīng)緯度、地理位置描述等位置信息,借助Google Map API實(shí)現(xiàn)地圖顯示和實(shí)際位置在地圖上的標(biāo)定.
應(yīng)用Google Map和GSM Modem實(shí)現(xiàn)定位與地圖標(biāo)定,關(guān)鍵在于基于GSM Modem能否及時(shí)獲取距離最近的基站的CELLID和LAC,并以所提取的CELLID和LAC數(shù)據(jù)查詢基站信息數(shù)據(jù)庫(kù),獲取監(jiān)視目標(biāo)距離最近的基站的經(jīng)緯度數(shù)據(jù)、所在地點(diǎn)名稱(chēng),有了當(dāng)前位置的經(jīng)緯度數(shù)據(jù),就可以借助Google Map API實(shí)現(xiàn)電子地圖以及地圖標(biāo)注、顯示監(jiān)視目標(biāo)位置,因此系統(tǒng)的關(guān)鍵技術(shù)就是定位信息的采集、定位信息的查詢以及電子地圖顯示.
定位需要的基站CELLID、LAC信息的采集通過(guò)控制與計(jì)算機(jī)相連的GSM Modem獲取,按照本文的設(shè)計(jì)思路只需要獲取距離最近的移動(dòng)基站的LAC和CELLID即可,AT指令集中AT+CREG指令恰恰可以得到這樣的數(shù)據(jù).AT+CREG指令用于網(wǎng)絡(luò)注冊(cè)及狀態(tài)查詢,其基本使用格式如下:
命令格式:AT+CREG=MODE
如果輸入 AT+CREG?
其中:
在VB.NET2005中借助MSCOMM控件實(shí)現(xiàn)通過(guò)串口連接的GSM Modem AT指令發(fā)送與接收串口返回?cái)?shù)據(jù)的關(guān)鍵代碼如下:
End With
With MSCOM
.Settings = (“115200,N,8,1”)
.CommPort = 4
.InputMode = MSCommLib.InputModeConstants.comInputModeText ,設(shè)定為字符傳輸模式
.InputLen = 0 ,設(shè)定每一次從緩沖區(qū)提取的字符個(gè)數(shù),即為一次取走全部的數(shù)據(jù)
.OutBufferCount = 0,發(fā)送緩沖區(qū)清空
.InBufferCount = 0,接收緩沖區(qū)清空
.RThreshold = 1,觸發(fā)oncomm事件
.PortOpen = True
.RTSEnable = True
.DTREnable = True
End WIth
MSCOM.Output = “AT+CREG=2” + vbCr,發(fā)出提取基站編碼的AT指令
Thread.Sleep(500) ,延時(shí),以便串口接收到所有數(shù)據(jù)
Dim str As String = MSCOM.Input
If InStr(str, “+CREG”) > 0 Then ,僅僅處理基站編碼查詢指令,以便加快系統(tǒng)處理速度
Dim strtmp() As String = Split(str, ControlChars.Quote)
Dim tmp As String = CELLID2GPS(strtmp(1), strtmp(3)) ′strtmp(1)是LAC;strtmp(3)是CELLID,
Dim tmpstr() As String = Split(tmp, “,”)
Dim lat As String = tmpstr(0)
Dim lng As String = tmpstr(1)
WebBrowser1.Document.InvokeScript(“GotoPosition”, New Object() {lat, lng})
End If
基站的CELLID和LAC只不過(guò)是一個(gè)16進(jìn)制的編碼,究竟代表什么地理位置,這些關(guān)聯(lián)的數(shù)據(jù)都在移動(dòng)公司內(nèi)部數(shù)據(jù),外部的應(yīng)用系統(tǒng)設(shè)計(jì)與開(kāi)發(fā)很難獲取這些數(shù)據(jù).小規(guī)模區(qū)域應(yīng)用可以采取事先采集區(qū)域內(nèi)部不同位置處的基站LAC和CELLID,建立專(zhuān)有數(shù)據(jù)庫(kù),擺脫通信運(yùn)營(yíng)商的束縛.但是大規(guī)模應(yīng)用環(huán)境下依賴(lài)自行建立數(shù)據(jù)庫(kù)顯然不可行,不過(guò)由于GSM基站定位技術(shù)在業(yè)內(nèi)引起了廣泛關(guān)注,因特網(wǎng)上也出現(xiàn)了一些頗具影響力的基站信息查詢服務(wù)網(wǎng)站,只需要輸入查詢基站的CELLID和LAC,即可返回該基站的經(jīng)緯度數(shù)據(jù)、附近典型建筑物以及與典型建筑物的距離等位置名稱(chēng)信息.實(shí)驗(yàn)環(huán)境下可利用的典型查詢網(wǎng)站有:http://www.fm906.com/other/cellid/、http://www.anttna.com/cell2gps/index.php以及中國(guó)GSM基站定位組織網(wǎng)站http://www.gsmdw.cn/.
為了實(shí)現(xiàn)程序的自動(dòng)查詢,實(shí)驗(yàn)VB.NET設(shè)計(jì)函數(shù),利用GSM Modem獲取的LAC和CELLID的16進(jìn)制編碼字符作為參數(shù),實(shí)現(xiàn)應(yīng)用程序向定位查詢網(wǎng)站的數(shù)據(jù)自動(dòng)提交和查詢結(jié)果獲取.具體實(shí)現(xiàn)代碼如下(以http://www.anttna.com/cell2gps/index.php網(wǎng)站查詢?yōu)槔?:
Function CELLID2GPS(ByVal lac As String, ByVal cellid As String) As String
Dim req As HttpWebRequest
req = HttpWebRequest.Create(“http://www.anttna.com/cell2gps/cell2gps.php?lac=” + CStr(Val(“&H” + lac)) + “&cellid=” + CStr(Val(“&H” + cellid)))
req.UserAgent = “MSIE7.0”
req.Method = “GET”
Dim wr As WebResponse
Try
wr = req.GetResponse()
Catch ex As WebException
wr = CType(ex.Response, HttpWebResponse)
End Try
Dim sr As New IO.StreamReader(wr.GetResponseStream(), System.Text.Encoding.GetEncoding(“gb2312”))
CELLID2GPS = sr.ReadToEnd,輸出格式:緯度,經(jīng)度;省,市,區(qū),縣;位置描述
End Function
Google Maps API是一種易于使用的JavaScript API,它能夠把交互式地圖直接嵌入到應(yīng)用程序的web頁(yè)面內(nèi)部.本文使用webbrowser控件調(diào)用加載Google Map的本地網(wǎng)頁(yè),將Google Map嵌入VB.NET桌面應(yīng)用程序,利用VB.NET桌面應(yīng)用程序和GSM Modem通信,獲取基站編號(hào),查詢得到基站的經(jīng)緯度和地理位置描述信息,由桌面程序和WebBrowser加載的本地頁(yè)面文件內(nèi)的JavaScript腳本交互,實(shí)現(xiàn)桌面應(yīng)用程序調(diào)用Google Map api,達(dá)到動(dòng)態(tài)定位于標(biāo)注當(dāng)前位置的目的.限于篇幅,這里僅僅以動(dòng)態(tài)標(biāo)注為例,Web頁(yè)面內(nèi)部添加如下JavaScript腳本,實(shí)現(xiàn)根據(jù)經(jīng)緯度參數(shù)使得地圖中心顯示位置移至當(dāng)前位置,并且在給定經(jīng)緯度參數(shù)的地理位置上添加標(biāo)注:
圖2 定位與地圖標(biāo)定實(shí)驗(yàn)效果圖
function GotoPosition(lat,lng)
{ Remove();//首先刪除所有標(biāo)記
//alert(“ remove a marker”);
var point=new GLatLng(lat,lng);map.panTo(point);
map.setCenter(new GLatLng(lat,lng),16) ;
map.addOverlay(new GMarker(point));//新位置處添加標(biāo)注
}
桌面程序通過(guò)WebBrowser方法Document.InvokeScript(腳本函數(shù)名稱(chēng),參數(shù)),調(diào)用JavaScript腳本,實(shí)現(xiàn)GoogleMap當(dāng)前位置的居中顯示和動(dòng)態(tài)標(biāo)注:
Dim str() As String = Split(CELLID2GPS(lac, cellid), “,”)
WebBrowser1.Document.InvokeScript(“GotoPosition”, New Object() { str(0), str(1)})
返回的數(shù)據(jù)查詢基站信息數(shù)據(jù)庫(kù),可以得到詳細(xì)的地理位置信息——經(jīng)緯度值:34.380 390,108.968 796;目標(biāo)所在地名稱(chēng):陜西省西安市未央?yún)^(qū),陜西科技大學(xué)(西安校區(qū)) 北環(huán)西北100米(與實(shí)際位置誤差不足百米).
圖2為實(shí)驗(yàn)環(huán)境下由程序控制GSM Modem采集距離其最近基站的LAC和CELLID,分別為“20E3”,“6136”,并使用上述方法獲取基站經(jīng)緯度數(shù)據(jù)和位置名稱(chēng)信息,在Google Map中顯示當(dāng)前位置的實(shí)際效果.圖中Google典型標(biāo)記為基站定位結(jié)果,紅色小圓圈是測(cè)試時(shí)的實(shí)際位置.
基于GSM基站定位技術(shù)僅僅能夠獲取測(cè)試的大體位置,但考慮到目前我國(guó)GSM網(wǎng)絡(luò)基站密度較高,在大城市的主城區(qū),測(cè)試結(jié)果表明定位精度可以達(dá)到100~150 m左右,同時(shí)Google Map API又提供了一種性價(jià)比極高的地圖應(yīng)用程序開(kāi)發(fā)方案,綜合使用GSM Modem和Google Map API可以快速構(gòu)建電子地圖上當(dāng)前位置的標(biāo)定.這種技術(shù)略作改動(dòng)即可在定位服務(wù)精度要求不高的應(yīng)用領(lǐng)域,諸如跟蹤定位系統(tǒng)、物流監(jiān)控、學(xué)生監(jiān)護(hù)、老弱病殘追蹤管理等方面均可發(fā)揮積極的作用.
參考文獻(xiàn)
[1] 黃作維,周 明,張喜梅. GPS/GPRS支持下嵌入式車(chē)載終端的實(shí)現(xiàn)[J]. 計(jì)算機(jī)測(cè)量與控制, 2009, 17(11):2 205-2 209.
[2] 江 寬. Google API開(kāi)發(fā)詳解[M]. 北京: 電子工業(yè)出版社, 2008:51-98.
[3] 劉 濤,肖 漢. 基于目標(biāo)定位的低功耗無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)設(shè)計(jì)[J].計(jì)算機(jī)測(cè)量與控制,2009,17(11):2 342-2 344.
[4] 李壽林, 張 鷹, 李秀萍. 利用GSM無(wú)線模塊收發(fā)短消息[J]. 計(jì)算機(jī)與數(shù)字工程, 2005,33(7): 79-81.