GuanFa.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Drawing;
  5. using System.Data;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using WWPipeLine.MapBasic.Conditions;
  11. using WWPipeLine.MapBasic;
  12. using SuperMap.Data;
  13. using WeifenLuo.WinFormsUI.Docking;
  14. using SuperMap.Mapping;
  15. using Sunny.UI;
  16. using SuperMap.Analyst.NetworkAnalyst;
  17. namespace WWPipeLine.MapTools.Conditions.AnalystToolBar
  18. {
  19. public partial class GuanFa : ConditionPanel
  20. {
  21. private int objectidJSLK = 0;
  22. private static readonly string NetworkDatasetName = "BuildNetworkDataset";
  23. public GuanFa()
  24. {
  25. this.ConditionPanelName = "关阀分析";
  26. InitializeComponent();
  27. this.IsShowPanelFooter = false;
  28. this.SetSize(800, 665);
  29. }
  30. protected override void OnLoad(EventArgs e)
  31. {
  32. MapControl.MouseDoubleClick += MapControl_MouseDoubleClick;
  33. }
  34. private void MapControl_MouseDoubleClick(object sender, MouseEventArgs e)
  35. {
  36. Point2D pClick = MapControl.Map.PixelToMap(new Point(e.X, e.Y));
  37. GeoPoint pointClick = new GeoPoint(pClick);
  38. Recordset rdJSLK = ComsStatic.dvJSLK.Query(pointClick, 10, CursorType.Static);
  39. if (rdJSLK.RecordCount == 0)
  40. {
  41. Sunny.UI.UIMessageTip.ShowError("当前鼠标双击点附近没有找到管线信息"); return;
  42. }
  43. double distance_temp = 0.0D;
  44. double distance = 0.0D;
  45. GeoLine line_temp;
  46. GeoLine line = null;
  47. int smidJSLK = 0;
  48. rdJSLK.MoveFirst();
  49. while (!rdJSLK.IsEOF)
  50. {
  51. line_temp = rdJSLK.GetGeometry() as GeoLine;
  52. distance_temp = Geometrist.Distance(pointClick, line_temp);
  53. if (distance_temp <= distance || distance == 0.0D)
  54. {
  55. distance = distance_temp;
  56. line = line_temp;
  57. smidJSLK = rdJSLK.GetID();
  58. }
  59. rdJSLK.MoveNext();
  60. }
  61. pClick = Geometrist.NearestPointToVertex(pClick, line);
  62. GeoPoint markPoint = new GeoPoint(pClick);
  63. markPoint.Style = new GeoStyle { MarkerSize = new Size2D(5, 5), LineColor = Color.Red };
  64. MapControl.Map.TrackingLayer.Clear();
  65. MapControl.Map.TrackingLayer.Add(markPoint, "InterestPoint");
  66. MapControl.Map.RefreshEx(MapControl.Map.ViewBounds);
  67. rdJSLK.SeekID(smidJSLK);
  68. uitb_fldm.Text = rdJSLK.GetFieldValue("fldm")?.ToString();
  69. uitb_cz.Text = rdJSLK.GetFieldValue("cz")?.ToString();
  70. uitb_gj.Text = rdJSLK.GetFieldValue("gj").ToString();
  71. uitb_dzms.Text = rdJSLK.GetFieldValue("dzms")?.ToString();
  72. uitb_tz.Text = rdJSLK.GetFieldValue("tz")?.ToString();
  73. uitb_msfs.Text = rdJSLK.GetFieldValue("msfs")?.ToString();
  74. uidp_msrq.Text = rdJSLK.GetFieldValue("msrq")?.ToString();
  75. uitb_yl.Text = rdJSLK.GetFieldValue("yl")?.ToString();
  76. uitb_cd.Text = rdJSLK.GetFieldValue("cd").ToString();
  77. uitb_qsdw.Text = rdJSLK.GetFieldValue("qsdw")?.ToString();
  78. objectidJSLK = ComsStatic.StringToInt(rdJSLK.GetFieldValue("objectid"));
  79. }
  80. public override void AfterClose()
  81. {
  82. MapControl.MouseDoubleClick -= MapControl_MouseDoubleClick;
  83. base.AfterClose();
  84. }
  85. private void uiButton1_Click(object sender, EventArgs e)
  86. {
  87. if (objectidJSLK == 0) { UIMessageTip.ShowError("请选择爆管的管线"); return; }
  88. if (ComsStatic.Datasource.Datasets.Contains(NetworkDatasetName))
  89. ComsStatic.Datasource.Datasets.Delete(NetworkDatasetName);
  90. //DatasetVector dvFaMen = ComsStatic.Datasource.Datasets["JSFMPT"] as DatasetVector;// ComsStatic.dvJSJDPT
  91. DatasetVector dv = NetworkBuilder.BuildNetwork(ComsStatic.dvJSLK, ComsStatic.dvJSJDPT, "objectid", "qsdh", "zddh", "bsm", ComsStatic.Datasource, NetworkDatasetName);
  92. FacilityAnalystSetting analystSetting = new FacilityAnalystSetting();
  93. analystSetting.NetworkDataset = dv;
  94. analystSetting.NodeIDField = "SmNodeID";
  95. analystSetting.EdgeIDField = "objectid";
  96. analystSetting.FNodeIDField = "SmFNode";
  97. analystSetting.TNodeIDField = "SmTNode";
  98. analystSetting.DirectionField = "lx";
  99. analystSetting.Tolerance = 0.001;
  100. FacilityAnalyst m_facilityAnalyst = new FacilityAnalyst();
  101. m_facilityAnalyst.AnalystSetting = analystSetting;
  102. bool isLoad = m_facilityAnalyst.Load();
  103. Recordset rdChild = dv.ChildDataset.Query("", CursorType.Static);
  104. List<int> listNodeIDs = new List<int>();
  105. rdChild.MoveFirst();
  106. while (!rdChild.IsEOF)
  107. {
  108. listNodeIDs.Add(ComsStatic.StringToInt(rdChild.GetFieldValue("SmNodeID")));
  109. rdChild.MoveNext();
  110. }
  111. FacilityAnalystResult resultEdges = m_facilityAnalyst.FindCriticalFacilitiesUpFromEdge(listNodeIDs.ToArray(), objectidJSLK, true);
  112. if (resultEdges is null) { Sunny.UI.UIMessageTip.ShowWarning("未找到有效阀门"); return; }
  113. rdChild = dv.ChildDataset.Query(resultEdges.Nodes, CursorType.Static);
  114. ComsStatic.setUIDataGridView(uidgv, ComsStatic.RecordsetToDataTable(rdChild));
  115. m_facilityAnalyst.Dispose();
  116. }
  117. }
  118. }