/// <summary>
 /// Initializes a new instance of the GeometricNetworkTracer class
 /// </summary>
 /// <param name="geometricNetwork">object geometricNetwork</param>
 /// <param name="geometricNetworkParameters">object IGeometricNetworkParameters</param>
 /// <param name="traceSolverType">trace Solver Type</param>
 /// <param name="flowMethod">flow method</param>
 /// <param name="traceIndeterminateFlow">trace Indeterminate Flow</param>
 public GeometricNetworkTracer(ESRI.ArcGIS.Geodatabase.IGeometricNetwork geometricNetwork, IGeometricNetworkParameters geometricNetworkParameters, TraceSolverType traceSolverType, esriFlowMethod flowMethod, bool traceIndeterminateFlow)
     : base(geometricNetwork, geometricNetworkParameters)
 {
     this.TraceSolverType        = traceSolverType;
     this.FlowMethod             = flowMethod;
     this.TraceIndeterminateFlow = traceIndeterminateFlow;
     this.DisableLayers          = new List <int>();
 }
Exemple #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="GeometricNetworkInfo"/> class
        /// </summary>
        /// <param name="id">id of layer</param>
        /// <param name="name">name of layer</param>
        /// <param name="geometricNetwork">object IGeometricNetwork</param>
        public GeometricNetworkInfo(int id, string name, ESRI.ArcGIS.Geodatabase.IGeometricNetwork geometricNetwork)
        {
            this.Name = name;
            this.ID   = id;
            IGeoDataset geodataset = geometricNetwork as IGeoDataset;

            this.SpatialReference = geodataset.SpatialReference;
            this.Extent           = geodataset.Extent;
            this.GeometricNetwork = geometricNetwork;
        }
        /// <summary>
        /// search the eid nearest from point
        /// </summary>
        /// <param name="geometricNetwork">geometric Network</param>
        /// <param name="searchTolerance">tolerance for search</param>
        /// <param name="point">point input</param>
        /// <param name="elementType">type of element</param>
        /// <returns>return eid</returns>
        internal static int GetEIDFromPoint(ESRI.ArcGIS.Geodatabase.IGeometricNetwork geometricNetwork, double searchTolerance, IPoint point, esriElementType elementType)
        {
            IEnumFeatureClass enumFeatureClassSimple = null;
            IEnumFeatureClass enumFeatureClassComlex = null;

            if (elementType == esriElementType.esriETEdge)
            {
                enumFeatureClassSimple = geometricNetwork.get_ClassesByType(esriFeatureType.esriFTSimpleEdge);
                enumFeatureClassComlex = geometricNetwork.get_ClassesByType(esriFeatureType.esriFTComplexEdge);
            }
            else if (elementType == esriElementType.esriETJunction)
            {
                enumFeatureClassSimple = geometricNetwork.get_ClassesByType(esriFeatureType.esriFTSimpleJunction);
                enumFeatureClassComlex = geometricNetwork.get_ClassesByType(esriFeatureType.esriFTComplexJunction);
            }

            double    distance        = double.PositiveInfinity;
            int       featureClassID  = -1;
            IGeometry featureGeometry = null;

            Helper.FindNearestDistance(enumFeatureClassSimple, point, searchTolerance, ref distance, ref featureClassID, ref featureGeometry);
            Helper.FindNearestDistance(enumFeatureClassComlex, point, searchTolerance, ref distance, ref featureClassID, ref featureGeometry);

            if (featureClassID == -1)
            {
                return(-1);
            }

            IProximityOperator proximityPoint = featureGeometry as IProximityOperator;
            IPoint             p = proximityPoint.ReturnNearestPoint(point, esriSegmentExtension.esriNoExtension);

            if (elementType == esriElementType.esriETEdge)
            {
                return(geometricNetwork.get_EdgeElement(p));
            }
            else if (elementType == esriElementType.esriETJunction)
            {
                return(geometricNetwork.get_JunctionElement(p));
            }

            return(-1);
        }
