/// <summary> /// Get the nearest street for operational object. /// </summary> /// <param name="operationalObjectPoint">The operational object unique identifier.</param> /// <param name="streetName">The street name.</param> /// <returns>The nearest street and the intersection point.</returns> public Tuple <NetworkLinkDTO, SqlGeometry> GetNearestNamedRoad(DbGeometry operationalObjectPoint, string streetName) { using (loggingHelper.RMTraceManager.StartTrace("Business.GetNearestNamedRoad")) { string methodName = typeof(NetworkManagerBusinessService) + "." + nameof(GetNearestNamedRoad); loggingHelper.LogMethodEntry(methodName, priority, entryEventId); List <string> categoryNamesSimpleLists = new List <string> { ReferenceDataCategoryNames.NetworkLinkType, }; var referenceDataCategoryList = networkManagerIntegrationService.GetReferenceDataSimpleLists(categoryNamesSimpleLists).Result; Tuple <NetworkLinkDataDTO, SqlGeometry> getNearestNamedRoad = streetNetworkDataService.GetNearestNamedRoad(operationalObjectPoint, streetName, referenceDataCategoryList); NetworkLinkDTO networkLink = null; if (getNearestNamedRoad != null && getNearestNamedRoad.Item1 != null) { networkLink = new NetworkLinkDTO() { Id = getNearestNamedRoad.Item1.ID, LinkGeometry = getNearestNamedRoad.Item1.LinkGeometry, NetworkLinkType_GUID = getNearestNamedRoad.Item1.NetworkLinkTypeGUID, TOID = getNearestNamedRoad.Item1.TOID }; } Tuple <NetworkLinkDTO, SqlGeometry> nearestRoad = new Tuple <NetworkLinkDTO, SqlGeometry>(networkLink, getNearestNamedRoad.Item2); loggingHelper.LogMethodExit(methodName, priority, exitEventId); return(nearestRoad); } }
/// <summary> /// Get the street DTO for operational object. /// </summary> /// <param name="networkLinkID">networkLink unique identifier Guid.</param> /// <returns>Nearest street and the intersection point.</returns> public NetworkLinkDTO GetNetworkLink(Guid networkLinkID) { using (loggingHelper.RMTraceManager.StartTrace("Business.GetNetworkLink")) { string methodName = typeof(NetworkManagerBusinessService) + "." + nameof(GetNetworkLink); loggingHelper.LogMethodEntry(methodName, priority, entryEventId); NetworkLinkDataDTO getNetworkLink = streetNetworkDataService.GetNetworkLink(networkLinkID); NetworkLinkDTO networkLink = new NetworkLinkDTO() { Id = getNetworkLink.ID, LinkGeometry = getNetworkLink.LinkGeometry, NetworkLinkType_GUID = getNetworkLink.NetworkLinkTypeGUID, TOID = getNetworkLink.TOID, DataProvider_GUID = getNetworkLink.DataProviderGUID, StartNode_GUID = getNetworkLink.StartNodeID, EndNode_GUID = getNetworkLink.EndNodeID, LinkGradientType = getNetworkLink.LinkGradientType, LinkLength = getNetworkLink.LinkLength, LinkName = getNetworkLink.LinkName, RoadName_GUID = getNetworkLink.RoadNameGUID, StreetName_GUID = getNetworkLink.StreetNameGUID }; loggingHelper.LogMethodExit(methodName, priority, exitEventId); return(networkLink); } }
/// <summary> /// Get the nearest street for operational object. /// </summary> /// <param name="operationalObjectPoint">Operational object unique identifier.</param> /// <returns>Nearest street and the intersection point.</returns> public List <Tuple <NetworkLinkDTO, SqlGeometry> > GetNearestSegment(DbGeometry operationalObjectPoint) { using (loggingHelper.RMTraceManager.StartTrace("Business.GetNearestSegment")) { string methodName = typeof(NetworkManagerBusinessService) + "." + nameof(GetNearestSegment); loggingHelper.LogMethodEntry(methodName, priority, entryEventId); List <string> categoryNamesNameValuePairs = new List <string> { ReferenceDataCategoryNames.AccessLinkParameters, }; List <string> categoryNamesSimpleLists = new List <string> { ReferenceDataCategoryNames.NetworkLinkType }; var referenceDataCategoryList = networkManagerIntegrationService.GetReferenceDataNameValuePairs(categoryNamesNameValuePairs).Result; referenceDataCategoryList.AddRange( networkManagerIntegrationService.GetReferenceDataSimpleLists(categoryNamesSimpleLists).Result); List <Tuple <NetworkLinkDataDTO, SqlGeometry> > nearestSegmentList = streetNetworkDataService.GetNearestSegment(operationalObjectPoint, referenceDataCategoryList); NetworkLinkDTO networkLinkDTO = null; List <Tuple <NetworkLinkDTO, SqlGeometry> > nearestSegment = new List <Tuple <NetworkLinkDTO, SqlGeometry> >(); if (nearestSegmentList != null) { foreach (var item in nearestSegmentList) { networkLinkDTO = new NetworkLinkDTO() { Id = item.Item1.ID, LinkGeometry = item.Item1.LinkGeometry, NetworkLinkType_GUID = item.Item1.NetworkLinkTypeGUID, TOID = item.Item1.TOID }; nearestSegment.Add(new Tuple <NetworkLinkDTO, SqlGeometry>(networkLinkDTO, item.Item2)); } } loggingHelper.LogMethodExit(methodName, priority, exitEventId); return(nearestSegment); } }
/// <summary> /// Get the street DTO for operational object. /// </summary> /// <param name="networkLinkID">networkLink unique identifier Guid.</param> /// <returns>Nearest street and the intersection point.</returns> public async Task <NetworkLinkDTO> GetNetworkLink(Guid networkLinkID) { using (loggingHelper.RMTraceManager.StartTrace("Integration.GetNetworkLink")) { string methodName = typeof(AccessLinkIntegrationService) + "." + nameof(GetNearestNamedRoad); loggingHelper.LogMethodEntry(methodName, priority, entryEventId); HttpResponseMessage result = await httpHandler.GetAsync(networkManagerDataWebAPIName + "networklink/" + networkLinkID); if (!result.IsSuccessStatusCode) { var responseContent = result.ReasonPhrase; throw new ServiceException(responseContent); } NetworkLinkDTO networkLink = JsonConvert.DeserializeObject <NetworkLinkDTO>(result.Content.ReadAsStringAsync().Result); loggingHelper.LogMethodExit(methodName, priority, exitEventId); return(networkLink); } }
/// <summary> /// Setup for Nunit Tests. /// </summary> protected override void OnSetup() { accessLinkManualCreateModelDTO = new AccessLinkManualCreateModelDTO { AccessLinkLine = "[[512455.33999999985,107127.7899999991],[512454.8208646417,107129.43228437999],[512474,107139]]", BoundingBoxCoordinates = "511684.44432227453,106504.23168359262,513419.32779204147,107103.43288199503", NetworkLinkGUID = "c55712fe-ce92-4386-a0a5-e9a158b15441", OperationalObjectGUID = "ffc86397-fbb5-4caf-a070-aca8d723de57", Workloadlength = 40, NetworkIntersectionPoint = "[512455.33999999985,107127.7899999991]", OperationalObjectPoint = "[512455.33999999985,107127.7899999991]" }; deliveryPointDTO = new DeliveryPointDTO { LocationXY = DbGeometry.PointFromText("POINT (488938 197021)", 27700), Latitude = (decimal)50.83133590, Longitude = (decimal) - 0.40071150, Positioned = true, UDPRN = 2364534, PostalAddress = new RM.CommonLibrary.EntityFramework.DTO.PostalAddressDTO { Thoroughfare = "Salvington Gardens" }, DeliveryPointUseIndicator_GUID = Guid.Parse("178EDCAD-9431-E711-83EC-28D244AEF9ED") }; accessLinkDTO = new List <AccessLinkDTO>() { new AccessLinkDTO() { ID = Guid.Parse("3981AD3B-D253-4BD9-AB82-000094D8EE67"), OperationalObjectPoint = DbGeometry.PointFromText("POINT (488938 197021)", 27700), NetworkIntersectionPoint = DbGeometry.PointFromText("POINT (488929.9088937093 197036.37310195228)", 27700), AccessLinkLine = DbGeometry.LineFromText("LINESTRING (488938 197021, 488929.9088937093 197036.37310195228)", 27700), NetworkLink_GUID = Guid.Parse("4DBA7B39-D23E-493A-9B8F-B94D181A082F") } }; networkLink = new NetworkLinkDTO { Id = Guid.Parse("4DBA7B39-D23E-493A-9B8F-B94D181A082F"), TOID = "osgb4000000023358315", NetworkLinkType_GUID = Guid.Parse("09CE57B1-AF13-4F8E-B4AF-1DE35B4A68A8"), LinkGeometry = DbGeometry.LineFromText("LINESTRING (488952 197048, 488895 197018, 488888 197014, 488880 197008)", 27700) }; SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory); SqlGeometry networkIntersectionPoint = SqlGeometry.Null; List <SqlGeometry> lstnetworkIntersectionPoint = new List <SqlGeometry>(); try { networkIntersectionPoint = accessLinkDTO[0].OperationalObjectPoint.ToSqlGeometry().ShortestLineTo(networkLink.LinkGeometry.ToSqlGeometry()).STEndPoint(); lstnetworkIntersectionPoint.Add(networkIntersectionPoint); } catch (Exception) { } Tuple <NetworkLinkDTO, SqlGeometry> tuple = new Tuple <NetworkLinkDTO, SqlGeometry>(networkLink, networkIntersectionPoint); List <Tuple <NetworkLinkDTO, SqlGeometry> > tuple1 = new List <Tuple <NetworkLinkDTO, SqlGeometry> > { new Tuple <NetworkLinkDTO, SqlGeometry>(networkLink, networkIntersectionPoint) }; List <ReferenceDataCategoryDTO> refDataCategotyDTO = new List <ReferenceDataCategoryDTO>() { new ReferenceDataCategoryDTO() { CategoryName = ReferenceDataCategoryNames.AccessLinkType, ReferenceDatas = new List <ReferenceDataDTO>() { new ReferenceDataDTO() { ReferenceDataName = null, ReferenceDataValue = ReferenceDataValues.AccessLinkTypeDefault, ID = Guid.Parse("4DBA7B39-D23E-493A-9B8F-B94D181A082F") }, new ReferenceDataDTO() { ReferenceDataName = null, ReferenceDataValue = ReferenceDataValues.UserDefined, ID = Guid.Parse("DA8F1A91-2E2B-4EEF-9A81-9B18A917CBF1") } } }, new ReferenceDataCategoryDTO() { CategoryName = ReferenceDataCategoryNames.AccessLinkDirection, ReferenceDatas = new List <ReferenceDataDTO>() { new ReferenceDataDTO() { ReferenceDataName = null, ReferenceDataValue = ReferenceDataValues.AccessLinkDirectionBoth, ID = Guid.Parse("5DBA7B39-D23E-493A-9B8F-B94D181A082F") } } }, new ReferenceDataCategoryDTO() { CategoryName = ReferenceDataCategoryNames.AccessLinkStatus, ReferenceDatas = new List <ReferenceDataDTO>() { new ReferenceDataDTO() { ReferenceDataName = null, ReferenceDataValue = ReferenceDataValues.AccessLinkStatusLive, ID = Guid.Parse("6DBA7B39-D23E-493A-9B8F-B94D181A082F") }, new ReferenceDataDTO() { ReferenceDataName = null, ReferenceDataValue = ReferenceDataValues.AccessLinkStatusDraftPendingApproval, ID = Guid.Parse("7DBA7B39-D23E-493A-9B8F-B94D181A082F") }, new ReferenceDataDTO() { ReferenceDataName = null, ReferenceDataValue = ReferenceDataValues.AccessLinkStatusDraftPendingReview, ID = Guid.Parse("7B90B2F9-F62F-E711-8735-28D244AEF9ED") } } }, new ReferenceDataCategoryDTO() { CategoryName = ReferenceDataCategoryNames.OperationalObjectType, ReferenceDatas = new List <ReferenceDataDTO>() { new ReferenceDataDTO() { ReferenceDataName = ReferenceDataValues.OperationalObjectTypeDP, ReferenceDataValue = ReferenceDataValues.OperationalObjectTypeDP, ID = Guid.Parse("415c9129-0615-457e-98b7-3a60436320c5") } } }, new ReferenceDataCategoryDTO() { CategoryName = ReferenceDataCategoryNames.AccessLinkParameters, ReferenceDatas = new List <ReferenceDataDTO>() { new ReferenceDataDTO() { ReferenceDataName = ReferenceDataValues.AccessLinkSameRoadMaxDistance, ReferenceDataValue = "25", ID = Guid.Parse("9DBA7B39-D23E-493A-9B8F-B94D181A082F") }, new ReferenceDataDTO() { ReferenceDataName = ReferenceDataValues.AccessLinkDiffRoadMaxDistance, ReferenceDataValue = "1", ID = Guid.Parse("3DBA7B39-D23E-493A-9B8F-B94D181A081F") }, } }, new ReferenceDataCategoryDTO() { CategoryName = ReferenceDataCategoryNames.NetworkLinkType, ReferenceDatas = new List <ReferenceDataDTO>() { new ReferenceDataDTO() { ReferenceDataName = ReferenceDataValues.AccessLinkDiffRoadMaxDistance, ReferenceDataValue = "Road Link", ID = Guid.Parse("09ce57b1-af13-4f8e-b4af-1de35b4a68a8") } } }, new ReferenceDataCategoryDTO() { CategoryName = ReferenceDataCategoryNames.AccessLinkParameters, ReferenceDatas = new List <ReferenceDataDTO>() { new ReferenceDataDTO() { ReferenceDataName = "Local Road", ReferenceDataValue = "1", ID = Guid.Parse("4DBA7B35-D23E-493A-9B8F-B94D181A082F") } } }, new ReferenceDataCategoryDTO() { CategoryName = ReferenceDataCategoryNames.DeliveryPointUseIndicator, ReferenceDatas = new List <ReferenceDataDTO>() { new ReferenceDataDTO() { ReferenceDataName = "DeliveryPointUseIndicator", ReferenceDataValue = "Residential", ID = Guid.Parse("178edcad-9431-e711-83ec-28d244aef9ed") } } }, }; loggingHelperMock = CreateMock <ILoggingHelper>(); // Setup Methods. mockaccessLinkDataService = new Mock <IAccessLinkDataService>(); mockAccessLinkIntegrationService = CreateMock <IAccessLinkIntegrationService>(); mockaccessLinkDataService.Setup(x => x.GetAccessLinks(It.IsAny <string>(), It.IsAny <Guid>())).Returns(It.IsAny <List <AccessLinkDataDTO> >); mockaccessLinkDataService.Setup(x => x.GetAccessLinksCrossingOperationalObject(It.IsAny <string>(), It.IsAny <DbGeometry>())).Returns(default(bool)); mockaccessLinkDataService.Setup(x => x.DeleteAccessLink(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <Guid>())).ReturnsAsync(true); mockAccessLinkIntegrationService.Setup(x => x.GetReferenceDataNameValuePairs(It.IsAny <List <string> >())).ReturnsAsync(new List <ReferenceDataCategoryDTO>() { }); mockAccessLinkIntegrationService.Setup(x => x.GetReferenceDataSimpleLists(It.IsAny <List <string> >())).ReturnsAsync(refDataCategotyDTO); mockAccessLinkIntegrationService.Setup(x => x.GetDeliveryPoint(It.IsAny <Guid>())).ReturnsAsync(deliveryPointDTO); mockAccessLinkIntegrationService.Setup(x => x.GetNearestNamedRoad(It.IsAny <DbGeometry>(), It.IsAny <string>())).ReturnsAsync(tuple); mockAccessLinkIntegrationService.Setup(x => x.GetNearestSegment(It.IsAny <DbGeometry>())).ReturnsAsync(tuple1); mockAccessLinkIntegrationService.Setup(x => x.GetOSRoadLink(It.IsAny <string>())).ReturnsAsync("Local Road"); mockAccessLinkIntegrationService.Setup(x => x.GetCrossingNetworkLinks(It.IsAny <string>(), It.IsAny <DbGeometry>())).ReturnsAsync(new List <NetworkLinkDTO>() { }); mockAccessLinkIntegrationService.Setup(x => x.GetDeliveryPointsCrossingOperationalObject(It.IsAny <string>(), It.IsAny <DbGeometry>())).ReturnsAsync(new List <DeliveryPointDTO>() { }); mockAccessLinkIntegrationService.Setup(x => x.GetNetworkLink(It.IsAny <Guid>())).ReturnsAsync(networkLink); mockaccessLinkDataService.Setup(x => x.CreateAccessLink(It.IsAny <AccessLinkDataDTO>())).Returns(true); var rmTraceManagerMock = new Mock <IRMTraceManager>(); rmTraceManagerMock.Setup(x => x.StartTrace(It.IsAny <string>(), It.IsAny <Guid>())); loggingHelperMock.Setup(x => x.RMTraceManager).Returns(rmTraceManagerMock.Object); testCandidate = new AccessLinkBusinessService(mockaccessLinkDataService.Object, loggingHelperMock.Object, mockAccessLinkIntegrationService.Object); }