| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- 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<int> listNodeIDs = new List<int>();
- 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();
- }
- }
- }
|