using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using WWPipeLine.MapBasic.Conditions; using WWPipeLine.MapBasic; using SuperMap.Data; using WeifenLuo.WinFormsUI.Docking; using SuperMap.Mapping; using Sunny.UI; using SuperMap.Analyst.NetworkAnalyst; namespace WWPipeLine.MapTools.Conditions.AnalystToolBar { public partial class GuanFa : ConditionPanel { private int objectidJSLK = 0; private static readonly string NetworkDatasetName = "BuildNetworkDataset"; public GuanFa() { this.ConditionPanelName = "关阀分析"; InitializeComponent(); this.IsShowPanelFooter = false; this.SetSize(800, 665); } protected override void OnLoad(EventArgs e) { MapControl.MouseDoubleClick += MapControl_MouseDoubleClick; } private void MapControl_MouseDoubleClick(object sender, MouseEventArgs e) { Point2D pClick = MapControl.Map.PixelToMap(new Point(e.X, e.Y)); GeoPoint pointClick = new GeoPoint(pClick); Recordset rdJSLK = ComsStatic.dvJSLK.Query(pointClick, 10, CursorType.Static); if (rdJSLK.RecordCount == 0) { Sunny.UI.UIMessageTip.ShowError("当前鼠标双击点附近没有找到管线信息"); return; } double distance_temp = 0.0D; double distance = 0.0D; GeoLine line_temp; GeoLine line = null; int smidJSLK = 0; rdJSLK.MoveFirst(); while (!rdJSLK.IsEOF) { line_temp = rdJSLK.GetGeometry() as GeoLine; distance_temp = Geometrist.Distance(pointClick, line_temp); if (distance_temp <= distance || distance == 0.0D) { distance = distance_temp; line = line_temp; smidJSLK = rdJSLK.GetID(); } rdJSLK.MoveNext(); } pClick = Geometrist.NearestPointToVertex(pClick, line); GeoPoint markPoint = new GeoPoint(pClick); markPoint.Style = new GeoStyle { MarkerSize = new Size2D(5, 5), LineColor = Color.Red }; MapControl.Map.TrackingLayer.Clear(); MapControl.Map.TrackingLayer.Add(markPoint, "InterestPoint"); MapControl.Map.RefreshEx(MapControl.Map.ViewBounds); rdJSLK.SeekID(smidJSLK); uitb_fldm.Text = rdJSLK.GetFieldValue("fldm")?.ToString(); uitb_cz.Text = rdJSLK.GetFieldValue("cz")?.ToString(); uitb_gj.Text = rdJSLK.GetFieldValue("gj").ToString(); uitb_dzms.Text = rdJSLK.GetFieldValue("dzms")?.ToString(); uitb_tz.Text = rdJSLK.GetFieldValue("tz")?.ToString(); uitb_msfs.Text = rdJSLK.GetFieldValue("msfs")?.ToString(); uidp_msrq.Text = rdJSLK.GetFieldValue("msrq")?.ToString(); uitb_yl.Text = rdJSLK.GetFieldValue("yl")?.ToString(); uitb_cd.Text = rdJSLK.GetFieldValue("cd").ToString(); uitb_qsdw.Text = rdJSLK.GetFieldValue("qsdw")?.ToString(); objectidJSLK = ComsStatic.StringToInt(rdJSLK.GetFieldValue("objectid")); } public override void AfterClose() { MapControl.MouseDoubleClick -= MapControl_MouseDoubleClick; base.AfterClose(); } private void uiButton1_Click(object sender, EventArgs e) { if (objectidJSLK == 0) { UIMessageTip.ShowError("请选择爆管的管线"); return; } if (ComsStatic.Datasource.Datasets.Contains(NetworkDatasetName)) ComsStatic.Datasource.Datasets.Delete(NetworkDatasetName); //DatasetVector dvFaMen = ComsStatic.Datasource.Datasets["JSFMPT"] as DatasetVector;// ComsStatic.dvJSJDPT DatasetVector dv = NetworkBuilder.BuildNetwork(ComsStatic.dvJSLK, ComsStatic.dvJSJDPT, "objectid", "qsdh", "zddh", "bsm", ComsStatic.Datasource, NetworkDatasetName); FacilityAnalystSetting analystSetting = new FacilityAnalystSetting(); analystSetting.NetworkDataset = dv; analystSetting.NodeIDField = "SmNodeID"; analystSetting.EdgeIDField = "objectid"; analystSetting.FNodeIDField = "SmFNode"; analystSetting.TNodeIDField = "SmTNode"; analystSetting.DirectionField = "lx"; analystSetting.Tolerance = 0.001; FacilityAnalyst m_facilityAnalyst = new FacilityAnalyst(); m_facilityAnalyst.AnalystSetting = analystSetting; bool isLoad = m_facilityAnalyst.Load(); Recordset rdChild = dv.ChildDataset.Query("", CursorType.Static); List listNodeIDs = new List(); rdChild.MoveFirst(); while (!rdChild.IsEOF) { listNodeIDs.Add(ComsStatic.StringToInt(rdChild.GetFieldValue("SmNodeID"))); rdChild.MoveNext(); } FacilityAnalystResult resultEdges = m_facilityAnalyst.FindCriticalFacilitiesUpFromEdge(listNodeIDs.ToArray(), objectidJSLK, true); if (resultEdges is null) { Sunny.UI.UIMessageTip.ShowWarning("未找到有效阀门"); return; } rdChild = dv.ChildDataset.Query(resultEdges.Nodes, CursorType.Static); ComsStatic.setUIDataGridView(uidgv, ComsStatic.RecordsetToDataTable(rdChild)); m_facilityAnalyst.Dispose(); } } }