1、準備
GPS(Global Positioning System),即全球定位系統,利用24顆GPS衛星的測距和測時功能進行全球定位,在許多系統中,如機場導航系統,出租車輛管理和調度系統、江河流域的災害資訊管理和預測系統中,GPS得到了廣泛的應用。本文利用MSCOMM控制項實現了GPS資料的採集,可為資訊管理和指揮調度等提供定位元據。
本文採用GPS的非同步串列傳送方式,將GARMIN 12C按NMEA-0183協議輸出的資料擷取到了微機,並將接收到的地理座標轉換成為直角座標。
在DELPHI 5.0 IDE中建立一工程,名為GPSReceiver,在主介面上放置四個TEDIT控制項,用於顯示接收到的地理座標和轉換後的直角座標,其“name”屬性分別為:Editlatitude、Editlongitude、Editxcoord和Editycoord;在四個TEDIT控制項下方放置三個按鈕,用於資料接收的控制和退出程式,其“Caption”屬性分別為“接收”、“斷開”和“返回”;在介面上任意位置放置一個Ttimer控制項、其屬性interval值為“1000”,主要用於每隔一秒接收一次GPS資料;一個TMSCOMM控制項。程式運行後的介面如圖1所示:
圖1
2、編寫代碼
1) 在FORM的implementation部分添加以下聲明
var
nn,x,y,sm,n,weidud,jinchad,firstpxl,secondpxl,a,b,longitude,longitudemargin,latitude:double;
weidustr,weidustrcpy,longitudestr1cpy,longitudestrccpy,
weidustr1,weidustr2,jinchastr,jinchastr1,jinchastr2,longitudestr1,
longitudestr11,longitudestr12,longitudestrc,longitudestrc1,longitudestrc2:string;
gpsstrlist:tstringlist;
gpsstr,gpsstrcpy:string;
gpsstrlen:integer;
2)在FORM的FORMSHOW事件中添加如下代碼:
procedure Tmainfrm.FormShow(Sender: TObject);
begin
mscomm1.CommPort:=1; //預設串口1
mscomm1.InBufferSize:=1024;
mscomm1.Settings:='600,n,8,1'; //傳輸速率為600
if not mscomm1.PortOpen then
mscomm1.PortOpen:=true; //開啟串口
mscomm1.InBufferCount:=0;
mscomm1.RThreshold:=512;
mscomm1.InputLen:=0;
timer1.Enabled:=false; //關閉定時器
a:=6378245.0; b:=6356863.0; //參考橢球的長短軸
firstpxl:=(a*a-b*b)/a/a; //第一偏心率
secondpxl:=(a*a-b*b)/b/b; //第二偏心率
end;