[转载]Palm 串行通讯GPS数据读取的实现
Palm 串行通訊GPS數據讀取的實現
關于J2ME程序編寫的教程,各大網站均有介紹。但是J2ME教程的學習與實際應用畢竟還有一段距離。筆者從事J2ME一年多, 已經成功地開發出基于無線互聯網palm與GPS、電子地圖結合個人導航系統。該系統利用Palm通過串口采集GPS數據,將GPS數據在電子地圖上定 位,地圖數據的更新或空間屬性分析通過掌上電腦Palm的紅外口與手機相連,將數據請求發送到服務器,服務器接收請求后,將處理結果返回給Palm用戶。 以下介紹該系統中比較重要技術-
1引言
目前,無論作為GIS 應用體現的自定位導航系統,大多數采用筆記本電腦或特別定做硬件,其顯示設備的成本占去了整個系統成本的絕大部分,硬件平臺的性能和成本制約這些高新技術 的推廣和應用,個人消費這個巨大的市場一時還難以啟動,無法適應某些特殊行業(如:公安、消防、地名數據采集、野外探險導航等)的應用。隨著計算機軟件硬 件技術發展, WAP無線互聯網技術的成功應用、各種具有無線互聯網功能的移動智能終端(如:掌上電腦、WAP手機、Pager等)的出現,使得擁有這些智能終端的人們 可以隨時隨地完成以前只有辦公室或家里才能完成的工作,人們可以"在移動中辦公",智能終端+無線互聯網已經成功地應用到人們生活的方方面面。與此同時, 與這些智能終端配套的外圍硬件(如:GPS、GSM模塊等)的出現,進一步拓展了這些智能終端的應用領域。不言而喻,智能終端、GPS、無線互聯網等新技 術在GIS領域的應用,勢必豐富GIS理論和拓展GIS應用領域。基于這些移動智能終端平臺的GIS+GPS+無線互聯網一體化的研究,必然成為GIS領 域中一個新興的重要研究領域。國際GIS界將GIS+GPS+無線互聯網一體化的研究稱為"移動GIS(Mobile GIS)"。
筆者從事該領域研究1年有余,已經成功地開發出基于無線互聯網palm與GPS、電子地圖結合個人導航系統。該系統利用Palm通過串口采集GPS數據, 將GPS數據在電子地圖上定位,地圖數據的更新或空間屬性分析通過掌上電腦Palm的紅外口與手機相連,將數據請求發送到服務器,服務器接收請求后,將處 理結果返回給Palm用戶。以下介紹該系統中比較重要技術-PDA(palm)GPS數據的讀取。
|
2 Palm掌上電腦介紹
2.1硬件介紹
Palm 是3Com公司的產品,其操作系統為PalmOS。Palm OS是一種32位的嵌入式操作系統。Palm提供了串行通訊接口和紅外線傳輸接口。利用它可以方便地與其他外部設備通訊、傳輸數據。Palm OS與同步軟件(HotSync)結合可以使掌上電腦與PC機上的信息實現同步,把臺式機的功能擴展到了手掌上。Palm應用范圍相當廣泛,如:聯絡及工 作表管理、電子郵件及互聯網通訊、銷售人員及組別自動化、等等。Palm外圍硬件也十分豐富,有數碼相機,GPS接收器,調制解調器,GSM無線電話,數 碼音頻播放設備,便攜鍵盤,語音記錄器,條碼掃描,無線尋呼接收器,探測儀等許多許多。
其中Palm與GPS結合的應用,可以不但可以做導航定位,還可以結合GPS做氣候的監測、地名調查等。
2.2開發工具選取
目前針對Palm環境的開發工具主要有CodeWarror C、JAVA、AppForgePersonal(Basic)等等。由于Palm平臺與微機硬件、軟件平臺有著本質的差異,為了減少開發人員的培訓費用,提高開發速度,我們采用Java語言作為系統開發工具。Java技術由三個版本組成:.Micro 微版(J2ME)、. Standard標準版(J2SE)、 Enterprise企業版(J2EE)。其中J2ME主要針對消費電子類產品(如日常用品,如微小的智能卡,機頂盒,各種手持設備等)和嵌入式設備的開發工具和運行環境。J2ME具有很多java技術特性,它可以在各種支持java的設備上運行 、代碼短小、安全性好、 用J2ME實現的應用可以方便地升級到J2SE, J2EE。
圖1 Java技術結構圖
|
3 PDA與GPS通訊的NMEA協議
GPS即全球定位系統,它主要有三大組成部分,即空間星座部分、地面監控部分和用戶設備部分。其中GPS空間星座部分、地面監控部分均為美國所控制; GPS的用戶設備主要由接收機硬件和處理軟件組成。用戶通過用戶設備接收GPS衛星信號,經信號處理而獲得用戶位置、速度等信息,最終實現利用GPS進行 導航和定位的目的。目前許多GPS廠商遵循NMEA0183協議針對PDA掌上電腦開發許多導航型GPS。這些GPS提供串行通訊接口,串行通訊參數為:
波特律=4800 數據位=8位 停止位=1位 無奇偶校驗
GPS與掌上電腦通訊時,通過串口每秒鐘發送10條數據。實際導航應用讀取GPS的空間定位數據時,我們可以根據需要每隔幾秒鐘更新一次經緯度和時間數據。而更頻繁的數據更新就沒有必要了,而且會白白浪費Palm掌上設備有限的電池。我們不需要了解NMEA 0183通訊協議的全部信息,僅需要從中挑選出我們需要的那部分定位數據。其余的信息我們忽略掉。
如果此時和衛星的通訊正常的話,可以接收到的數據格式樣如下:
$GPRMC,204700,A,3403.868,N,11709.432,W,001.9,336.9,170698,013.6,E*6E
數據說明如下:
$GPRMC 代表GPS推薦的最短數據
204700 UTC_TIME 24小時制的標準時間,按照小時/分鐘/秒的格式
A A 或者 V A表示數據"OK",V表示一個警告
3403.868 LAT 緯度值,精確到小數點前4位,后3位
N LAT_DIR N表示北緯,S表示南緯
11709.432 LON 經度值,精確到小數點前5位,后3位
W LON_DIR W表示西經,E表示東經
如果當前沒有和衛星取得聯系,那么字符串的格式為:
$GPRMC,UTC_TIME,V,...
下面是一個例子:
$GPRMC,204149,V,,,,,,,170698,,*3A
|
4 J2ME 串行讀寫GPS數據的實現
Palm的J2ME對GPS串口數據讀寫可以采用兩種方式,一種是采用對串口采用原始單個字節數據讀寫,另一種采用緩沖區字節數組讀寫。(注意:J2ME 為Palm提供的KVM的1.0版本不支持串行通訊速率4800波特,GPS串行通訊速率為4800波特,必須采用CLDC1.02以上版本或KAWT提 供的Color KVM)
在實際Palm對串口GPS數據讀寫實驗中,我們發現前者效率低、讀寫速度慢,平均每3-7秒才能讀取到所需的GPS定位數據,而后者讀寫速度快,可以每秒讀到所需的GPS數據,沒有GPS數據丟失。所以,在此僅介紹后一種GPS的讀取方式。
J2ME 和Palm Profile中已經提供了對串口讀寫的類Protocol,通過構造Protocol實例serialPort,利用 serialPort.openInputStream()獲得輸入流InputStream,利用InputStream將GPS串口數據讀入到一個緩 沖區字節數組,將字節數組轉化為字符串,判斷GPS坐標標志"$GPRMC",截取坐標數據。
圖2 Palm對GPS讀取UML協作圖
見源程序 PrintMe.java
package earth_survy;import java.util.*;
import javax.microedition.io.*;
import java.io.*;
import com.sun.kjava.*;
import com.sun.cldc.io.palm.comm.*;
public class GetGpsData extends Spotlet {
static Graphics g=Graphics.getGraphics();
static Protocol serialPort = new Protocol();
static String url="0;baudrate=4800;bitsperchar=8;stopbits=1;parity=none";
static InputStream is;
// Open the serial Port for Gps Data Input
public boolean openPort(){
try {
serialPort.open(url,1, true);
is=serialPort.openInputStream();
return true;
}
catch (Exception ex) {
return false;
}
}
//Close the serial Port
public boolean closePort(){
try {
is.close();
serialPort.close();
return true;
}
catch (Exception ex) {
return false;
}
}
//Read the GPS data
//Mark is "$GPRMC
//rdLen is the buffer length
//getlen is the return lenth;
public String readGpsData(String mark,int rdlen,int getlen){
byte[] readBuffer = new byte[rdlen];
String rawGpsData;
String Gprmc;
while (true){
try{
//Read raw GPS data into a buffer;
is.read(readBuffer);
rawGpsData=new String(readBuffer);
//determin the positon of the Mark==> $GPRMC;
int pos=rawGpsData.indexOf(mark);
if (pos>-1)
{
Gprmc=rawGpsData.substring(pos);
if (Gprmc.length()>getlen)
{
Gprmc=Gprmc.substring(0,getlen);
break;
}
}
}
catch(Exception e){
}
}
return Gprmc;
//end loop
}//end method
}
來自 “ ITPUB博客 ” ,鏈接:http://blog.itpub.net/374079/viewspace-130103/,如需轉載,請注明出處,否則將追究法律責任。
轉載于:http://blog.itpub.net/374079/viewspace-130103/
總結
以上是生活随笔為你收集整理的[转载]Palm 串行通讯GPS数据读取的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QGraphicsView图形视图框架使
- 下一篇: 乐聊----java界面聊天室