要实现的功能是:根据经纬度动态打点(用的是Addevent),模拟汽车行驶,当右键点击所打的点时出现车的信息.右键点击查找的代码如下,本意是查询右键点击的点周围的一定区域是否包括所打的点mapPt,如果包括,则弹出信息:
CMoPoint Pt(m_map.ToMapPoint((float)X,(float)Y));
CMoRectangle select_Rect;
if(!select_Rect.CreateDispatch("MapObjects2.Rectangle")) return;
double x=Pt.GetX();
double y=Pt.GetY();
CMoRectangle rect_Extent(m_map.GetExtent());
double X_Scale;
double Y_Scale;
X_Scale=rect_Extent.GetHeight()/m_map.GetFullExtent().GetHeight();
Y_Scale=rect_Extent.GetWidth()/m_map.GetFullExtent().GetWidth();
double m_Scale=X_Scale;
if(X_Scale>Y_Scale)
m_Scale=Y_Scale;
select_Rect.SetBottom(y+50*m_Scale);
select_Rect.SetTop(y-50*m_Scale);
select_Rect.SetLeft(x-50*m_Scale);
select_Rect.SetRight(x+50*m_Scale);
CMoRecordset m_SelectedRecSet;
CMoMapLayer selectedMapLayer;
selectedMapLayer=m_map.GetLayers().Item(COleVariant(short(0)));
m_SelectedRecSet=selectedMapLayer.SearchShape(select_Rect,moContaining,"");
CMoFields fields(m_SelectedRecSet.GetFields());
CMoField field(fields.Item(COleVariant(TEXT("SHAPE"))));
VARIANT va;
VariantInit(;va);
va.vt = VT_I4;
va.vt = VT_DISPATCH;
va.pdispVal = select_Rect.m_lpDispatch;
if(! mapPt.Intersect(field.GetValue().pdispVal,va))
MessageBox("can't find");
else
MessageBox("find");
运行后,点击无响应,请高手指点一下(debug查询发现程序进intersect后跳不出来).