public void Test_TAGProcessorStateBase_PopulateConvertedBladeAndRearTypePositions() { var state = new TAGProcessorStateBase(); UTMCoordPointPair pair = UTMCoordPointPair.Null; pair.Left.X = 10; pair.Right.X = 10; List <UTMCoordPointPair> list1 = new List <UTMCoordPointPair>() { pair, pair, pair, pair }; List <UTMCoordPointPair> list2 = new List <UTMCoordPointPair>() { pair, pair, pair, pair }; List <UTMCoordPointPair> list3 = new List <UTMCoordPointPair>() { pair, pair, pair, pair }; List <UTMCoordPointPair> list4 = new List <UTMCoordPointPair>() { pair, pair, pair, pair }; state.PopulateConvertedBladeAndRearTypePositions(list1, list2, list3, list4); Assert.True(state.ConvertedBladePositions.Count == 4 && state.ConvertedRearAxlePositions.Count == 4 && state.ConvertedTrackPositions.Count == 4 && state.ConvertedWheelPositions.Count == 4, "UTM point pairs not assigned to converted position arrays"); }
public void Test_UTMCoordPointPair_Creation_Specific() { UTMCoordPointPair ptPair = new UTMCoordPointPair(new XYZ(1, 2, 3), new XYZ(4, 5, 6), 7); Assert.True(ptPair.Left.X == 1 && ptPair.Left.Y == 2 && ptPair.Left.Z == 3 && ptPair.Right.X == 4 && ptPair.Right.Y == 5 && ptPair.Right.Z == 6 && ptPair.UTMZone == 7, "Point pair not constructed as expected"); }
public void Test_UTMCoordPointPair_Creation_Null() { UTMCoordPointPair ptPair = UTMCoordPointPair.Null; Assert.True(ptPair.Left.X == Consts.NullDouble && ptPair.Left.Y == Consts.NullDouble && ptPair.Left.Z == Consts.NullDouble && ptPair.Right.X == Consts.NullDouble && ptPair.Right.Y == Consts.NullDouble && ptPair.Right.Z == Consts.NullDouble && ptPair.UTMZone == byte.MaxValue, "Point pair not constructed as expected"); }
private bool ValidPositionsforPair(UTMCoordPointPair uTMCoordPointPair) { return(!(uTMCoordPointPair.Left.X == Consts.NullReal || uTMCoordPointPair.Left.Y == Consts.NullReal || uTMCoordPointPair.Right.X == Consts.NullReal || uTMCoordPointPair.Right.Y == Consts.NullReal)); }
public List <UTMCoordPointPair> TranslatePositions(Guid?targetProjectUid, List <UTMCoordPointPair> coordPositions) { // done here so it can be mocked in unit tests without a coordinate system var projectCSIBFile = GetTargetSiteModelCSIB(targetProjectUid); if (projectCSIBFile == string.Empty) { _log.LogError($"TranslatePositions. Missing project CSIB file."); return(null); } if (coordPositions == null || coordPositions.Count == 0) { return(coordPositions); // nothing todo } try { var coreXWrapper = DIContext.Obtain <ICoreXWrapper>(); if (coreXWrapper == null) { _log.LogError("TranslatePositions. IConvertCoordinates not implemented"); return(null); } byte currentUTMZone = 0; var currentUTMCSIBFile = string.Empty; for (var i = 0; i < coordPositions.Count; i++) { if (coordPositions[i].UTMZone != currentUTMZone || currentUTMCSIBFile == string.Empty) { currentUTMZone = coordPositions[i].UTMZone; var zone = UTMZoneHelper.GetZoneDetailsFromUTMZone(currentUTMZone); currentUTMCSIBFile = coreXWrapper.GetCSIBFromCSDSelection(zone.zoneGroup, zone.zoneName); _log.LogTrace($"Setup UTM files for Zone:{currentUTMZone}, Group:{zone.zoneGroup}, Name:{zone.zoneName}, CSIB:{currentUTMCSIBFile}"); } if (ValidPositionsforPair(coordPositions[i])) { // convert left point to WGS84 LL point var leftLLPoint = coreXWrapper.NEEToLLH(currentUTMCSIBFile, coordPositions[i].Left.ToCoreX_XYZ()).ToTRex_XYZ(); if (leftLLPoint.IsZeroed()) { // CoreX functions can fail silentlty and return a zeroed XYZ. For conversions to Lat Long Elev we can safely check to make sure there is has been a successful conversion _log.LogError($"TranslatePositions. Failed NEEToLLH conversion for ACS coordinates LeftPoint:{leftLLPoint}"); return(null); } // convert left WGS84 LL point to project NNE var leftNNEPoint = coreXWrapper.LLHToNEE(projectCSIBFile, leftLLPoint.ToCoreX_XYZ(), CoreX.Types.InputAs.Radians).ToTRex_XYZ(); // convert right point to WGS84 LL point var rightLLPoint = coreXWrapper.NEEToLLH(currentUTMCSIBFile, coordPositions[i].Right.ToCoreX_XYZ()).ToTRex_XYZ(); if (rightLLPoint.IsZeroed()) { _log.LogError($"TranslatePositions. Failed NEEToLLH conversion for ACS coordinates. RightPoint:{rightLLPoint}"); return(null); } // convert right WGS84 LL point to project NNE var rightNNEPoint = coreXWrapper.LLHToNEE(projectCSIBFile, rightLLPoint.ToCoreX_XYZ(), CoreX.Types.InputAs.Radians).ToTRex_XYZ(); coordPositions[i] = new UTMCoordPointPair(leftNNEPoint, rightNNEPoint, currentUTMZone); } } } catch (Exception ex) { _log.LogError(ex, $"Exception occurred while converting ACS coordinates. {ex.Message}"); return(null); } return(coordPositions); }