默认头像
路人甲
路人甲
  • 注册日期2004-07-22
  • 发帖数73
  • QQ
  • 铜币114枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1426回复:0

大家帮我看看代码呢(VC+MO关于intersect)

楼主#
更多 发布于:2005-11-12 13:43

要实现的功能是:根据经纬度动态打点(用的是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后跳不出来).

喜欢0 评分0
QQ:22621544 欢迎交流~^^~
默认头像

返回顶部