发表用户:balingxu
收集整理:James.Liu
相关讨论:http://www.mygis.com.cn/forum/dispbbs.asp?boardID=4&ID=4030
信息原始来源:不祥

文章标题:Delphi 写的轨迹回放代码
var
  CarCode:string;
  EndTime:string;
  StartTime:string;
  n:integer;  //gps轨迹中取得点的个数
  Time:TDateTime;
  i:integer;
  ptsTrack:MapXLib_TLB.CMapXPoints;
  pt1,pt2:MapXLib_TLB.CMapXPoint;
  tempStyle:MapXLib_TLB.CMapXStyle;
  fNewFea:variant;
  fMapFea:variant;
  pTrack:array of pTrackRec;
begin
  CoInitialize(nil);
  CarCode:=commblock.CommCarCard;
  StartTime:=DateTimeToStr(commblock.CommStartTime);
  EndTime:=DateTimeToStr(commblock.CommEndTime);
  if not GisDM.GisDCOMConn.Connected then
  GisDM.GisDCOMConn.Connected:=True;
  GisDM.cdsTrackInfo.Data:=GisDM.GisDCOMConn.AppServer.GetGpsInfo(CarCode,StartTime,EndTime);
  GisDM.cdsTrackInfo.Open;
  n:=GisDM.cdsTrackInfo.RecordCount;
  SetLength(pTrack,n);
  GisDM.cdsTrackInfo.First;
  pTrack[0].TrackLong:=GisDM.cdsTrackInfo.FieldByName('longitude').AsFloat;
  pTrack[0].TrackLat:=GisDM.cdsTrackInfo.FieldByName('latitude').AsFloat;
  pTrack[0].SendTime:=GisDM.cdsTrackInfo.FieldByName('sendtime').AsFloat;
  GisDM.cdsTrackInfo.Next;
  for i:= 1 to n-1 do
  //记录车辆经过的每一个点
  begin
    pTrack[i].TrackLong:=GisDM.cdsTrackInfo.FieldByName('longitude').AsFloat;
    pTrack[i].TrackLat:=GisDM.cdsTrackInfo.FieldByName('latitude').AsFloat;
    pTrack[i].SendTime:=GisDM.cdsTrackInfo.FieldByName('sendtime').AsDateTime;
    GisDM.cdsTrackInfo.Next;
  end;
  i:=1;
  for i:= 1 to n do
  //轨迹回放
  begin
    sleep(INTERVAL);
    if i = 1 then
    begin
      XCar:=pTrack[i-1].TrackLong;
      YCar:=pTrack[i-1].TrackLat;
      if MainForm.CarAddTimer.Enabled=False then
      MainForm.CarAddTimer.Enabled:=True;
      //MainForm.CarAddTimer.Enabled:=False;
    end
    else
    if i>1  then
    begin
      sleep(1000);
      preXCar:=pTrack[i-2].TrackLong;
      preYCar:=pTrack[i-2].TrackLat;
      XCar:=pTrack[i-1].TrackLong;
      YCar:=pTrack[i-1].TrackLat;
      MainForm.Map1.Layers.AnimationLayer:=Track_Layer;
      Track_Layer.Editable:=True;
      ptsTrack:=MapXLib_TLB.CoPoints.Create;
      pt1:=MapXLib_TLB.CoPoint.Create;
      pt2:=MapXLib_TLB.CoPoint.Create;
      //回放轨迹路线
      tempStyle:=MapXLib_TLB.CoStyle.Create;
      SetTrackStyle(tempStyle);
      pt1.Set_(preXCar,preYCar);
      pt2.Set_(XCar,YCar);
      ptsTrack.Add(pt1,EmptyParam);
      ptsTrack.Add(pt2,EmptyParam);
      fNewFea:=MainForm.Map1.FeatureFactory.CreateLine(ptsTrack,tempStyle);
      fMapFea:=Track_Layer.AddFeature(fNewFea,EmptyParam);
      sleep(1000);
      if MainForm.CarAddTimer.Enabled=False then
      MainForm.CarAddTimer.Enabled:=True;
      //MainForm.CarAddTimer.Enabled:=False;
    end;
  end;
  fMapFea.Update;
  VarClear(fMapFea);
  VarClear(fNewFea);
  MainForm.CarAddTimer.Enabled:=False;
end;
;