Example #1
0
        public async Task <CellPassesResponse> ExecuteAsync(CellPassesRequestArgument_ApplicationService arg)
        {
            var result = new CellPassesResponse()
            {
                ReturnCode = CellPassesReturnCode.Error
            };

            if (arg.Filters?.Filters != null && arg.Filters.Filters.Length > 0)
            {
                // Prepare the filters for use in cell passes operations. Failure to prepare any filter results in this request terminating
                if (!arg.Filters.Filters.Select(x => FilterUtilities.PrepareFilterForUse(x, arg.ProjectID)).All(x => x == RequestErrorStatus.OK))
                {
                    return(new CellPassesResponse {
                        ReturnCode = CellPassesReturnCode.FailedToPrepareFilter
                    });
                }
            }

            var siteModel = DIContext.Obtain <ISiteModels>().GetSiteModel(arg.ProjectID);

            if (siteModel == null)
            {
                _log.LogError($"Failed to locate site model {arg.ProjectID}");
                return(result);
            }

            if (!arg.CoordsAreGrid)
            {
                //WGS84 coords need to be converted to NEE
                var pointToConvert = new XYZ(arg.Point.X, arg.Point.Y, 0);
                arg.Point       = DIContext.Obtain <ICoreXWrapper>().LLHToNEE(siteModel.CSIB(), pointToConvert.ToCoreX_XYZ(), CoreX.Types.InputAs.Radians).ToTRex_XYZ();
                result.Northing = arg.Point.Y;
                result.Easting  = arg.Point.X;
            }

            var existenceMap = siteModel.ExistenceMap;

            // Determine the on-the-ground cell
            siteModel.Grid.CalculateIndexOfCellContainingPosition(arg.Point.X,
                                                                  arg.Point.Y,
                                                                  out var otgCellX,
                                                                  out var otgCellY);

            if (!existenceMap[otgCellX >> SubGridTreeConsts.SubGridIndexBitsPerLevel, otgCellY >> SubGridTreeConsts.SubGridIndexBitsPerLevel])
            {
                result.ReturnCode = CellPassesReturnCode.NoDataFound;
                return(result);
            }

            var computeArg      = new CellPassesRequestArgument_ClusterCompute(arg.ProjectID, arg.Point, otgCellX, otgCellY, arg.Filters);
            var requestCompute  = new CellPassesRequest_ClusterCompute();
            var affinityKey     = new SubGridSpatialAffinityKey(SubGridSpatialAffinityKey.DEFAULT_SPATIAL_AFFINITY_VERSION_NUMBER_TICKS, arg.ProjectID, otgCellX, otgCellY);
            var responseCompute = await requestCompute.ExecuteAsync(computeArg, affinityKey);

            result.ReturnCode = responseCompute.ReturnCode;
            result.CellPasses = responseCompute.CellPasses;

            return(result);
        }
Example #2
0
        public async Task Test_CellPassesRequest_ApplicationService_AreaFilter_NoDataFound()
        {
            var(request, filter, siteModelID) = BuildTestDataAndSetAreaFilter();

            var arg = new CellPassesRequestArgument_ApplicationService(siteModelID, true, new XYZ(1.1, 1.1, 0), filter);

            var response = await request.ExecuteAsync(arg);

            response.Should().NotBeNull();
            response.ReturnCode.Should().Be(CellPassesReturnCode.NoDataFound);
            response.CellPasses.Should().HaveCount(0);
        }
Example #3
0
        public void Test_CellPassesRequestArgument_ApplicationService_CreationWithArgs()
        {
            Guid       siteModelID   = Guid.NewGuid();
            bool       coordsAreGrid = false;
            XYZ        latLngPoint   = new XYZ(12345.6789, 98765.4321);
            IFilterSet filters       = new FilterSet();
            var        arg           = new CellPassesRequestArgument_ApplicationService(siteModelID, coordsAreGrid, latLngPoint, filters);

            arg.Should().NotBeNull();
            arg.ProjectID.Should().Be(siteModelID);
            arg.CoordsAreGrid.Should().Be(coordsAreGrid);
            arg.Point.Should().Be(latLngPoint);
            arg.Filters.Should().Be(filters);
        }
Example #4
0
        public async Task Test_CellPassesRequest_ApplicationService_ExecuteData()
        {
            AddApplicationGridRouting();
            AddClusterComputeGridRouting();

            var baseTime  = DateTime.UtcNow;
            var siteModel = BuildTestSiteModel(baseTime, count: expectedCount);

            var request = new CellPassesRequest_ApplicationService();

            var arg      = new CellPassesRequestArgument_ApplicationService(siteModel.ID, true, new XYZ(0.1, 0.1, 0), new FilterSet(new CombinedFilter()));
            var response = await request.ExecuteAsync(arg);

            response.Should().NotBeNull();
            response.ReturnCode.Should().Be(CellPassesReturnCode.DataFound);
            response.CellPasses.Count.Should().Be(expectedCount);

            for (var idx = 0; idx < expectedCount; idx++)
            {
                var mockModifier         = idx + 1;
                var expectedTime         = baseTime.AddMinutes(mockModifier);
                var expectedHeight       = 1.0f + mockModifier * 0.5f;
                var expectedCcv          = (short)(10 + 10 * mockModifier);
                var expectedMachineSpeed = (ushort)(650 + mockModifier);
                var expectedMdp          = (short)(20 + 20 * mockModifier);

                var cellPass = response.CellPasses[idx];
                cellPass.LastPassValidCCV.Should().Be(expectedCcv);
                cellPass.LastPassTime.Should().Be(expectedTime);
                cellPass.Height.Should().Be(expectedHeight);
                cellPass.MachineSpeed.Should().Be(expectedMachineSpeed);
                cellPass.LastPassValidMDP.Should().Be(expectedMdp);

                cellPass.GPSAccuracy.Should().Be(GPSAccuracy.Fine);
                cellPass.GPSTolerance.Should().Be(20);
            }
        }
Example #5
0
        public void Test_CellPassesRequestArgument_ApplicationService_Creation()
        {
            var arg = new CellPassesRequestArgument_ApplicationService();

            Assert.NotNull(arg);
        }