不用单独发给你,我就帖一点在这里吧,其他朋友感兴趣也可以分享,以下是航点解析的函数。
//解析GPS发送来的航点数据包
procedure TCommForm.Translate_D108_Wpt_type(Package : string);
var
XX,YY :do
uble;
WPt : TGPSWayPoint;
//航点类,没什么特别的,你可以设计你自己的。
szSubPack : string;
begin
WPt := TGPSWayPoint.Create;//建一个航点实例
szSubPack:=Copy(Package,52,length(Package)-48);//取航点名称,可以是中文,注意有可能有很多空格,早期etrex大概只有5个汉字,而后期的和航海GPS可能有很长的中文名
Wpt.Name := Copy(szSubPack, 1, Pos(#0, szSubPack) - 1);
Wpt.Name := Trim(Wpt.Name);
Delete(szSubPack, 1, Pos(#0, szSubPack));
wpt.comment := Copy(szSubPack, 1, Pos(#0, szSubPack) - 1);//取其中的备注部分,一般是空的,Vista可能会把建立航点的时间写在这里。
Wpt.wpt_class := Ord(Package[4]);
wpt.color := Ord(Package[5]);
{ Black, Dark_Red, Dark_Green, Dark_Yellow,
Dark_Blue, Dark_Magenta, Dark_Cyan, Light_Gray,
Dark_Gray, Red, Green, Yellow,
Blue, Magenta, Cyan, White,
Default_Color = 0xFF
}
wpt.dspl := Ord(Package[6]);
wpt.Alt := GetSingleData(Package,36,4);
if Wpt.Alt > 10E10 then
Wpt.Alt := 0;
wpt.dpth := GetSingleData(Package,40,4);
if Wpt.Dpth > 10E10 then
Wpt.Dpth := 0;
wpt.Dist := GetSingleData(Package,44,4);
if Wpt.Dist > 10E10 then
Wpt.Dist := 0;
{
dspl_name = 0, /* Display symbol with waypoint name */
dspl_none = 1, /* Display symbol by itself */
dspl_cmnt = 2 /* Display symbol with comment */
}
wpt.attr := Ord(Package[7]);
{ The “attr” member should be set to a value of 0x60.}
wpt.smbl := GetIntData(Package,8,2);
YY := GetCoordinate(Copy(Package,28,4));
XX := GetCoordinate(Copy(Package,32,4));
WPt.AddPt(XX,YY);
end;