PouMian.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. using SuperMap.Data;
  2. using SuperMap.Mapping;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.Windows.Forms;
  8. using WWPipeLine.MapBasic;
  9. using WWPipeLine.MapBasic.Conditions;
  10. namespace WWPipeLine.MapTools.Conditions.AnalystToolBar
  11. {
  12. public class PouMian : BasicToolBar
  13. {
  14. DataTable dtSelect;
  15. public PouMian() : base()
  16. {
  17. this.ConditionPanelName = "剖面分析";
  18. var analystToolStripButton = new ToolStripButton()
  19. {
  20. DisplayStyle = ToolStripItemDisplayStyle.ImageAndText,
  21. Text = "开始分析",
  22. Name = "Analyst",
  23. AutoToolTip = false
  24. };
  25. base.ToolStrip.Items.Add(analystToolStripButton);
  26. analystToolStripButton.Click += AnalystToolStripButton_Click;
  27. }
  28. protected override void OnLoad(EventArgs e)
  29. {
  30. ComsStatic.SetLayersIsSelectableFalse(ComsStatic.gsGuanXian.Name, true);
  31. MapControl.GeometrySelectChanged += MapControl_GeometrySelectChanged;
  32. MapControl.Action = SuperMap.UI.Action.Select;
  33. dtSelect = new DataTable();
  34. dtSelect.Columns.Add("smid"); dtSelect.Columns.Add("qsdh"); dtSelect.Columns.Add("zddh"); dtSelect.Columns.Add("gj"); dtSelect.Columns.Add("cd");
  35. }
  36. private void MapControl_GeometrySelectChanged(object sender, SuperMap.UI.GeometrySelectChangedEventArgs e)
  37. {
  38. Selection[] sl = MapControl.Map.FindSelection(true);
  39. if (sl.Length != 1 || sl[0].Count != 1 || sl[0].Dataset.Name != ComsStatic.gsGuanXian.Name)
  40. {
  41. Sunny.UI.UIMessageTip.ShowError("请选择一根需要分析的管线"); return;
  42. }//sl[0].Count - 1
  43. Recordset rd = ComsStatic.QueryRecordset(ComsStatic.gsGuanXian, string.Format(" enabled=1 and smid={0} AND qsdh is not null AND zddh is not null ", sl[0][0]), new string[] { "smid", "qsdh", "zddh", "gj", "cd" });
  44. if (rd.RecordCount == 1)
  45. {
  46. DataRow dr = dtSelect.NewRow();
  47. dr["smid"] = rd.GetFieldValue("smid");
  48. dr["qsdh"] = rd.GetFieldValue("qsdh");
  49. dr["zddh"] = rd.GetFieldValue("zddh");
  50. dr["gj"] = rd.GetFieldValue("gj");
  51. dr["cd"] = rd.GetFieldValue("cd");
  52. dtSelect.Rows.Add(dr);
  53. if (dtSelect.Rows.Count > 1)//需要判断当前选择的管线起点 是否是 上一根管线的终点
  54. {
  55. string zddh = dtSelect.Rows[dtSelect.Rows.Count - 2]["zddh"].ToString();
  56. string qsdh = dtSelect.Rows[dtSelect.Rows.Count - 1]["qsdh"].ToString();
  57. if (zddh != qsdh)
  58. {
  59. dtSelect.Rows.Clear();
  60. Sunny.UI.UIMessageTip.ShowError("当前选择管线的不是连续管线,请重新选择");
  61. return;
  62. }
  63. }
  64. }
  65. else
  66. {
  67. dtSelect.Rows.Clear();
  68. Sunny.UI.UIMessageTip.ShowError("当前选择管线的信息错误,请重新选择!");
  69. return;
  70. }
  71. }
  72. private void AnalystToolStripButton_Click(object sender, EventArgs e)
  73. {
  74. if (dtSelect.Rows.Count == 0)
  75. {
  76. Sunny.UI.UIMessageTip.ShowError("请先选择需要分析的管线信息,仅可以选择连续的管线!"); return;
  77. }
  78. DataTable dt = new DataTable { TableName = "DuanMianAnalystResult" };
  79. dt.Columns.Add(new DataColumn { ColumnName = "dmgc", Caption = "地面高程(M)" });
  80. dt.Columns.Add(new DataColumn { ColumnName = "gdgc", Caption = "管顶高程(M)" });
  81. dt.Columns.Add(new DataColumn { ColumnName = "gdms", Caption = "管点埋深(M)" });
  82. dt.Columns.Add(new DataColumn { ColumnName = "gxgj", Caption = "管线管径(MM)" });
  83. dt.Columns.Add(new DataColumn { ColumnName = "gxcd", Caption = "管线长度(M)" });
  84. dt.Columns.Add(new DataColumn { ColumnName = "gxSMID", Caption = "管线ID" });
  85. dt.Columns.Add(new DataColumn { ColumnName = "gdSMID", Caption = "管点ID" });
  86. dt.Columns.Add(new DataColumn { ColumnName = "x", Caption = "X坐标" });
  87. dt.Columns.Add(new DataColumn { ColumnName = "y", Caption = "Y坐标" });
  88. dt.Columns.Add(new DataColumn { ColumnName = "ygd", Caption = "管顶Y坐标" });
  89. dt.Columns.Add(new DataColumn { ColumnName = "xLeft", Caption = "X坐标向左偏移", DataType = Type.GetType("System.Double") });
  90. Recordset rdJSJDPT = null;
  91. foreach (DataRow drSelect in dtSelect.Rows)
  92. {
  93. rdJSJDPT = ComsStatic.QueryRecordset(ComsStatic.gsGuanDian, string.Format(" bsm ='{0}' ", drSelect["qsdh"]));
  94. if (rdJSJDPT.RecordCount == 1)
  95. {
  96. rdJSJDPT.MoveFirst();
  97. DataRow dr = dt.NewRow();
  98. dr["dmgc"] = rdJSJDPT.GetFieldValue("dmgc");
  99. dr["gdms"] = rdJSJDPT.GetFieldValue("ms");
  100. dr["gdgc"] = ComsStatic.StringToDouble(dr["dmgc"]) - ComsStatic.StringToDouble(dr["gdms"]);//管顶高程=地面高程-埋深
  101. dr["gxgj"] = drSelect["gj"];
  102. dr["gxcd"] = drSelect["cd"];
  103. dr["gxSMID"] = drSelect["smid"];
  104. dr["gdSMID"] = rdJSJDPT.GetFieldValue("smid");
  105. dt.Rows.Add(dr);
  106. }
  107. if (dtSelect.Rows.IndexOf(drSelect) == dtSelect.Rows.Count - 1)//最后一根管线需要获取终点点号信息
  108. {
  109. rdJSJDPT = ComsStatic.QueryRecordset(ComsStatic.gsGuanDian, string.Format(" bsm ='{0}' ", drSelect["zddh"]));
  110. if (rdJSJDPT.RecordCount == 1)
  111. {
  112. rdJSJDPT.MoveFirst();
  113. DataRow dr = dt.NewRow();
  114. dr["dmgc"] = rdJSJDPT.GetFieldValue("dmgc");
  115. dr["gdms"] = rdJSJDPT.GetFieldValue("ms");
  116. dr["gdgc"] = ComsStatic.StringToDouble(dr["dmgc"]) - ComsStatic.StringToDouble(dr["gdms"]);//管顶高程=地面高程-埋深
  117. dr["gxgj"] = drSelect["gj"];
  118. dr["gxcd"] = drSelect["cd"];
  119. dr["gxSMID"] = drSelect["smid"];
  120. dr["gdSMID"] = rdJSJDPT.GetFieldValue("smid");
  121. dt.Rows.Add(dr);
  122. }
  123. }
  124. }
  125. if (dt.Rows.Count == (dtSelect.Rows.Count + 1))
  126. {
  127. ComsStatic.RecordsetDispose(rdJSJDPT);
  128. AnalystResultPouDuanMian form = new AnalystResultPouDuanMian(dt, "poumian");
  129. form.ShowDialog();
  130. this.CloseToolBar();
  131. }
  132. else
  133. {
  134. Sunny.UI.UIMessageTip.ShowError("构建查询结果失败,请重新选择连续的管线进行分析");
  135. }
  136. }
  137. public override void AfterClose()
  138. {
  139. MapControl.GeometrySelectChanged -= MapControl_GeometrySelectChanged;
  140. base.AfterClose();
  141. }
  142. private void InitializeComponent()
  143. {
  144. this.SuspendLayout();
  145. //
  146. // ToolsConditions
  147. //
  148. this.Name = "ToolsConditions";
  149. this.ResumeLayout(false);
  150. }
  151. }
  152. }