GpsSet.cpp
上传用户:hzwailv
上传日期:2010-01-09
资源大小:405k
文件大小:5k
- // GpsSet.cpp : implementation file
- //
- #include "stdafx.h"
- #include "MapDemo.h"
- #include "GpsSet.h"
- #include "math.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CGpsSet
- #define OFFSETTEST 5
- IMPLEMENT_DYNCREATE(CGpsSet, CCmdTarget)
- CGpsSet::CGpsSet()
- {
- StartX=0.0;
- StartY=0.0;
- dSpeed=2000;
- dDirectory=0;
- m_dCX=0;
- m_dCY=0;
- strName="GPS";
- m_nFeaID=0;
-
- }
- CGpsSet::~CGpsSet()
- {
- }
- BEGIN_MESSAGE_MAP(CGpsSet, CCmdTarget)
- //{{AFX_MSG_MAP(CGpsSet)
- // NOTE - the ClassWizard will add and remove mapping macros here.
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CGpsSet message handlers
- void CGpsSet::Serialize(CArchive& ar)
- {
- if (ar.IsStoring())
- { // storing code
- }
- else
- { // loading code
- }
- }
- void CGpsSet::SetStartXY(double X, double Y)
- {
- StartX=X;
- StartY=Y;
- }
- void CGpsSet::UpdateGraph(CMapXLayer &layer)
- {
- UpdateFeature(layer.GetFeatureByID(m_nFeaID));
- }
- void CGpsSet::UpdateFeature(CMapXFeature &feature)
- {
- CMapXPoint point;
- point.CreateDispatch(point.GetClsid()); //Creates a dispatch for the point
- point.Set(m_dCX,m_dCY);
- feature.SetPoint(point.m_lpDispatch);
- feature.Update();
- CMapXStyle style=feature.GetStyle();
- if(style.GetSymbolFontRotation()!=(short)dDirectory)
- {
- style.SetSymbolFontRotation((short)dDirectory);
- feature.SetStyle(style.m_lpDispatch);
- feature.Update();
- }
- }
- CMapXFeature CGpsSet::FindFeature(CMapXLayer &layer)
- {
-
- return layer.GetFeatureByID(m_nFeaID);
- }
- void CGpsSet::AddFeature(CMapX* pMapX,CMapXLayer &layer)
- {
- CMapXPoint point;
- point.CreateDispatch(point.GetClsid());
- CMapXFeatureFactory cFactory=pMapX->GetFeatureFactory();
- point.Set(StartX,StartY);
- m_dCX=StartX;
- m_dCY=StartY;
- COleVariant vtPoint;
- vtPoint.vt = VT_DISPATCH;
- vtPoint.pdispVal = point.m_lpDispatch;
- vtPoint.pdispVal->AddRef();
-
- CMapXStyle style=layer.GetStyle();
- style.SetSymbolFontRotation((short)dDirectory);
- COleVariant vtstyle;
- vtstyle.vt = VT_DISPATCH;
- vtstyle.pdispVal = style.m_lpDispatch;
- vtstyle.pdispVal->AddRef();
- CMapXFeature feature=cFactory.CreateSymbol(vtPoint,vtstyle);
-
- layer.AddFeature(feature);
-
- CMapXFeatures features=layer.AllFeatures();
- CMapXFeature fea=features.Item(features.GetCount());
-
- m_nFeaID=fea.GetFeatureID();
- layer.SetKeyField("Name");
- fea.SetKeyValue(strName);
- fea.Update();
- CString strValue;
-
- layer.SetKeyField("StartX");
- strValue.Format(_T("%10.5f"),StartX);
- fea.SetKeyValue(strValue);
- fea.Update();
-
- layer.SetKeyField("StartY");
- strValue.Format(_T("%10.5f"),StartY);
- fea.SetKeyValue(strValue);
- fea.Update();
- layer.SetKeyField("方向");
- strValue.Format(_T("%10.5f"),dDirectory);
- fea.SetKeyValue(strValue);
- fea.Update();
- layer.SetKeyField("速度");
- strValue.Format(_T("%10.5f"),dSpeed);
- fea.SetKeyValue(strValue);
- fea.Update();
- }
- void CGpsSet::Run()
- {
- double dx,dy;
- dx=dSpeed*sin(dDirectory*0.01745329)*3/(3600*60);
- dy=dSpeed*cos(dDirectory*0.01745329)*3/(3600*60);
-
- m_dCX=m_dCX+dx;
- m_dCY=m_dCY+dy;
- }
- BOOL CGpsSet::HitTest(double x, double y,CMapX* pMapX)
-
- {
-
- float sX,sY;
- pMapX->ConvertCoord(&sX,&sY,&m_dCX,&m_dCY,miMapToScreen);
- double dx=fabs((double)sX-x);
- double dy=fabs((double)sY-y);
- if(dx<OFFSETTEST&&dy<OFFSETTEST) return TRUE;
- else return FALSE;
- }
- /////////////////////////////////////////////////////////////////////////////
- // CGpsSetArray
- IMPLEMENT_DYNCREATE(CGpsSetArray, CCmdTarget)
- CGpsSetArray::CGpsSetArray()
- {
- }
- CGpsSetArray::~CGpsSetArray()
- {
- }
- BEGIN_MESSAGE_MAP(CGpsSetArray, CCmdTarget)
- //{{AFX_MSG_MAP(CGpsSetArray)
- // NOTE - the ClassWizard will add and remove mapping macros here.
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CGpsSetArray message handlers
- void CGpsSetArray::AddTarget(CGpsSet *target)
- {
- m_ObjectList.Add((CObject*)target);
- }
- CGpsSet* CGpsSetArray::GetTarget(int nIndex)
- {
- return (CGpsSet*)m_ObjectList[nIndex];
- }
- void CGpsSetArray::DeleteAllTarget()
- {
- for(int i=0;i<m_ObjectList.GetSize();i++)
- delete m_ObjectList[i];
- m_ObjectList.RemoveAll();
- }
- void CGpsSetArray::Run()
- {
- for(int i=0;i<m_ObjectList.GetSize();i++)
- {
- CGpsSet* pTarget=GetTarget(i);
- pTarget->Run();
- }
- }
- void CGpsSetArray::UpdateGraph(CMapXLayer &layer)
- {
- for(int i=0;i<m_ObjectList.GetSize();i++)
- {
- CGpsSet* pTarget=GetTarget(i);
- pTarget->UpdateGraph(layer);
- }
- }
- CGpsSet* CGpsSetArray::HitTest(double X, double Y,CMapX* pMapX)
- {
- for(int i=0;i<m_ObjectList.GetSize();i++)
- {
- CGpsSet* pTarget=GetTarget(i);
- if(pTarget->HitTest(X,Y,pMapX))
- return pTarget;
- }
- return NULL;
- }
- void CGpsSetArray::SetActiveTarget(CGpsSet *pTarget)
- {
- m_pActiveTarget=pTarget;
- }
- CGpsSet* CGpsSetArray::GetActiveTarget()
- {
- return m_pActiveTarget;
- }