PouMian.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. using SuperMap.Data;
  2. using SuperMap.Mapping;
  3. using System;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Windows.Forms;
  7. using WWPipeLine.MapBasic;
  8. using WWPipeLine.MapBasic.Conditions;
  9. namespace WWPipeLine.MapTools.Conditions.AnalystToolBar
  10. {
  11. public class PouMian : BasicToolBar
  12. {
  13. public PouMian() : base()
  14. {
  15. this.ConditionPanelName = "剖面分析";
  16. var analystToolStripButton = new ToolStripButton()
  17. {
  18. DisplayStyle = ToolStripItemDisplayStyle.ImageAndText,
  19. Text = "分析",
  20. Name = "Analyst",
  21. AutoToolTip = false
  22. };
  23. base.ToolStrip.Items.Add(analystToolStripButton);
  24. analystToolStripButton.Click += AnalystToolStripButton_Click;
  25. }
  26. protected override void OnLoad(EventArgs e)
  27. {
  28. ComsStatic.SetLayersIsSelectableFalse(ComsStatic.dvJSLK.Name, true);
  29. }
  30. private void AnalystToolStripButton_Click(object sender, EventArgs e)
  31. {
  32. Selection[] _selection = base.MapControl.Map.FindSelection(true);
  33. if (_selection.Length != 1 || _selection == null)
  34. {
  35. Sunny.UI.UIMessageTip.ShowError("请先选择需要分析的管线信息,仅可以选择连续的管线!", 2000);
  36. return;
  37. }
  38. DatasetVector _dv = _selection[0].ToRecordset().Dataset as DatasetVector;
  39. if (_dv.Name != ComsStatic.dvJSLK.Name && _selection[0].Count < 1)
  40. {
  41. Sunny.UI.UIMessageTip.ShowError("仅可以选择管线图层,且至少选择一条管线", 2000);
  42. return;
  43. }
  44. DataTable dt = new DataTable { TableName = "DuanMianAnalystResult" };
  45. DataColumn dataColumn;
  46. dataColumn = new DataColumn { ColumnName = "dmgc", Caption = "地面高程(M)" }; dt.Columns.Add(dataColumn);
  47. dataColumn = new DataColumn { ColumnName = "gdgc", Caption = "管顶高程(M)" }; dt.Columns.Add(dataColumn);
  48. dataColumn = new DataColumn { ColumnName = "gdms", Caption = "管点埋深(M)" }; dt.Columns.Add(dataColumn);
  49. dataColumn = new DataColumn { ColumnName = "gxgj", Caption = "管线管径(MM)" }; dt.Columns.Add(dataColumn);
  50. dataColumn = new DataColumn { ColumnName = "gxcd", Caption = "管线长度(M)" }; dt.Columns.Add(dataColumn);
  51. dataColumn = new DataColumn { ColumnName = "gxSMID", Caption = "管线ID" }; dt.Columns.Add(dataColumn);
  52. dataColumn = new DataColumn { ColumnName = "gdSMID", Caption = "管点ID" }; dt.Columns.Add(dataColumn);
  53. dataColumn = new DataColumn { ColumnName = "x", Caption = "X坐标" }; dt.Columns.Add(dataColumn);
  54. dataColumn = new DataColumn { ColumnName = "y", Caption = "Y坐标" }; dt.Columns.Add(dataColumn);
  55. dataColumn = new DataColumn { ColumnName = "ygd", Caption = "管顶Y坐标" }; dt.Columns.Add(dataColumn);
  56. dataColumn = new DataColumn { ColumnName = "xLeft", Caption = "X坐标向左偏移" }; dt.Columns.Add(dataColumn);
  57. DatasetVectorEx dvJSJDPTEx = new DatasetVectorEx(ComsStatic.dvJSJDPT.Name) { DatasetVector = ComsStatic.dvJSJDPT };
  58. dvJSJDPTEx.ResultFields.Clear();
  59. DataRow dr;
  60. DataTable dtJSJDPT;
  61. dt.Rows.Clear();
  62. DatasetVectorEx dvJSLKEx = new DatasetVectorEx(_dv.Name) { DatasetVector = _dv };
  63. dvJSLKEx.ResultFields.Clear();
  64. DataTable dtJSLK;
  65. for (int i = 1; i <= _selection[0].Count; i++)
  66. {
  67. dtJSLK = dvJSLKEx.Query(string.Format(" smid='{0}' AND qsdh is not null AND zddh is not null", _selection[0][i - 1].ToString()));
  68. if (dtJSLK.Rows.Count == 1)
  69. {
  70. dtJSJDPT = dvJSJDPTEx.Query(string.Format(" wth ='{0}' AND ms is not null ", dtJSLK.Rows[0]["qsdh"].ToString()));
  71. if (dtJSJDPT.Rows.Count == 1)
  72. {
  73. foreach (DataRow drr in dtJSJDPT.Rows)
  74. {
  75. dr = dt.NewRow();
  76. dr["dmgc"] = drr["dmgc"];
  77. dr["gdgc"] = double.Parse(drr["dmgc"].ToString()) - double.Parse(drr["ms"].ToString());//管顶高程=地面高程-埋深
  78. dr["gdms"] = string.IsNullOrEmpty(drr["ms"].ToString()) ? "0" : drr["ms"];//dr["gdms"] = drr["ms"];
  79. dr["gxgj"] = dtJSLK.Rows[0]["gj"];
  80. dr["gxcd"] = string.IsNullOrEmpty(dtJSLK.Rows[0]["cd"].ToString()) ? "0" : dtJSLK.Rows[0]["cd"];
  81. dr["gxSMID"] = dtJSLK.Rows[0]["smid"];
  82. dr["gdSMID"] = drr["smid"].ToString();
  83. dt.Rows.Add(dr);
  84. }
  85. }
  86. }
  87. //最后一根管线设置起点点号后,还需要取一下终点点号
  88. if (i == _selection[0].Count)
  89. {
  90. dtJSJDPT = dvJSJDPTEx.Query(string.Format(" wth ='{0}' AND ms is not null ", dtJSLK.Rows[0]["qsdh"].ToString()));
  91. if (dtJSJDPT.Rows.Count == 1)
  92. {
  93. foreach (DataRow drr in dtJSJDPT.Rows)
  94. {
  95. dr = dt.NewRow();
  96. dr["dmgc"] = drr["dmgc"];
  97. dr["gdgc"] = double.Parse(drr["dmgc"].ToString()) - double.Parse(drr["ms"].ToString());//管顶高程=地面高程-埋深
  98. dr["gdms"] = string.IsNullOrEmpty(drr["ms"].ToString()) ? "0" : drr["ms"];
  99. dr["gxgj"] = dtJSLK.Rows[0]["gj"];
  100. dr["gxcd"] = string.IsNullOrEmpty(dtJSLK.Rows[0]["cd"].ToString()) ? "0" : dtJSLK.Rows[0]["cd"];
  101. dr["gxSMID"] = dtJSLK.Rows[0]["smid"];
  102. dr["gdSMID"] = drr["smid"].ToString();
  103. dt.Rows.Add(dr);
  104. }
  105. }
  106. }
  107. }
  108. if (dt.Rows.Count == (_selection[0].Count + 1))
  109. {
  110. PouMianAnalystResult form = new PouMianAnalystResult(dt);
  111. form.ShowDialog();
  112. this.CloseToolBar();
  113. }
  114. else
  115. {
  116. Sunny.UI.UIMessageTip.ShowError("构建查询结果失败,请重新选择连续的管线进行分析", 5000);
  117. }
  118. }
  119. private void InitializeComponent()
  120. {
  121. this.SuspendLayout();
  122. //
  123. // ToolsConditions
  124. //
  125. this.Name = "ToolsConditions";
  126. this.ResumeLayout(false);
  127. }
  128. }
  129. }