MapTip.cs
上传用户:xum6868
上传日期:2009-12-02
资源大小:102k
文件大小:4k
源码类别:

GIS编程

开发平台:

C#

  1. using System;
  2. namespace MainSystem
  3. {
  4. /// <summary>
  5. /// Summary description for MapTip.
  6. /// </summary>
  7. public class MapTip
  8. {
  9. private double m_x; // 当前位置的x坐标
  10. private double m_y; // 当前位置的y坐标
  11. private double m_lastX; // 当计时开始时鼠标位置的x坐标
  12. private double m_lastY; // 当计时开始时鼠标位置的y坐标
  13. private AxMapObjects2.AxMap m_map = null;
  14. private System.Windows.Forms.Timer m_timer = null;
  15. private System.Windows.Forms.PictureBox m_picture = null;
  16. private System.Windows.Forms.Label m_lable = null;
  17. private CEnvironment m_env = null;
  18. private string m_szField = "";   
  19. public MapTip(frmMain frm)
  20. {
  21. m_map = frm._map;
  22. m_timer = frm._timer;
  23. m_picture = frm._picToolTip;
  24. m_lable = frm._lblToolTip;
  25. m_szField = "名称";
  26. m_env = frm._environment; 
  27. m_picture.Visible = false;
  28. m_picture.BackColor = System.Drawing.Color.FromArgb(((System.Byte)(255)), ((System.Byte)(255)), ((System.Byte)(192)));
  29.   
  30. m_lable.AutoSize = true;
  31. m_lable.BackColor = m_picture.BackColor;
  32. m_lable.Visible = false;
  33. }
  34. public void MouseMove(double X, double Y)
  35. {
  36. m_x = X;
  37. m_y = Y;
  38. if (m_timer.Interval == 1)
  39. {
  40. m_lastX = X;
  41. m_lastY = Y;
  42. m_timer.Interval = 100;
  43. }
  44. else
  45. {
  46. m_picture.Visible = false;
  47. m_lable.Visible = false;
  48. }
  49. }
  50. private void ShowTipText(string text)
  51. {
  52. // 设置标签控件的显示内容与位置
  53. m_lable.Text = text;
  54. m_lable.Left = m_map.Left + (int)m_x+20;
  55. m_lable.Top = m_map.Top + (int)m_y + 11;
  56.  
  57. // 设置Picture控件的位置
  58. m_picture.Left = m_map.Left + (int)m_x + 10;
  59. m_picture.Top = m_map.Top + (int)m_y + 10;
  60. m_picture.Width = m_lable.Width + 20;
  61. m_picture.Visible = true;
  62. m_lable.Visible = true;
  63. }
  64. private bool InMap(double x, double y)
  65. {
  66. if (x > m_map.Right || x < m_map.Left)
  67. return false;
  68. if (y > m_map.Top || y < m_map.Bottom)
  69. return false;
  70. return true;
  71. }
  72. public void Timer()
  73. {
  74. if (m_x == m_lastX && m_y == m_lastY)
  75. {
  76. m_timer.Interval = 1;
  77. MapObjects2.Recordset recs;
  78. recs = DoSearch();
  79. if (recs == null || recs.EOF || InMap(m_x,m_y))
  80. {
  81. m_picture.Visible = false;
  82. m_lable.Visible = false;
  83. }
  84. else
  85. {
  86. string szText = recs.Fields.Item (m_szField).Value.ToString();
  87. if (szText != "")
  88. ShowTipText(recs.Fields.Item (m_szField).Value.ToString());
  89. }
  90. }
  91. else
  92. {
  93. m_lastX = m_x;
  94. m_lastY = m_y;
  95. }
  96. }
  97. private MapObjects2.Recordset DoSearch()
  98. {
  99. MapObjects2.Point pt = null;
  100. MapObjects2.Recordset rst = null;
  101. pt = this.m_map.ToMapPoint((float)m_x,(float)m_y);  
  102. double dScale = m_env.CalcScale(m_map);
  103. dScale = dScale/10000;
  104. dScale = dScale / 5000;
  105. for (int i = m_env.m_nLayerNum - 1; i >= 0 ; i --)
  106. {
  107. if (m_env.m_layerInfos[i].layer.Visible && m_env.m_layerInfos[i].bCanSelected && m_env.m_layerInfos[i].layer.shapeType == MapObjects2.ShapeTypeConstants.moShapeTypePoint)
  108. rst = m_env.m_layerInfos[i].layer.SearchByDistance(pt,dScale,"");
  109. if (rst != null)
  110. {
  111. rst.MoveFirst(); 
  112. if (!rst.EOF)
  113. return rst;
  114. }
  115. }
  116. for (int i = 0; i < m_env.m_nLayerNum; i ++)
  117. {
  118. if (m_env.m_layerInfos[i].bVisible && m_env.m_layerInfos[i].bCanSelected && m_env.m_layerInfos[i].layer.shapeType == MapObjects2.ShapeTypeConstants.moShapeTypeLine)     
  119. rst = m_env.m_layerInfos[i].layer.SearchByDistance(pt,dScale,"");
  120. if (rst != null)
  121. {
  122. rst.MoveFirst(); 
  123. if (!rst.EOF)
  124. return rst;
  125. }
  126. }
  127. for (int i = 0; i < m_env.m_nLayerNum; i ++)
  128. {
  129. if (m_env.m_layerInfos[i].bVisible && m_env.m_layerInfos[i].bCanSelected && m_env.m_layerInfos[i].layer.shapeType == MapObjects2.ShapeTypeConstants.moShapeTypePolygon )     
  130. rst = m_env.m_layerInfos[i].layer.SearchByDistance(pt,dScale,"");
  131. if (rst != null)
  132. {
  133. rst.MoveFirst(); 
  134. if (!rst.EOF)
  135. return rst;
  136. }
  137. }
  138. return rst;
  139. }
  140. }
  141. }