sshj_mil
路人甲
路人甲
  • 注册日期2004-09-08
  • 发帖数62
  • QQ
  • 铜币131枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1765回复:1

求助:车辆监控 『轨迹回放』功能实现的原理

楼主#
更多 发布于:2004-12-06 16:45
<P>车辆监控 『轨迹回放』功能实现的原理</P>
喜欢0 评分0
bareixi
路人甲
路人甲
  • 注册日期2003-11-24
  • 发帖数16
  • QQ
  • 铜币94枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2004-12-08 14:03
<P>1.获取定义时间段内的GPS数据记录(RecordSet)</P>
<P>2.VB下使用时钟控件,VC下定义OnTimer时钟事件</P>
<P>3.时钟事件下获取RecordSet当前的GPS信息并RecordSet->MoveNext,直到EOF</P>
<P>
void CCarTrackBack::OnTimer(UINT nIDEvent)
{
switch(nIDEvent)
{
case TRACKBACK_TIMER:
  CarTrackBack();
  break;
default:
  break;
}</P>
<P>CCarTrackView::OnTimer(nIDEvent);
}</P>
<P>void CCarTrackBack::CarTrackBack()</P>
<P>{</P>
<P>if (NULL == rst)
{
  return;
}</P>
<P>GPSINFO gpsinfo;
memset(;gpsinfo, 0, sizeof(gpsinfo));
char szField[64] = {0};
memset(szField, 0, sizeof(szField));</P>
<P>CChildFrame *pFrame = (CChildFrame *)GetParentFrame();
ASSERT(NULL != pFrame);
CDialogBar *m_wndDialogBar = pFrame->pDialogBar;</P>
<P>try{
    strcpy(szField, (_bstr_t)rst->Fields->GetItem(_variant_t("TID"))->Value);
    strcpy(gpsinfo.TID, szField);
    
    strcpy(szField, (_bstr_t)rst->Fields->GetItem(_variant_t("latitude"))->Value);
    gpsinfo.fLatitude = atof(szField);
    m_wndDialogBar->SetDlgItemText(IDC_LATITUDE, szField);</P>
<P>    strcpy(szField, (bstr_t)rst->GetFields()->GetItem(_variant_t("longitude"))->Value);
    gpsinfo.fLongitude = atof(szField);
    m_wndDialogBar->SetDlgItemText(IDC_LONGITUDE, szField);
    strcpy(szField, (bstr_t)rst->GetFields()->GetItem(_variant_t("speed"))->Value);
    gpsinfo.fSpeed = atoi(szField);
    m_wndDialogBar->SetDlgItemText(IDC_SPEED, szField);</P>
<P>    strcpy(szField, (bstr_t)rst->GetFields()->GetItem(_variant_t("angle"))->Value);
    gpsinfo.fDirectionAnge = atof(szField);
    m_wndDialogBar->SetDlgItemText(IDC_ANGLE, szField);
    <FONT color=#ff0000><B>UpdateCarRealtimeTrack(;gpsinfo);</B></FONT>
  
    iTotalCount++;
    CProgressCtrl *pCtrl = (CProgressCtrl *)m_wndDialogBar->GetDlgItem(IDC_PROGRESS);
    pCtrl->SetPos(iTotalCount);
    pCtrl->UpdateWindow();
    <B><FONT color=#ff0000>rst->MoveNext();</FONT></B>
  }
  catch(_com_error *e)
  {
   MessageBox("获取轨迹数据发生错误" + e->Description());
  }</P>
<P>if (rst->adoEOF)
{
  KillTimer(TRACKBACK_TIMER);
  rst->Close();
  rst = NULL;
  CString strShow;
  strShow.Format("轨迹数据回放完毕,共有 %d 点", iTotalCount);
  iTotalCount = 0;
  MessageBox(strShow);
}</P>
<P>return;</P>
<P>}</P>
[此贴子已经被作者于2004-12-8 14:13:14编辑过]
举报 回复(0) 喜欢(0)     评分
游客

返回顶部