Exemple #4
0
        /// <summary>
        /// Initializes a new instance of the GeometricNetwork class
        /// </summary>
        /// <param name="geometricNetwork">object geometricNetwork</param>
        /// <param name="geometricNetworkParameters">object IGeometricNetworkParameters</param>
        public GeometricNetwork(ESRI.ArcGIS.Geodatabase.IGeometricNetwork geometricNetwork, IGeometricNetworkParameters geometricNetworkParameters)
        {
            this.geometricNetwork = geometricNetwork;
            this.EdgeFlags        = geometricNetworkParameters.EdgeFlags;
            this.JunctionFlags    = geometricNetworkParameters.JunctionFlags;
            this.EdgeBarriers     = geometricNetworkParameters.EdgeBarriers;
            this.JunctionBarriers = geometricNetworkParameters.JunctionBarriers;
            this.MaxFeatures      = geometricNetworkParameters.MaxFeatures;
            this.Tolerance        = geometricNetworkParameters.Tolerance;
            this.FlowElements     = geometricNetworkParameters.FlowElements;
            this.OutFields        = new string[] { "*" };

            this.edgeFlags        = new EdgeFlag[] { };
            this.junctionFlags    = new JunctionFlag[] { };
            this.edgeBarriers     = new int[] { };
            this.junctionBarriers = new int[] { };

            this.SetFlagsGeometricNetwork();
            this.SetBarriersGeometricNetwork();
        }
        /// <summary>
        /// Trace Geometry Network
        /// </summary>
        /// <param name="geometricNetwork">Geometric Network</param>
        /// <param name="traceSolverType">trace Solver Type</param>
        /// <param name="flowElements">flow Elements</param>
        /// <param name="edgeFlags">edge Flags</param>
        /// <param name="junctionFlags">junction Flags</param>
        /// <param name="edgeBarriers">edge Barriers</param>
        /// <param name="junctionBarriers">junction Barriers</param>
        /// <param name="flowMethod">method flow</param>
        /// <param name="outFields">output fields</param>
        /// <param name="maxFeatures">max Features</param>
        /// <param name="tolerance">parameter tolerance</param>
        /// <param name="traceIndeterminateFlow">trace Indeterminate Flow</param>
        /// <param name="shortestPathObjFn">shortest Path Obj Fn</param>
        /// <param name="disableLayers">list of disable layers</param>
        /// <param name="netJunctionWeight">Junction Weight</param>
        /// <param name="netFromToEdgeWeight">FromTo Edge Weight</param>
        /// <param name="netToFromEdgeWeight">ToFrom Edge Weight</param>
        /// <param name="netJunctionFilterWeight">Junction Filter Weight</param>
        /// <param name="junctionFilterRangesFrom">junction Filter Ranges From</param>
        /// <param name="junctionFilterRangesTo">junction Filter Ranges To</param>
        /// <param name="junctionFilterNotOperator">junction Filter Not Operator</param>
        /// <param name="netFromToEdgeFilterWeight">FromTo Edge Filter Weight</param>
        /// <param name="netToFromEdgeFilterWeight">ToFrom Edge Filter Weight</param>
        /// <param name="edgeFilterRangesFrom">edge Filter Ranges From</param>
        /// <param name="edgeFilterRangesTo">edge Filter Ranges To</param>
        /// <param name="edgeFilterNotOperator">edge Filter Not Operator</param>
        /// <returns>Trace Geometric Network</returns>
        internal static byte[] GetTraceGeometryNetwork(ESRI.ArcGIS.Geodatabase.IGeometricNetwork geometricNetwork, TraceSolverType traceSolverType, esriFlowElements flowElements, List <IPoint> edgeFlags, List <IPoint> junctionFlags, List <IPoint> edgeBarriers, List <IPoint> junctionBarriers, esriFlowMethod flowMethod, string[] outFields, int maxFeatures, double tolerance, bool traceIndeterminateFlow, esriShortestPathObjFn shortestPathObjFn, List <int> disableLayers, INetWeight netJunctionWeight, INetWeight netFromToEdgeWeight, INetWeight netToFromEdgeWeight, INetWeight netJunctionFilterWeight, List <object> junctionFilterRangesFrom, List <object> junctionFilterRangesTo, bool junctionFilterNotOperator, INetWeight netFromToEdgeFilterWeight, INetWeight netToFromEdgeFilterWeight, List <object> edgeFilterRangesFrom, List <object> edgeFilterRangesTo, bool edgeFilterNotOperator)
        {
            IGeometricNetworkParameters geometricNetworkParameters = new GeometricNetworkParameters();

            geometricNetworkParameters.EdgeFlags        = edgeFlags;
            geometricNetworkParameters.JunctionFlags    = junctionFlags;
            geometricNetworkParameters.EdgeBarriers     = edgeBarriers;
            geometricNetworkParameters.JunctionBarriers = junctionBarriers;
            geometricNetworkParameters.MaxFeatures      = maxFeatures;
            geometricNetworkParameters.Tolerance        = tolerance;
            geometricNetworkParameters.FlowElements     = flowElements;

            IGeometricNetworkTracer geometricNetworkTracer = new GeometricNetworkTracer(geometricNetwork, geometricNetworkParameters, traceSolverType, flowMethod, traceIndeterminateFlow);

            geometricNetworkTracer.OutFields                 = outFields;
            geometricNetworkTracer.DisableLayers             = disableLayers;
            geometricNetworkTracer.JunctionWeight            = netJunctionWeight;
            geometricNetworkTracer.FromToEdgeWeight          = netFromToEdgeWeight;
            geometricNetworkTracer.ToFromEdgeWeight          = netToFromEdgeWeight;
            geometricNetworkTracer.JunctionFilterWeight      = netJunctionFilterWeight;
            geometricNetworkTracer.JunctionFilterRangesFrom  = junctionFilterRangesFrom;
            geometricNetworkTracer.JunctionFilterRangesTo    = junctionFilterRangesTo;
            geometricNetworkTracer.JunctionFilterNotOperator = junctionFilterNotOperator;
            geometricNetworkTracer.FromToEdgeFilterWeight    = netFromToEdgeFilterWeight;
            geometricNetworkTracer.ToFromEdgeFilterWeight    = netToFromEdgeFilterWeight;
            geometricNetworkTracer.EdgeFilterRangesFrom      = edgeFilterRangesFrom;
            geometricNetworkTracer.EdgeFilterRangesTo        = edgeFilterRangesTo;
            geometricNetworkTracer.EdgeFilterNotOperator     = edgeFilterNotOperator;

            if ((traceSolverType == TraceSolverType.FindPath) || (traceSolverType == TraceSolverType.FindSource))
            {
                geometricNetworkTracer.ShortestPathObjFn = shortestPathObjFn;
            }

            return(geometricNetworkTracer.Solve().JsonByte());
        }
        /// <summary>
        /// object polyline. Distance negative -> upstream
        /// </summary>
        /// <param name="geometricNetwork">object geometricNetwork</param>
        /// <param name="resultEdges">objects resultEdges</param>
        /// <param name="distance">value of distance</param>
        /// <param name="point">object point</param>
        /// <param name="offset">offset of polyline</param>
        /// <param name="messageInfo">info on result</param>
        /// <returns>object IGeometry (polyline or point)</returns>
        internal static IGeometry GetPolylinePosAlong(ESRI.ArcGIS.Geodatabase.IGeometricNetwork geometricNetwork, IEnumNetEID resultEdges, double distance, IPoint point, double?offset, ref string messageInfo)
        {
            IGeometry geometryBag = new GeometryBagClass();

            geometryBag.SpatialReference = point.SpatialReference;
            IGeometryCollection geometryCollection = geometryBag as IGeometryCollection;

            IEIDHelper eidHelper = new EIDHelperClass();

            eidHelper.GeometricNetwork = geometricNetwork;
            eidHelper.ReturnGeometries = true;
            eidHelper.ReturnFeatures   = false;

            IEnumEIDInfo enumEIDinfo = eidHelper.CreateEnumEIDInfo(resultEdges);

            enumEIDinfo.Reset();
            IEIDInfo eidInfo = enumEIDinfo.Next();

            while (eidInfo != null)
            {
                IGeometry geometry = eidInfo.Geometry;
                geometryCollection.AddGeometry(geometry);
                eidInfo = enumEIDinfo.Next();
            }

            ITopologicalOperator unionedPolyline = new PolylineClass();

            unionedPolyline.ConstructUnion(geometryBag as IEnumGeometry);

            IPolyline pl = unionedPolyline as IPolyline;

            if (distance < 0)
            {
                pl.ReverseOrientation();
                distance = Math.Abs(distance);
            }

            IMAware mAware = pl as IMAware;

            mAware.MAware = true;
            IMSegmentation3 mSegmentation = unionedPolyline as IMSegmentation3;

            mSegmentation.SetMsAsDistance(false);

            IPoint ptTmp             = new PointClass();
            double distanceAlong     = 0;
            double distanceFromCurve = 0;
            bool   rightSide         = false;

            pl.QueryPointAndDistance(esriSegmentExtension.esriNoExtension, point, false, ptTmp, ref distanceAlong, ref distanceFromCurve, ref rightSide);
            object mStartArray = mSegmentation.GetMsAtDistance(distanceAlong, false);

            double[]  mStart             = mStartArray as double[];
            double    distanceDownStream = distanceAlong + distance;
            IPolyline resultPolyline     = mSegmentation.GetSubcurveBetweenMs(mStart[0], distanceDownStream) as IPolyline;

            if (resultPolyline.IsEmpty)
            {
                return(point);
            }

            if (mSegmentation.MMax < distanceDownStream)
            {
                messageInfo = "The set distance exceeds the length of network";
            }

            return(Helper.ConstructOffset(resultPolyline, offset));
        }
 /// <summary>
 /// Initializes a new instance of the GeometricNetworkValveIsolation class
 /// </summary>
 /// <param name="geometricNetwork">object geometricNetwork</param>
 /// <param name="geometricNetworkParameters">object IGeometricNetworkParameters</param>
 /// <param name="valve">feature class valve</param>
 /// <param name="station">feature class station</param>
 public GeometricNetworkValveIsolation(ESRI.ArcGIS.Geodatabase.IGeometricNetwork geometricNetwork, IGeometricNetworkParameters geometricNetworkParameters, IFeatureClass valve, IFeatureClass station)
     : base(geometricNetwork, geometricNetworkParameters)
 {
     this.Valve   = valve;
     this.Station = station;
 }