123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- using SuperMap.Analyst.NetworkAnalyst;
- using SuperMap.Data;
- using SuperMap.Mapping;
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Drawing;
- using System.Windows.Forms;
- using WWPipeLine.MapBasic;
- using WWPipeLine.MapBasic.Conditions;
- namespace WWPipeLine.MapTools.Conditions.AnalystToolBar
- {
- public class LianTong : BasicToolBar
- {
- List<Int32> _selectSMID = new List<Int32>();
- public LianTong() : base()
- {
- this.ConditionPanelName = "连通分析";
- var analystToolStripButton = new ToolStripButton()
- {
- DisplayStyle = ToolStripItemDisplayStyle.ImageAndText,
- Text = "分析",
- Name = "Analyst",
- AutoToolTip = false
- };
- var reSelect = new ToolStripButton()
- {
- DisplayStyle = ToolStripItemDisplayStyle.ImageAndText,
- Text = "重新选择",
- Name = "reSelect",
- AutoToolTip = false
- };
- base.ToolStrip.Items.Add(reSelect);
- base.ToolStrip.Items.Add(analystToolStripButton);
- analystToolStripButton.Click += AnalystToolStripButton_Click;
- reSelect.Click += ReSelect_Click;
- }
- private void AnalystToolStripButton_Click(object sender, EventArgs e)
- {
- if (_selectSMID.Count != 2) { Sunny.UI.UIMessageTip.ShowError("请选择两根需要分析的管线", 2000); return; }
- Int32[] ids = _selectSMID.ToArray();
- //////DatasetVector m_pipeNet =
- //NetworkBuilder.BuildNetwork(dvJSLK_cp, dvJSJDPT_cp, "smid", "smid", "smid", "smid", DatasourceMapControl, DatasourceMapControl.Datasets.GetAvailableDatasetName("BuildNetworkDataset"));
- //设施网络分析环境设置类。该类用于提供设施网络分析时所需要的所有参数信息。设施网络分析环境设置类的各个参数的设置直接影响分析的结果。
- FacilityAnalystSetting analystSetting = new FacilityAnalystSetting();
- //analystSetting.NetworkDataset = DatasourceMapControl.Datasets["WaterNet"] as DatasetVector;
- analystSetting.NetworkDataset = ComsStatic.dvNetwork;
- analystSetting.NodeIDField = "SmID";// SmNodeID 设置网络数据集中标识结点 ID 的字段。
- analystSetting.EdgeIDField = "SmEdgeID";//SmID 设置网络数据集中标识弧段 ID 的字段。
- analystSetting.FNodeIDField = "SmFNode";//SmFNode 设置网络数据集中标识弧段起始结点 ID 的字段。
- analystSetting.TNodeIDField = "SmTNode";//SmTNode 设置网络数据集中标识弧段终止结点 ID 的字段。
- analystSetting.DirectionField = "lx";//Direction 设置流向字段。 不指定默认流向均为0
- analystSetting.Tolerance = 0.001;//设置点到弧段的距离容限。
- //权值字段信息类型,存储了网络分析中权值字段的相关信息,包括正向权值字段与反向权值字段。
- WeightFieldInfo info = new WeightFieldInfo();
- info.Name = "length";//length 设置权值字段信息的名称。
- info.FTWeightField = "SmLength"; // "SmLength";//设置正向阻力字段或字段表达式。
- info.TFWeightField = "SmLength"; //"SmLength";//设置反向阻力字段或字段表达式。
- WeightFieldInfos infos = new WeightFieldInfos();
- infos.Add(info);
- analystSetting.WeightFieldInfos = infos;
- //设施网络分析类。它是网络分析功能类之一,主要用于进行各类连通性分析和追踪分析。
- FacilityAnalyst m_facilityAnalyst = new FacilityAnalyst();
- m_facilityAnalyst.AnalystSetting = analystSetting;
- m_facilityAnalyst.Load();
- FacilityAnalystResult resultEdges = m_facilityAnalyst.FindPathFromEdges(ids[0], ids[1], "length", true);
- if (resultEdges is null) { Sunny.UI.UIMessageTip.ShowWarning("选择的管线不连通", 5000); return; }
- Recordset rdJSLK = dvJSLK_cp.Query(resultEdges.Edges, CursorType.Static);
- DataTable dtJSLK = MapBasic.ComsStatic.RecordsetToDataTable(rdJSLK, string.Format("经过{0}根管线", rdJSLK.RecordCount));
- DataSet ds = new DataSet(); ds.Tables.Add(dtJSLK);
- AnalystResultTabControl from = new AnalystResultTabControl(ds, "连通性分析结果");
- from.ShowDialog();
- this.CloseToolBar();
- }
- private void ReSelect_Click(object sender, EventArgs e)
- {
- _selectSMID.Clear();
- base.AfterClose();
- }
- protected override void OnLoad(EventArgs e)
- {
- MapControl.GeometrySelectChanged += MapControl_GeometrySelectChanged;
- }
- private void MapControl_GeometrySelectChanged(object sender, SuperMap.UI.GeometrySelectChangedEventArgs e)
- {
- Selection[] _selection = base.MapControl.Map.FindSelection(true);
- if (_selection.Length != 1 || _selection[0].Count != 1)
- {
- Sunny.UI.UIMessageTip.ShowError("请选择一根需要分析的管线", 2000);
- return;
- }
- if (_selectSMID.Count == 2)
- {
- _selectSMID.RemoveAt(1);
- }
- _selectSMID.Add(Int32.Parse(_selection[0][0].ToString()));
- MapControl.Map.TrackingLayer.Clear();
- Recordset rd = dvJSLK_cp.Query(_selectSMID.ToArray(), CursorType.Static);
- GeoStyle style = new GeoStyle { LineWidth = 2, LineColor = Color.Red };
- Geometry geo;
- rd.MoveFirst();
- while (!rd.IsEOF)
- {
- geo = rd.GetGeometry(); geo.Style = style;
- MapControl.Map.TrackingLayer.Add(geo, "GeoRectangle");
- rd.MoveNext();
- }
- MapControl.Map.Refresh();
- }
- public override void AfterClose()
- {
- MapControl.GeometrySelectChanged -= MapControl_GeometrySelectChanged;
- base.AfterClose();
- }
- private void InitializeComponent()
- {
- this.SuspendLayout();
- //
- // ToolsConditions
- //
- this.Name = "ToolsConditions";
- this.ResumeLayout(false);
- }
- }
- }
|