Example #1
0
        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");
        }
Example #2
0
        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");
        }
Example #3
0
        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");
        }
Example #4
0
 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));
 }
Example #5
0
        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);
        }