PouMian.cs 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  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.dvJSLK.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.dvJSLK.Name)
  40. {
  41. Sunny.UI.UIMessageTip.ShowError("请选择一根需要分析的管线"); return;
  42. }//sl[0].Count - 1
  43. Recordset rd = ComsStatic.QueryRecordset(ComsStatic.dvJSLK, string.Format(" 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. DataColumn dataColumn;
  80. dataColumn = new DataColumn { ColumnName = "dmgc", Caption = "地面高程(M)" }; dt.Columns.Add(dataColumn);
  81. dataColumn = new DataColumn { ColumnName = "gdgc", Caption = "管顶高程(M)" }; dt.Columns.Add(dataColumn);
  82. dataColumn = new DataColumn { ColumnName = "gdms", Caption = "管点埋深(M)" }; dt.Columns.Add(dataColumn);
  83. dataColumn = new DataColumn { ColumnName = "gxgj", Caption = "管线管径(MM)" }; dt.Columns.Add(dataColumn);
  84. dataColumn = new DataColumn { ColumnName = "gxcd", Caption = "管线长度(M)" }; dt.Columns.Add(dataColumn);
  85. dataColumn = new DataColumn { ColumnName = "gxSMID", Caption = "管线ID" }; dt.Columns.Add(dataColumn);
  86. dataColumn = new DataColumn { ColumnName = "gdSMID", Caption = "管点ID" }; dt.Columns.Add(dataColumn);
  87. dataColumn = new DataColumn { ColumnName = "x", Caption = "X坐标" }; dt.Columns.Add(dataColumn);
  88. dataColumn = new DataColumn { ColumnName = "y", Caption = "Y坐标" }; dt.Columns.Add(dataColumn);
  89. dataColumn = new DataColumn { ColumnName = "ygd", Caption = "管顶Y坐标" }; dt.Columns.Add(dataColumn);
  90. dataColumn = new DataColumn { ColumnName = "xLeft", Caption = "X坐标向左偏移", DataType = Type.GetType("System.Double") }; dt.Columns.Add(dataColumn);
  91. Recordset rdJSJDPT = null;
  92. foreach (DataRow drSelect in dtSelect.Rows)
  93. {
  94. rdJSJDPT = ComsStatic.QueryRecordset(ComsStatic.dvJSJDPT, string.Format(" bsm ='{0}' ", drSelect["qsdh"]));
  95. if (rdJSJDPT.RecordCount == 1)
  96. {
  97. rdJSJDPT.MoveFirst();
  98. DataRow dr = dt.NewRow();
  99. dr["dmgc"] = rdJSJDPT.GetFieldValue("dmgc");
  100. dr["gdms"] = rdJSJDPT.GetFieldValue("ms");
  101. dr["gdgc"] = ComsStatic.StringToDouble(dr["dmgc"]) - ComsStatic.StringToDouble(dr["gdms"]);//管顶高程=地面高程-埋深
  102. dr["gxgj"] = drSelect["gj"];
  103. dr["gxcd"] = drSelect["cd"];
  104. dr["gxSMID"] = drSelect["smid"];
  105. dr["gdSMID"] = rdJSJDPT.GetFieldValue("smid");
  106. dt.Rows.Add(dr);
  107. }
  108. if (dtSelect.Rows.IndexOf(drSelect) == dtSelect.Rows.Count - 1)//最后一根管线需要获取终点点号信息
  109. {
  110. rdJSJDPT = ComsStatic.QueryRecordset(ComsStatic.dvJSJDPT, string.Format(" bsm ='{0}' ", drSelect["zddh"]));
  111. if (rdJSJDPT.RecordCount == 1)
  112. {
  113. rdJSJDPT.MoveFirst();
  114. DataRow dr = dt.NewRow();
  115. dr["dmgc"] = rdJSJDPT.GetFieldValue("dmgc");
  116. dr["gdms"] = rdJSJDPT.GetFieldValue("ms");
  117. dr["gdgc"] = ComsStatic.StringToDouble(dr["dmgc"]) - ComsStatic.StringToDouble(dr["gdms"]);//管顶高程=地面高程-埋深
  118. dr["gxgj"] = drSelect["gj"];
  119. dr["gxcd"] = drSelect["cd"];
  120. dr["gxSMID"] = drSelect["smid"];
  121. dr["gdSMID"] = rdJSJDPT.GetFieldValue("smid");
  122. dt.Rows.Add(dr);
  123. }
  124. }
  125. }
  126. if (dt.Rows.Count == (dtSelect.Rows.Count + 1))
  127. {
  128. PouMianAnalystResult form = new PouMianAnalystResult(dt);
  129. form.ShowDialog();
  130. ComsStatic.RecordsetDispose(rdJSJDPT);
  131. this.CloseToolBar();
  132. }
  133. else
  134. {
  135. Sunny.UI.UIMessageTip.ShowError("构建查询结果失败,请重新选择连续的管线进行分析");
  136. }
  137. }
  138. public override void AfterClose()
  139. {
  140. MapControl.GeometrySelectChanged -= MapControl_GeometrySelectChanged;
  141. base.AfterClose();
  142. }
  143. private void InitializeComponent()
  144. {
  145. this.SuspendLayout();
  146. //
  147. // ToolsConditions
  148. //
  149. this.Name = "ToolsConditions";
  150. this.ResumeLayout(false);
  151. }
  152. }
  153. }