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

GIS编程

开发平台:

C#

  1. using System;
  2. using System.Drawing;
  3. using System.Collections;
  4. using System.ComponentModel;
  5. using System.Windows.Forms;
  6. namespace MainSystem
  7. {
  8. public struct ItemInfo
  9. {
  10. public string szName;
  11. public string szType;
  12. public string szSubType;
  13. public string szTable;
  14. public string szFieldName;
  15. public MapObjects2.Recordset rst;
  16. public MapObjects2.MapLayer layer;
  17. };
  18. /// <summary>
  19. /// Summary description for frmInfo.
  20. /// </summary>
  21. public class frmInfo : System.Windows.Forms.Form
  22. {
  23. private System.Windows.Forms.Label _label_layer;
  24. private System.Windows.Forms.ListBox _listBox1;
  25. private System.Windows.Forms.Label _label1;
  26. private System.Windows.Forms.ComboBox _comboBox1;
  27. /// <summary>
  28. /// Required designer variable.
  29. /// </summary>
  30. private System.ComponentModel.Container components = null;
  31. private frmMain _frmMain;
  32. private ItemInfo[] _itmInfos;
  33. private int _nIdx;
  34. public frmInfo(frmMain mainForm)
  35. {
  36. _frmMain = mainForm;
  37. this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;
  38. InitializeComponent();
  39. }
  40. /// <summary>
  41. /// Clean up any resources being used.
  42. /// </summary>
  43. protected override void Dispose( bool disposing )
  44. {
  45. if( disposing )
  46. {
  47. if(components != null)
  48. {
  49. components.Dispose();
  50. }
  51. }
  52. base.Dispose( disposing );
  53. }
  54. #region Windows Form Designer generated code
  55. /// <summary>
  56. /// Required method for Designer support - do not modify
  57. /// the contents of this method with the code editor.
  58. /// </summary>
  59. private void InitializeComponent()
  60. {
  61. this._label_layer = new System.Windows.Forms.Label();
  62. this._listBox1 = new System.Windows.Forms.ListBox();
  63. this._label1 = new System.Windows.Forms.Label();
  64. this._comboBox1 = new System.Windows.Forms.ComboBox();
  65. this.SuspendLayout();
  66. // 
  67. // _label_layer
  68. // 
  69. this._label_layer.Anchor = (System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left);
  70. this._label_layer.Location = new System.Drawing.Point(8, 244);
  71. this._label_layer.Name = "_label_layer";
  72. this._label_layer.Size = new System.Drawing.Size(152, 24);
  73. this._label_layer.TabIndex = 9;
  74. this._label_layer.Text = "图层名:";
  75. // 
  76. // _listBox1
  77. // 
  78. this._listBox1.Anchor = (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
  79. | System.Windows.Forms.AnchorStyles.Left) 
  80. | System.Windows.Forms.AnchorStyles.Right);
  81. this._listBox1.ItemHeight = 12;
  82. this._listBox1.Location = new System.Drawing.Point(8, 52);
  83. this._listBox1.Name = "_listBox1";
  84. this._listBox1.SelectionMode = System.Windows.Forms.SelectionMode.None;
  85. this._listBox1.Size = new System.Drawing.Size(152, 184);
  86. this._listBox1.TabIndex = 8;
  87. // 
  88. // _label1
  89. // 
  90. this._label1.Location = new System.Drawing.Point(8, 4);
  91. this._label1.Name = "_label1";
  92. this._label1.Size = new System.Drawing.Size(144, 16);
  93. this._label1.TabIndex = 7;
  94. // 
  95. // _comboBox1
  96. // 
  97. this._comboBox1.Anchor = (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
  98. | System.Windows.Forms.AnchorStyles.Left) 
  99. | System.Windows.Forms.AnchorStyles.Right);
  100. this._comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
  101. this._comboBox1.Location = new System.Drawing.Point(8, 20);
  102. this._comboBox1.Name = "_comboBox1";
  103. this._comboBox1.Size = new System.Drawing.Size(152, 20);
  104. this._comboBox1.TabIndex = 6;
  105. this._comboBox1.SelectionChangeCommitted += new System.EventHandler(this._comboBox1_SelectionChangeCommitted);
  106. // 
  107. // frmInfo
  108. // 
  109. this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
  110. this.ClientSize = new System.Drawing.Size(168, 273);
  111. this.Controls.AddRange(new System.Windows.Forms.Control[] {
  112.   this._label_layer,
  113.   this._listBox1,
  114.   this._label1,
  115.   this._comboBox1});
  116. this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;
  117. this.Name = "frmInfo";
  118. this.Text = "地物详细信息";
  119. this.Load += new System.EventHandler(this.frmInfo_Load);
  120. this.ResumeLayout(false);
  121. }
  122. #endregion
  123. private void frmInfo_Load(object sender, System.EventArgs e)
  124. {
  125. _label_layer.Text = "图层名:没有";
  126. }
  127. //////////////////////////////////////////////////////////////////////////////////////////////////////
  128. //功能:确定指定位置的地物
  129. //参数:[in]long x 鼠标位置的X值(像素坐标)
  130. // [in]long y 鼠标位置的Y值(像素坐标)
  131. //返回值:void
  132. /// /////////////////////////////////////////////////////////////////////////////////////////////////
  133. public void Identify(long x , long y)
  134. {
  135. CEnvironment env = _frmMain._environment;
  136. env.ClearSelRsts();
  137. int nFeatCount = 0; //选中地物的数目
  138. MapObjects2.Point pt; //鼠标的位置(地图坐标)
  139. pt = _frmMain._map.ToMapPoint(x,y);
  140. _nIdx = -1;
  141. //初始化控件
  142. _comboBox1.Items.Clear();
  143. _listBox1.Items.Clear();
  144.   
  145. _itmInfos = new ItemInfo[env.m_nLayerNum]; 
  146. //动态计算查询距离
  147. double dScale = env.CalcScale(_frmMain._map); //地图比例尺
  148. if (dScale > 8000)
  149. {
  150. dScale = dScale/10000;
  151. dScale = dScale / 5000;
  152. }
  153. else
  154. {
  155. dScale = dScale/10000;
  156. dScale = dScale / 2500;
  157. }
  158. //首先,查询点地物,其次,查询线地物,最后查询面状地物
  159. //查询的图层只要是可见的
  160. MapObjects2.ShapeTypeConstants[] aShapeType = new MapObjects2.ShapeTypeConstants[3];
  161. aShapeType[0] = MapObjects2.ShapeTypeConstants.moShapeTypePoint;
  162. aShapeType[1] = MapObjects2.ShapeTypeConstants.moShapeTypeLine;
  163. aShapeType[2] = MapObjects2.ShapeTypeConstants.moShapeTypePolygon;
  164. for (int j = 0; j < 3; j ++)
  165. {
  166. for (int i = 0; i < env.m_nLayerNum; i ++)
  167. {
  168. if (env.m_layerInfos[i].layer.shapeType !=aShapeType[j])
  169. continue;
  170. _itmInfos[i].szName = "";
  171. //图层可见并且可选择,才能够identify
  172. if (env.m_layerInfos[i].layer.Visible && env.m_layerInfos[i].bCanSelected)
  173. {
  174. _itmInfos[i].rst = env.m_layerInfos[i].layer.SearchByDistance(pt,dScale,"");
  175. }
  176. else
  177. {
  178. //图层不可显示,则跳到下一个
  179. _itmInfos[i].rst = null;
  180. continue;
  181. }
  182. _itmInfos[i].szTable =env.m_layerInfos[i].szTableName;
  183. _itmInfos[i].layer  =env.m_layerInfos[i].layer ;
  184. _itmInfos[i].szType =env.m_layerInfos[i].szType; 
  185. _itmInfos[i].szSubType =env.m_layerInfos[i].szSubType; 
  186. _itmInfos[i].szFieldName = env.m_layerInfos[i].szFieldName;  
  187. if (_itmInfos[i].rst != null)
  188. {
  189. if (!_itmInfos[i].rst.EOF)
  190. {
  191. if (_itmInfos[i].rst.Fields._Item("名称").Value != System.DBNull.Value)
  192. {
  193. _itmInfos[i].szName = _itmInfos[i].rst.Fields._Item("名称").Value.ToString();
  194. }
  195. else
  196. {
  197. _itmInfos[i].rst = null;
  198. continue;
  199. }
  200. if (_itmInfos[i].szName != "")
  201. {
  202. _comboBox1.Items.Add(_itmInfos[i].szName); 
  203. nFeatCount ++;
  204. }
  205. }
  206. }
  207. }
  208. }
  209. if (nFeatCount > 0)
  210. {
  211. this._label1.Text = "总共找到"+nFeatCount.ToString()+"个地名";
  212. this._comboBox1.SelectedIndex = 0; 
  213. _nIdx = 0;
  214. LoadListBox(GetIndex(_comboBox1.Items[0].ToString()));
  215. }
  216. else
  217. {
  218. this._label1.Text = "没有找到任何地名";
  219. _label_layer.Text = "类型:没有"; 
  220. env.m_selectedSymbol = null;
  221. env.m_selectedFeature = null;
  222. }
  223. }
  224. /// /////////////////////////////////////////////////////////////////////////////////////////
  225. /// 功能:显示地名的详细信息
  226. /// 参数:
  227. /// 返回值:
  228. /// ///////////////////////////////////////////////////////////////////////////////////////
  229. private void LoadListBox(int nIndex)
  230. {
  231. if ("" == _itmInfos[nIndex].szName)
  232. return;
  233. _listBox1.Items.Clear();
  234. _label_layer.Text = "类型:"+_itmInfos[nIndex].szSubType; 
  235.   
  236. if (_itmInfos[nIndex].szTable == "")
  237. {
  238. _listBox1.Items.Add("没有详细信息");  
  239. goto FLASH;
  240. }
  241. else
  242. {
  243. string strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + _frmMain._environment.m_szDBName + 
  244. ";Persist Security Info=False";
  245. System.Data.OleDb.OleDbConnection  myConnection = new System.Data.OleDb.OleDbConnection(strConnectionString);   
  246. myConnection.Open();
  247. System.Data.DataSet dataSet = new System.Data.DataSet("临时库");
  248. System.Data.OleDb.OleDbDataAdapter myDataAdapter;
  249. string szSQL;
  250. szSQL = "Select * From [" + _itmInfos[nIndex].szTable + "] Where "+_itmInfos[nIndex].szFieldName +" ='"+_itmInfos[nIndex].szName+"'";
  251. myDataAdapter = new System.Data.OleDb.OleDbDataAdapter(szSQL,myConnection);
  252. try
  253. {
  254. myDataAdapter.Fill(dataSet,"地名");
  255. }
  256. catch
  257. {
  258. goto FLASH;
  259. }
  260. System.Data.DataTable indexTbl = dataSet.Tables["地名"];
  261. System.Data.DataRow[] rowsType = indexTbl.Select();
  262. if (0 == rowsType.Length)
  263. {
  264. _listBox1.Items.Add("没有详细信息");  
  265. goto FLASH;
  266. }
  267. for (int i = 0; i < indexTbl.Columns.Count; i ++)
  268. {
  269. string szValue = indexTbl.Columns[i].ColumnName + ":" + rowsType[0][i].ToString(); 
  270. _listBox1.Items.Add(szValue); 
  271. }
  272. }
  273. FLASH:
  274. _frmMain._map.FlashShape(_itmInfos[nIndex].rst.Fields.Item("Shape").Value ,4);
  275. //设置选中地物的符号
  276. if (_frmMain._environment.m_layerInfos[nIndex].nCharacterIndex >= 0 && _frmMain._environment.m_layerInfos[nIndex].layer.shapeType == MapObjects2.ShapeTypeConstants.moShapeTypePoint )
  277. {
  278. _frmMain._environment.m_selectedSymbol = new MapObjects2.Symbol();
  279.  
  280. _frmMain._environment.m_selectedSymbol.SymbolType = MapObjects2.SymbolTypeConstants.moPointSymbol;
  281. _frmMain._environment.m_selectedSymbol.Font.Name  = _frmMain._environment.m_layerInfos[nIndex].szFontName;
  282. _frmMain._environment.m_selectedSymbol.Style = 4;
  283. _frmMain._environment.m_selectedSymbol.Size = (short)_frmMain._environment.m_layerInfos[nIndex].layer.Symbol.Size;
  284. _frmMain._environment.m_selectedSymbol.CharacterIndex = (short)_frmMain._environment.m_layerInfos[nIndex].nCharacterIndex;
  285. _frmMain._environment.m_selectedSymbol.Color = 0xff;
  286. _frmMain._environment.m_selectedSymbolSize = (short)_frmMain._environment.m_layerInfos[nIndex].nSymSize;
  287. }
  288. else
  289. {
  290. if (_frmMain._environment.m_layerInfos[nIndex].layer.shapeType == MapObjects2.ShapeTypeConstants.moShapeTypePoint )
  291. {
  292. _frmMain._environment.m_selectedSymbol = new MapObjects2.Symbol();
  293. _frmMain._environment.m_selectedSymbol.SymbolType = _frmMain._environment.m_layerInfos[nIndex].layer.Symbol.SymbolType;
  294. _frmMain._environment.m_selectedSymbol.Style  = _frmMain._environment.m_layerInfos[nIndex].layer.Symbol.Style;
  295. _frmMain._environment.m_selectedSymbol.Size = _frmMain._environment.m_layerInfos[nIndex].layer.Symbol.Size;
  296. _frmMain._environment.m_selectedSymbol.Color = 0xff;
  297. _frmMain._environment.m_selectedSymbolSize = (short)_frmMain._environment.m_layerInfos[nIndex].nSymSize;
  298. }
  299. else
  300. _frmMain._environment.m_selectedSymbol = null;
  301. }
  302. _frmMain._environment.m_selectedFeature =_itmInfos[nIndex].rst.Fields.Item("Shape").Value;
  303. _frmMain._map.Extent = _frmMain._map.Extent; 
  304. }
  305. private int GetIndex(string szName)
  306. {
  307. int nIndex = -1;
  308. for (int i = 0; i < _frmMain._environment.m_nLayerNum; i ++)
  309. {
  310. if (_itmInfos[i].szName.Equals(szName))
  311. {
  312. nIndex = i;
  313. break;
  314. }
  315. }
  316. return nIndex;
  317. }
  318. private void _comboBox1_SelectionChangeCommitted(object sender, System.EventArgs e)
  319. {
  320. if (_nIdx != _comboBox1.SelectedIndex)
  321. _nIdx = _comboBox1.SelectedIndex;
  322. else
  323. {
  324. _frmMain._map.FlashShape(_itmInfos[GetIndex(_comboBox1.Items[_nIdx].ToString())].rst.Fields.Item("Shape").Value ,4);
  325. return;
  326. }
  327. LoadListBox(GetIndex(_comboBox1.Items[_nIdx].ToString()));
  328. }
  329. }
  330. }