国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Palm 串行通訊GPS數據讀取的實現

2019-11-18 14:49:22
字體:
來源:轉載
供稿:網友

  引言
目前,無論作為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
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 三穗县| 阳山县| 四平市| 南溪县| 凤阳县| 江津市| 惠来县| 康定县| 正镶白旗| 宁明县| 南郑县| 瑞安市| 丰都县| 上高县| 板桥市| 尼勒克县| 津市市| 海晏县| 合川市| 井冈山市| 湖口县| 元谋县| 建始县| 万山特区| 苗栗市| 泌阳县| 普格县| 奉贤区| 临朐县| 和平区| 类乌齐县| 屯留县| 昌黎县| 二手房| 固安县| 名山县| 满洲里市| 竹溪县| 互助| 保亭| 望江县|