private RouteNode CreateRouteNode(dynamic routeNode)
        {
            var mappedRouteNode = new RouteNode
            {
                ApplicationInfo = routeNode.application_info.ToString(),
                ApplicationName = routeNode.application_name.ToString(),
                Coord           = (JObject)routeNode.coord is null ? null : Convert.FromBase64String(routeNode.coord.wkb.ToString()),
                MarkAsDeleted   = (bool)routeNode.marked_to_be_deleted,
                DeleteMe        = (bool)routeNode.delete_me,
                Mrid            = new Guid(routeNode.mrid.ToString()),
                Username        = routeNode.user_name.ToString(),
                WorkTaskMrid    = routeNode.work_task_mrid.ToString() == string.Empty ? System.Guid.Empty : new Guid(routeNode.work_task_mrid.ToString()),

                LifeCycleInfo = new LifecycleInfo(
                    _infoMapper.MapDeploymentState((string)routeNode.lifecycle_deployment_state),
                    (DateTime?)routeNode.lifecycle_installation_date,
                    (DateTime?)routeNode.lifecycle_removal_date
                    ),
                MappingInfo = new MappingInfo(
                    _infoMapper.MapMappingMethod((string)routeNode.mapping_method),
                    (string)routeNode.mapping_vertical_accuracy,
                    (string)routeNode.mapping_horizontal_accuracy,
                    (DateTime?)routeNode.mapping_survey_date,
                    (string)routeNode.mapping_source_info
                    ),
                NamingInfo = new NamingInfo(
                    (string)routeNode.naming_name,
                    (string)routeNode.naming_description
                    ),
                RouteNodeInfo = new RouteNodeInfo(
                    _infoMapper.MapRouteNodeKind((string)routeNode.routenode_kind),
                    _infoMapper.MapRouteNodeFunction((string)routeNode.routenode_function)
                    ),
                SafetyInfo = new SafetyInfo(
                    (string)routeNode.safety_classification,
                    (string)routeNode.safety_remark
                    )
            };

            // Make fully empty objects into nulls.
            mappedRouteNode.LifeCycleInfo = AreAnyPropertiesNotNull <LifecycleInfo>(mappedRouteNode.LifeCycleInfo) ? mappedRouteNode.LifeCycleInfo : null;
            mappedRouteNode.MappingInfo   = AreAnyPropertiesNotNull <MappingInfo>(mappedRouteNode.MappingInfo) ? mappedRouteNode.MappingInfo : null;
            mappedRouteNode.NamingInfo    = AreAnyPropertiesNotNull <NamingInfo>(mappedRouteNode.NamingInfo) ? mappedRouteNode.NamingInfo : null;
            mappedRouteNode.RouteNodeInfo = AreAnyPropertiesNotNull <RouteNodeInfo>(mappedRouteNode.RouteNodeInfo) ? mappedRouteNode.RouteNodeInfo : null;
            mappedRouteNode.SafetyInfo    = AreAnyPropertiesNotNull <SafetyInfo>(mappedRouteNode.SafetyInfo) ? mappedRouteNode.SafetyInfo : null;

            return(mappedRouteNode);
        }
Пример #2
0
        private void CreateSegment(string fromName, string toName)
        {
            RouteNodeInfo fromNode = _nodesByName[fromName];
            RouteNodeInfo toNode   = _nodesByName[toName];

            var fixture = new Fixture();

            // Add segment between the two nodes
            var addSegmentCmd = fixture.Build <AddSegmentCommand>()
                                .With(x => x.FromNodeId, fromNode.Id)
                                .With(x => x.ToNodeId, toNode.Id)
                                .With(x => x.Geometry, new Geometry("LineString", "[" + fromNode.Geometry.GeoJsonCoordinates + "," + toNode.Geometry.GeoJsonCoordinates + "]"))
                                .With(x => x.SegmentKind, RouteSegmentKindEnum.Underground)
                                .Create();

            _bus.Send(addSegmentCmd);

            _segmentsByName[fromName + "_" + toName] = _queryService.GetRouteSegmentInfo(addSegmentCmd.Id);
        }
Пример #3
0
 public void AddRouteNodeInfo(RouteNodeInfo routeNodeInfo)
 {
     _routeNodeInfos.Add(routeNodeInfo.Id, routeNodeInfo);
 }
        public static void CutConduit(ConduitInfo conduitInfo, WalkOfInterestInfo walkOfInterest, RouteNodeInfo nodeWhereToCut)
        {
            ConduitSegmentInfo newSegment = null;

            List <ISegment> newSegmentList = new List <ISegment>();

            int newSequenceNumber = 1;

            var fromNodeId = conduitInfo.Segments[0].FromRouteNodeId;

            foreach (var existingSegment in conduitInfo.Segments)
            {
                List <Guid> segmentWalk = walkOfInterest.SubWalk(existingSegment.FromRouteNodeId, existingSegment.ToRouteNodeId);

                newSegmentList.Add(existingSegment);
                existingSegment.SequenceNumber  = newSequenceNumber;
                existingSegment.FromRouteNodeId = fromNodeId;

                // If the segment is cut by point of interest, divide it
                if (segmentWalk.Contains(nodeWhereToCut.Id))
                {
                    // Create the segment
                    newSequenceNumber++;

                    if (conduitInfo.Kind != ConduitKindEnum.MultiConduit)
                    {
                        newSegment = new SingleConduitSegmentInfo();
                    }
                    else
                    {
                        newSegment = new MultiConduitSegmentInfo();
                    }

                    newSegment.Id              = Guid.NewGuid();
                    newSegment.ConduitId       = ((ConduitSegmentInfo)existingSegment).ConduitId;
                    newSegment.SequenceNumber  = newSequenceNumber;
                    newSegment.FromRouteNodeId = nodeWhereToCut.Id;
                    newSegment.ToRouteNodeId   = existingSegment.ToRouteNodeId; // we need copy to side info
                    newSegment.ToNodeId        = existingSegment.ToNodeId;      // we need copy to side info
                    newSegment.ToNode          = existingSegment.ToNode;        // we need copy to side info

                    // Update the existing segment
                    existingSegment.ToRouteNodeId = nodeWhereToCut.Id;
                    existingSegment.ToNodeId      = Guid.Empty; // cannot possible have to junction anymore if it had so (transfered to new segment)
                    existingSegment.ToNode        = null;       // cannot possible have to junction anymore if it had so (transfered to new segment)

                    // Set from node on next segment to from node on inserted segment
                    fromNodeId = newSegment.ToRouteNodeId;

                    newSegmentList.Add(newSegment);
                }
                else
                {
                    // set from node to this one to node
                    fromNodeId = existingSegment.ToRouteNodeId;
                }

                newSequenceNumber++;
            }

            conduitInfo.Segments = newSegmentList;

            // Needed to wake up Marten
            conduitInfo.Name = conduitInfo.Name;
        }