示例#1
0
 private void AddFeatureLayer(IFeatureLayer iFLayer)
 {
     if (iFLayer != null)
     {
         if (pPipeCfg.IsPipelineLayer(iFLayer.FeatureClass.AliasName, enumPipelineDataType.Point) ||
             pPipeCfg.IsPipelineLayer(iFLayer.FeatureClass.AliasName, enumPipelineDataType.Line))
         {
             ComplexQueryUI.LayerboxItem layerboxItem = new ComplexQueryUI.LayerboxItem();
             layerboxItem.m_pPipeLayer = iFLayer;
             this.LayerBox.Items.Add(layerboxItem);
         }
     }
 }
示例#2
0
        //! 通过点击获取需要分析的管线
        public bool PickBrokePipe(IPoint _pMousePoint)
        {
            this.InitClick();
            this.ipoint_0 = _pMousePoint;
            bool      flag      = false;
            double    num       = 2147483647.0;
            ArrayList arrayList = new ArrayList();

            GetMapVisibleILayers(m_iApp.FocusMap, null, arrayList);
            for (int i = 0; i < arrayList.Count; i++)
            {
                IFeatureLayer featureLayer = arrayList[i] as IFeatureLayer;
                if (featureLayer != null && featureLayer.FeatureClass != null && featureLayer.Visible &&
                    m_Config.IsPipelineLayer(featureLayer.FeatureClass.AliasName, enumPipelineDataType.Line))
                {
                    IPipelineLayer pipeLayer = m_Config.GetPipelineLayer(featureLayer.FeatureClass.AliasName,
                                                                         enumPipelineDataType.Line);
                    IFeatureDataset        featureDataset        = featureLayer.FeatureClass.FeatureDataset;
                    IFeatureClassContainer featureClassContainer = featureDataset as IFeatureClassContainer;
                    List <IBasicLayerInfo> basicInfos            = pipeLayer.GetLayers(enumPipelineDataType.Junction);

                    IFeatureClass featureClass = basicInfos.Count > 0 ? basicInfos[0].FeatureClass : null;
                    if (featureClass != null && featureClass is INetworkClass)
                    {
                        IGeometricNetwork geometricNetwork = ((INetworkClass)featureClass).GeometricNetwork;
                        IPointToEID       pointToEIDClass  = new PointToEID();
                        pointToEIDClass.SourceMap        = (m_iApp.FocusMap);
                        pointToEIDClass.GeometricNetwork = (geometricNetwork);
                        pointToEIDClass.SnapTolerance    = (m_iApp.ActiveView.Extent.Width / 200.0);
                        int    edgeID   = 0;
                        IPoint location = null;
                        double percent  = 0;
                        pointToEIDClass.GetNearestEdge(this.ipoint_0, out edgeID, out location, out percent);
                        if (location != null && num > percent)
                        {
                            num        = percent;
                            _pipeLayer = pipeLayer;
                            this._nearestEdgeInfo.GeometricNetwork = geometricNetwork;
                            this._nearestEdgeInfo.Percent          = percent;
                            this._nearestEdgeInfo.EdgeID           = edgeID;
                            this._nearestEdgeInfo.Location         = location;
                            flag = true;
                            break;
                        }
                    }
                }
            }
            arrayList.Clear();
            if (flag)
            {
                this.DrawBrokeEdge();
            }
            return(flag);
        }
示例#3
0
 private void AddFeatureLayer(IFeatureLayer iFLayer)
 {
     if (iFLayer != null)
     {
         if (PPipeCfg.IsPipelineLayer(iFLayer.Name, enumPipelineDataType.Line))
         {
             var layerboxItem = new LayerboxItem();
             layerboxItem.m_pPipeLayer = iFLayer;
             _layersCheckedListBox.Items.Add(layerboxItem);
         }
     }
 }
