MO中按点进行查询

在地图上用鼠标点击某处,可以得到其在数据库的信息,并将其显示出来.我自定义的工具按钮消息,m_CurrentOperation表示当前执行哪项操作,这里我取150,可以随便取,只要能标记就行.

if(m_CurrentOperation==150&&Button==1)
   {
   
    CMoLayers layers(m_map.GetLayers());   ///获得所有图层
     for(short i=0;i<layers.GetCount();i++)
  {
   
              
         
         CMoMapLayer layer;
         layer.AttachDispatch(layers.Item(COleVariant(i)));//获得某个图层

            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,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;
   //以下系数中0.01可能根据地图比例自己调,我以前不知这是什么意思
   //弄了好半天才明白,这个系数可以确定范围
      select_Rect.SetBottom(y-0.01*m_Scale);
      select_Rect.SetTop(y+0.01*m_Scale);
      select_Rect.SetLeft(x-0.01*m_Scale);
      select_Rect.SetRight(x+0.01*m_Scale);
   
      //由查询范围选取目标,下面有个数字6,改成5能用,改成其它不能用,不知为什么
            CMoRecordset m_SelectedRecSet=layer.SearchShape(select_Rect,6,"");
   m_SelectedRecSet.MoveFirst();
   //得到选取目标的属性信息
   CMoTableDesc tableDesc(m_SelectedRecSet.GetTableDesc());
   CMoFields ShapFields(m_SelectedRecSet.GetFields());//获取数据域
   CMoField  ShapeField;
   CString resultStr;
   //将些数据域中所有信息显示出来
   for(int j=0;j<tableDesc.GetFieldCount();j++)
   {
    
   CString name=tableDesc.GetFieldName(j);
   
   ShapeField=ShapFields.Item(COleVariant(TEXT(name)));
   CString value=ShapeField.GetValueAsString();
   resultStr=resultStr+name+":"+value+"/n";
   }
   MessageBox(resultStr);
   

   
  
  } 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值