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); } } }
//! 通过点击获取需要分析的管线 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); }
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); } } }
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) { } }
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); } } } }
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); } }
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(); } }