示例#4
0
 public void AddName(ILayer pLayer)
 {
     try
     {
         if (pLayer != null)
         {
             IFeatureLayer             featureLayer = pLayer as IFeatureLayer;
             CheckListFeatureLayerItem checkListFeatureLayerItem = new CheckListFeatureLayerItem()
             {
                 m_pFeatureLayer = featureLayer
             };
             IFeatureClass featureClass = featureLayer.FeatureClass;
             if (featureLayer.FeatureClass.FeatureType != (esriFeatureType)11)
             {
                 if ((!this.radBtnPt.Checked
                     ? false
                     : m_PipeConfig.IsPipelineLayer(featureLayer.Name, enumPipelineDataType.Point)))
                 {
                     this.chkLstLayers.Items.Add(checkListFeatureLayerItem);
                 }
                 if ((!this.radBtnLn.Checked
                     ? false
                     : m_PipeConfig.IsPipelineLayer(featureLayer.Name, enumPipelineDataType.Line)))
                 {
                     this.chkLstLayers.Items.Add(checkListFeatureLayerItem);
                 }
                 if ((!this.radBtnOther.Checked ||
                      m_PipeConfig.IsPipelineLayer(featureLayer.Name, enumPipelineDataType.Line)
                     ? false
                     : !m_PipeConfig.IsPipelineLayer(featureLayer.Name, enumPipelineDataType.Point)))
                 {
                     this.chkLstLayers.Items.Add(checkListFeatureLayerItem);
                 }
             }
         }
     }
     catch (Exception exception)
     {
     }
 }
示例#5
0
        private void FormMaiShenAnalysis_Load(object obj, EventArgs eventArgs)
        {
            IFeature feature = ((IEnumFeature)_context.FocusMap.FeatureSelection).Next();
            //if (feature == null || feature.Shape.GeometryType != esriGeometryType.esriGeometryPolygon)
            //{
            //	this.chkRegionAnalysis.Visible = false;
            //}
            ArrayList arrayList = new ArrayList();

            CMapOperator.GetMapILayers(_context.FocusMap, null, arrayList);
            for (int i = 0; i < arrayList.Count; i++)
            {
                if (arrayList[i] is IFeatureLayer)
                {
                    IFeatureLayer featureLayer = (IFeatureLayer)arrayList[i];
                    if (_config.IsPipelineLayer(featureLayer.Name, enumPipelineDataType.Line))
                    {
                        CheckListFeatureLayerItem class1 = new CheckListFeatureLayerItem();
                        class1.m_pFeatureLayer = featureLayer;
                        this.checkedListBox1.Items.Add(class1, true);
                    }
                }
            }
        }
示例#6
0
        private void StartAnalysis(IFeature feature)
        {
            if (feature.FeatureType != esriFeatureType.esriFTSimpleJunction)
            {
                MessageService.Current.Warn("请选择管线点");
                return;
            }
            if (!_pipelineConfig.IsPipelineLayer(feature.Class.AliasName, enumPipelineDataType.Point))
            {
                MessageService.Current.Warn("请选择管线点");
                return;
            }
            double snapDist = CommonUtils.ConvertPixelsToMapUnits(_context.ActiveView,
                                                                  _context.Config.SnapTolerance);
            IBasicLayerInfo lineConfig =
                _plugin.PipeConfig.GetBasicLayerInfo(feature.Class as IFeatureClass) as IBasicLayerInfo;

            if (this._startPoint == null && _startEid == 0)
            {
                //开始记录起始点
                IPipelineLayer oldLayer = _pipelineConfig.GetPipelineLayer(feature.Class.AliasName,
                                                                           enumPipelineDataType.Point);
                if (oldLayer == null)
                {
                    MessageService.Current.Warn("你选择的图层不是合法的管线图层!");
                    return;
                }
                List <IBasicLayerInfo> basicInfos = oldLayer.GetLayers(enumPipelineDataType.Junction);

                IFeatureClass featureClass = basicInfos.Count > 0 ? basicInfos[0].FeatureClass : null;
                if (featureClass == null)
                {
                    MessageService.Current.Warn("管线图层没有构建网络图层!");
                    return;
                }
                INetworkClass networkClass = featureClass as INetworkClass;
                _geometricNetwork = networkClass.GeometricNetwork;
                IPointToEID pnToEid = new PointToEIDClass();
                pnToEid.GeometricNetwork = _geometricNetwork;
                pnToEid.SnapTolerance    = snapDist;
                pnToEid.SourceMap        = _context.FocusMap;
                pnToEid.GetNearestJunction(feature.Shape as IPoint, out _startEid, out _startPoint);
                return;
            }
            IPipelineLayer newLayer = _pipelineConfig.GetPipelineLayer(feature.Class.AliasName,
                                                                       enumPipelineDataType.Point);

            if (newLayer == null)
            {
                MessageService.Current.Warn("你选择的图层不是合法的管线图层!");
                return;
            }
            List <IBasicLayerInfo> basicInfos1 = newLayer.GetLayers(enumPipelineDataType.Junction);

            IFeatureClass featureClass2 = basicInfos1.Count > 0 ? basicInfos1[0].FeatureClass : null;

            if (featureClass2 == null)
            {
                MessageService.Current.Warn("第二个管线图层没有构建网络图层!");
                return;
            }
            INetworkClass networkClass2 = featureClass2 as INetworkClass;

            if (networkClass2.GeometricNetwork != _geometricNetwork)
            {
                if (MessageService.Current.Ask("两个点位属于不同的网络图层,使用第二个网络图层作为分析图层吗?") == false)
                {
                    return;
                }
                _geometricNetwork = networkClass2.GeometricNetwork;
                IPointToEID pnToEid = new PointToEIDClass();
                pnToEid.GeometricNetwork = _geometricNetwork;
                pnToEid.SnapTolerance    = snapDist;
                pnToEid.SourceMap        = _context.FocusMap;
                pnToEid.GetNearestJunction(feature.Shape as IPoint, out _startEid, out _startPoint);
                return;
            }

            try
            {
                IPointToEID pntEid = new PointToEIDClass();
                pntEid.GeometricNetwork = _geometricNetwork;
                pntEid.SourceMap        = _context.FocusMap;
                pntEid.SnapTolerance    = snapDist;

                pntEid.GetNearestJunction(feature.Shape as IPoint, out _endEid, out _endPoint);
                if (_endEid < 1)
                {
                    MessageService.Current.Warn("未能找到第二个分析点!");
                    return;
                }
                if (_startEid == _endEid)
                {
                    MessageService.Current.Warn("起点终点为同一个点!");
                    return;
                }

                INetElements  netElements  = _geometricNetwork.Network as INetElements;
                INetworkClass networkClass = feature.Class as INetworkClass;

                IJunctionFlag[] array   = new JunctionFlag[2];
                INetFlag        netFlag = new JunctionFlag() as INetFlag;

                int userClassID;
                int userID;
                int userSubID;
                netElements.QueryIDs(_endEid, esriElementType.esriETJunction, out userClassID, out userID, out userSubID);
                netFlag.UserClassID = (userClassID);
                netFlag.UserID      = (userID);
                netFlag.UserSubID   = (userSubID);
                IJunctionFlag value = netFlag as IJunctionFlag;
                array.SetValue(value, 0);
                INetFlag netFlag2 = new JunctionFlag() as INetFlag;
                netElements.QueryIDs(_startEid, esriElementType.esriETJunction, out userClassID,
                                     out userID, out userSubID);
                netFlag2.UserClassID = (userClassID);
                netFlag2.UserID      = (userID);
                netFlag2.UserSubID   = (userSubID);
                value = (netFlag2 as IJunctionFlag);
                array.SetValue(value, 1);
                ITraceFlowSolverGEN traceFlowSolverGEN = new TraceFlowSolver() as ITraceFlowSolverGEN;
                INetSolver          netSolver          = traceFlowSolverGEN as INetSolver;
                netSolver.SourceNetwork = _geometricNetwork.Network;
                traceFlowSolverGEN.PutJunctionOrigins(ref array);
                object[]    array2 = new object[1];
                IEnumNetEID enumNetEID;
                IEnumNetEID enumNetEID2;
                traceFlowSolverGEN.FindPath((esriFlowMethod)2, (esriShortestPathObjFn)1, out enumNetEID,
                                            out enumNetEID2, 1, ref array2);
                if (this.ipolyline_0 == null)
                {
                    this.ipolyline_0 = new Polyline() as IPolyline;
                }
                IGeometryCollection geometryCollection = this.ipolyline_0 as IGeometryCollection;
                geometryCollection.RemoveGeometries(0, geometryCollection.GeometryCount);
                if (enumNetEID2.Count <= 0)
                {
                    this.ifeature_0 = null;
                    MessageBox.Show("两点之间不存在路径可以连通!");
                }
                else
                {
                    ShowShortObjectForm showShortObjectForm = new ShowShortObjectForm(_context);
                    showShortObjectForm.pApp = _context;
                    ISpatialReference spatialReference = _context.FocusMap.SpatialReference;
                    IEIDHelper        eIDHelperClass   = new EIDHelper();
                    eIDHelperClass.GeometricNetwork       = (networkClass.GeometricNetwork);
                    eIDHelperClass.OutputSpatialReference = (spatialReference);
                    eIDHelperClass.ReturnGeometries       = (true);
                    eIDHelperClass.ReturnFeatures         = (true);
                    IEnumEIDInfo enumEIDInfo = eIDHelperClass.CreateEnumEIDInfo(enumNetEID2);
                    int          count       = enumEIDInfo.Count;
                    enumEIDInfo.Reset();
                    for (int i = 0; i < count; i++)
                    {
                        IEIDInfo  iEIDInfo = enumEIDInfo.Next();
                        IGeometry geometry = iEIDInfo.Geometry;
                        if (i == 0)
                        {
                            showShortObjectForm.AddPipeName(this.string_0);
                        }
                        showShortObjectForm.AddFeature(iEIDInfo.Feature);
                        geometryCollection.AddGeometryCollection(geometry as IGeometryCollection);
                    }
                    showShortObjectForm.AddShortPath(this.ipolyline_0);
                    showShortObjectForm.AddLenght(this.ipolyline_0.Length);
                    this.ifeature_2 = feature;
                    EsriUtils.ZoomToGeometry(this.ipolyline_0, _context.MapControl.Map, 1.3);
                    FlashUtility.FlashGeometry(this.ipolyline_0, _context.MapControl);
                    this.ifeature_0   = null;
                    _startEid         = 0;
                    _startPoint       = null;
                    _geometricNetwork = null;
                    showShortObjectForm.Show();
                }
            }
            catch (Exception ex)
            {
                this.ifeature_0 = null;
                MessageBox.Show(ex.Message);
            }
        }
示例#7
0
        public void GetBaseLine()
        {
            string str;
            string str1;
            string str2;

            this.timer_0.Stop();
            this.dataGridView1.Rows.Clear();
            IMap         map = this.m_app.FocusMap;
            IEnumFeature featureSelection = (IEnumFeature)map.FeatureSelection;

            featureSelection.Reset();
            IFeature feature = featureSelection.Next();

            if ((feature == null ? false : feature.FeatureType == (esriFeatureType)8))
            {
                CommonUtils.GetSmpClassName(feature.Class.AliasName);
                if (_config.IsPipelineLayer(feature.Class.AliasName))
                {
                    IGeometry shape = feature.Shape;
                    if (shape.GeometryType == esriGeometryType.esriGeometryPolyline)
                    {
                        this.ipolyline_0 = CommonUtils.GetPolylineDeepCopy((IPolyline)shape);
                        IBasicLayerInfo layerInfo = _config.GetBasicLayerInfo(feature.Class.AliasName);
                        this.m_commonDistAls.m_pFeature     = feature;
                        this.m_commonDistAls.m_pBaseLine    = this.ipolyline_0;
                        this.m_commonDistAls.m_strLayerName = feature.Class.AliasName;
                        int num = feature.Fields.FindField(layerInfo.GetFieldName(PipeConfigWordHelper.LineWords.MSFS));
                        str = (num == -1 ? "" : this.method_0(feature.get_Value(num)));
                        this.m_commonDistAls.m_strBuryKind = str;
                        int num1 = feature.Fields.FindField(layerInfo.GetFieldName(PipeConfigWordHelper.LineWords.GJ));
                        str1 = (num1 == -1 ? "" : this.method_0(feature.get_Value(num1)));
                        num1 = feature.Fields.FindField(layerInfo.GetFieldName(PipeConfigWordHelper.LineWords.DMCC));
                        str2 = (num1 == -1 ? "" : this.method_0(feature.get_Value(num1)));
                        string str3 = "";
                        if (str1 != "")
                        {
                            str3 = str1;
                        }
                        if (str2 != "")
                        {
                            str3 = str2;
                        }
                        this.m_commonDistAls.m_dDiameter = this.m_commonDistAls.GetDiameterFromString(str3.Trim());
                        IEdgeFeature edgeFeature = (IEdgeFeature)feature;
                        this.m_commonDistAls.m_nBaseLineFromID = edgeFeature.FromJunctionEID;
                        this.m_commonDistAls.m_nBaseLineToID   = edgeFeature.ToJunctionEID;
                        this.btAnalyse.Enabled             = this.m_commonDistAls.m_pBaseLine != null;
                        this.chitAnalyse_0.PipeLayer_Class = feature.Class as IFeatureClass;
                        this.chitAnalyse_0.BaseLine_OID    = feature.OID;
                    }
                    else
                    {
                        MessageBox.Show("所选择的管线多于一条,或者不是管线!");
                    }
                }
                else
                {
                    this.m_commonDistAls.m_pBaseLine = null;
                    this.btAnalyse.Enabled           = false;
                    this.m_app.FocusMap.ClearSelection();
                    this.m_app.ActiveView.Refresh();
                }
            }
            else
            {
                this.m_commonDistAls.m_pBaseLine = null;
                this.btAnalyse.Enabled           = false;
                this.m_app.FocusMap.ClearSelection();
                this.m_app.ActiveView.Refresh();
            }
        }