新聞中心

EEPW首頁 > 汽車電子 > 市場分析 > 車聯(lián)網(wǎng)監(jiān)控中心的研究與設(shè)計

車聯(lián)網(wǎng)監(jiān)控中心的研究與設(shè)計

——
作者:吳斌 姜立標 姜思羽 時間:2014-04-24 來源:電子產(chǎn)品世界 收藏

  在數(shù)據(jù)庫的表格中,設(shè)計的字段主要有車主、車牌號、車型、經(jīng)度、緯度、速度、前左車門、前右車門、后左車門、后右車門、前端蓋、后端蓋、故障代碼和駕駛員疲勞狀態(tài)等,在收到了GPRS發(fā)送過來的數(shù)據(jù)之后,根據(jù)協(xié)議進行解碼,將其中的數(shù)據(jù)分別存入對應的數(shù)據(jù)庫當中。向數(shù)據(jù)庫中新增數(shù)據(jù)的代碼如下:

本文引用地址:http://butianyuan.cn/article/245925.htm

  Adodc1.Recordset.AddNew '將數(shù)據(jù)寫入數(shù)據(jù)庫

  Adodc1.Recordset("車主") = chezhu

  Adodc1.Recordset("車牌號") = chepaihao

  Adodc1.Recordset("車型") = chexing

  . . . . . .

  Adodc1.Recordset.Update

  上面的chezhu、chepaihao、chexing等變量都是獲得了車載終端數(shù)據(jù)的全局變量,利用這種方式可以將數(shù)據(jù)存入到數(shù)據(jù)庫對應的字段當中,便于查詢、使用和保存。

  2 Android手機客戶端設(shè)計

  2.1 Android中Socket通信設(shè)計

  Android中提供了一個Socket的類,存在于“java.net.Socket”包中。首先要設(shè)定連接服務器的公網(wǎng)IP以及端口號,同時以輸入流InputStream()的形式來獲取從服務器傳過來的數(shù)據(jù),然后從輸入流中讀取相應的數(shù)據(jù)存入緩沖區(qū),最后讀取緩沖區(qū)即可以得到所需要的數(shù)據(jù)。把接收到的數(shù)據(jù)存在一個字符串里面,根據(jù)Android手機客戶端和PC上位機的協(xié)議進行數(shù)據(jù)的解碼,再把解碼后的數(shù)據(jù)存入到相應的字段當中,比如經(jīng)度、緯度、速度、駕駛員疲勞狀態(tài)等等。

  使用手機也可以向PC機發(fā)送數(shù)據(jù)和指令,比如點擊了“車輛監(jiān)控”按鈕時,就需要向PC機發(fā)送指令,再通過PC機來控制車輛,從而達到手機監(jiān)控車輛的效果。當手機需要向PC機發(fā)送數(shù)據(jù)時,建立Socket連接之后,是通過輸出流來實現(xiàn)的,先定義好所要發(fā)送的數(shù)據(jù),再用outputStream.write()語句來將數(shù)據(jù)發(fā)送到Socket服務器。

  由于Socket在連接通信的時候有可能會出現(xiàn)異常,所以系統(tǒng)要求加入用來捕捉和處理異常的try-catch語句。程序運行正常時,執(zhí)行try{}里面的代碼;當出現(xiàn)異常時,執(zhí)行catch里面的語句捕捉和處理異常。Android中Socket通信的部分代碼如下。

  try{

  Socket Socket = new Socket("125.216.144.177",8091); //實例化Socket

  InputStream indata = Socket.getInputStream(); //獲得從服務器傳過來的數(shù)據(jù)

  byte[] buffer = new byte[indata.available()]; //緩沖區(qū)

  indata.read(buffer); //讀取緩沖區(qū)

  String msg = new String(buffer); //轉(zhuǎn)換字符串

  System.out.println(msg); //將得到的數(shù)據(jù)進行輸出

  String[] arr= msg.split(","); //以“,”分割收到的數(shù)據(jù),存入arr[]數(shù)組當中

  OutputStream outputStream = Socket.getOutputStream(); //獲得輸出流,向服務器發(fā)送數(shù)據(jù)

  byte[] buffer2 = new byte[1111] ; //定義要發(fā)送的數(shù)據(jù)

  outputStream.write(buffer2, 0, 6); //開始發(fā)送數(shù)據(jù)

  }catch (IOException e) {

  // TODO Auto-generated catch block

  e.printStackTrace(); }

  2.2 Android中電子地圖的加載與糾偏

  近幾年隨著Android操作系統(tǒng)的興起,越來越多的地圖供應商都提供了Android地圖的SDK(軟件開發(fā)包),在Android中開發(fā)地圖加載的流程如下[5]:

  Android程序在開發(fā)地圖時,需要在“AndroidManifest.xml”列表中添加多個應用權(quán)限,保證電子地圖能夠正確加載。

  然后進行初始化設(shè)置,在“SetupMap”函數(shù)中,需要設(shè)置地圖視圖、設(shè)置縮放尺度、將指定坐標設(shè)置為地圖中點。

  “MapView”類的“setTraffic”方法可以設(shè)置顯示地圖視圖的模式,地圖視圖的模式有衛(wèi)星圖map.setSatellite(true)、一般地圖map.setTraffic(true)、街道圖map.setStreetView。“MapController”類的“setZoom”方法可以控制地圖的縮放尺度。由全球地圖(1)到街道地圖(21),數(shù)值越大地圖細節(jié)越詳細。

  Android通過“Geopoint”類來定義坐標,“Geopoint”接受的兩個參數(shù)分別是“緯度”、“經(jīng)度”值,需要以整數(shù)來表示。“Geopoint”接受的緯度和經(jīng)度手機通過Socket從上位機獲取,然后通過實例化GeoPoint ()對象,在GeoPoint ()輸入緯度和經(jīng)度即可以實現(xiàn)地圖的加載[6]。

  GeoPoint point = new GeoPoint((int)(weidu),(int)(jingdu));

  無論是Google地圖還是百度地圖,GPS坐標直接輸入加載處理的位置是有偏差的,論文使用百度地圖提供的在線API坐標轉(zhuǎn)換接口來實現(xiàn)糾偏,其語句為

  GeoPoint point2 =CoordinateConvert.bundleDecode(CoordinateConvert .

  fromWgs84ToBaidu(point));進行轉(zhuǎn)換之后可以很好的解決坐標偏移的問題,測試結(jié)果表明定位誤差在5米以內(nèi)。

  為了在地圖上標示車輛所在的位置,需要添加一個定位圖標。在Android電子地圖中屬于覆蓋物,所有的覆蓋物都繼承“Overlay”類,本次設(shè)計自定義一個CustomItemizedOverlay子類,繼承ItemizedOverlay類,用來實現(xiàn)標注定位圖標和定位文字的功能。

  3 系統(tǒng)的測試與結(jié)論

  在設(shè)計好監(jiān)控中心和手機客戶端之后,配合硬件進行測試,監(jiān)控中心要具備公網(wǎng)IP,圖4和圖5為監(jiān)控中心的部分界面展示,圖6為Android手機客戶端界面。

  從以上測試結(jié)果可知,本次系統(tǒng)的設(shè)計達到了預期目標,系統(tǒng)總體運行流暢,上位機監(jiān)控中心和Android手機能夠正確顯示車輛的基本信息、精確顯示車輛的位置、對車輛進行監(jiān)控和控制、警示駕駛員是否疲勞等,便于車輛的管理、監(jiān)控、調(diào)度、遠程診斷等,為我國的智能交通行業(yè)的發(fā)展提供有力的參考。


上一頁 1 2 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