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