设为首页 加入收藏

TOP

7.5.4 车站查询的实现(2)
2013-10-07 14:53:21 来源: 作者: 【 】 浏览:63
Tags:7.5.4 车站 查询 实现

7.5.4  车站查询的实现(2)

第4~15行代码为定义辅助的变量和记录集的初始化工作。

第16~41行代码实现了从数据表中查找站点的相关信息,插入到列表控件中。

第42~44行代码实现了查询后的控件更新显示。

上述代码中,函数SetBkColor()设置列表控件的背景颜色,函数SetTextColor ()设置列表控件中文字的颜色,然后根据用户输入的车站的名称遍历记录集,查找出所有经过该车站的车次的信息,插入到列表控件中。

上述消息函数最终实现了获取查询的站点名,通过函数FindArea()显示查询结果,并在该地方创建闪烁指示灯,方便查询者快速找到。该函数的具体代码如下:

代码位置:见光盘中本章源代码的CMapPublicView类。

  1. 1  void CMapPublicView::FindArea(CString searchText)  
  2. 2  {  
  3. 3    int i=0;  
  4. 4    CString str;  
  5. 5    CString expression;                                    //查找条件表达式  
  6. 6    CMoRecordset recs;                                 //定义记录集对象  
  7. 7    bool flag=false;  
  8. 8    float X,Y;  
  9. 9    while(i<MAXLAYERS)  
  10. 10    {  
  11. 11      if(i==15||i==21||i==23||i==25)                      //不同的层对象不同  
  12. 12        expression.Format("(Resname Like '%s')",searchText);  //构造查询语句  
  13. 13      else  
  14. 14        expression.Format("(Name Like '%s')",searchText);  
  15. 15      if(flag)  
  16. 16        break;  
  17. 17      recs=m_mapLayer[i].SearchExpression(expression);        //返回满足条件记录  
  18. 18      if(recs)  
  19. 19      {  
  20. 20        recs.MoveFirst();                                 //移动到第一条记录  
  21. 21        while(!recs.GetEof())                             //如果没到最后一条  
  22. 22        {  
  23. 23          CMoFields fields(recs.GetFields());  
  24. 24          CMoField shapeField(fields.Item(COleVariant("Shape")));                                                                         //获取数据  
  25. 25          if(m_mapLayer[i].GetShapeType()==21)                //图层几何类型为点  
  26. 26          {  
  27. 27            CMoPoint *pPoint=new CMoPoint();  
  28. 28            pPoint->AttachDispatch(shapeField.Get_Value().pdispVal);  
  29. 29            m_Map.CenterAt(pPoint->GetX(),pPoint->GetY());    //获取当前位置坐标  
  30. 30            m_Map.FromMapPoint(pPoint->m_lpDispatch,&X,&Y);  
  31. 31            createled(X,Y);                               //创建闪烁指示灯  
  32. 32            require_attribute(searchText);  
  33. 33            flag=true;                                    //查询结果不为空  
  34. 34            break;  
  35. 35          }  
  36. 36          else if(m_mapLayer[i].GetShapeType()==22)           //图层几何类型为线  
  37. 37          {  
  38. 38            CMoLine *pLine=new CMoLine();  
  39. 39            pLine->AttachDispatch(shapeField.Get_Value().pdispVal);  
  40. 40            m_Map.FlashShape(pLine->m_lpDispatch,8);  
  41. 41            flag=true;  
  42. 42            require_attribute(searchText);                    //显示该地点相关属性  
  43. 43            break;  
  44. 44            pLine->ReleaseDispatch();  
  45. 45          }  
  46. 46          else  
  47. 47            recs.MoveNext();                              //记录后移  
  48. 48        }  
  49. 49      }  
  50. 50      i++;  
  51. 51    }  
  52. 52    if(!flag)                                         //没有查询到记录  
  53. 53    {  
  54. 54      CMainFrame *pFrame=(CMainFrame *)AfxGetMainWnd();  
  55. 55      CAttribute *pView=(CAttribute *)(pFrame->m_wndSplitter2.GetPane(1,0));                                                              //获取左边视图指针  
  56. 56      pView->m_strAttribute="";                           //属性框清空  
  57. 57      pView->UpdateData(false);                           //输出显示  
  58. 58      MessageBox("输入地名不存在!");  
  59. 59    }  
  60. 60  }  

第11~17行代码实现了构造查询语句、执行查询并保存查询记录集。

第25~35行代码实现了查询图层几何类型为点的处理方法。

第36~45行代码实现了查询图层几何类型为线的处理方法。

上面的代码介绍了取记录集中记录并输出其对象属性。其中,介绍了如何通过图层(Layer)执行一个SQL查询语句,获得记录集后如何对其进行检索,并提取出具体字段内容。对于图形图层,"Shape"字段也是固定存在的,其中存放了该要素的几何图形部分,通过使用字段的GetShapeType()方法可以获得该图层是点层或线层,并进行相应的定位处理。字段的Get_value()方法返回的是一个VARIANT类型值,其中封装了各种数据类型,在Shape字段中,它封装的是一个图形要素,可以通过pdispVal取得它的真正内容,并根据图层类型将其转换为相应的图形要素,作为计算地图显示范围的依据。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇7.5.5 公交换乘的实现(1) 下一篇7.5.5 公交换乘的实现(5)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: