コード例 #1
0
        public async Task CalculateFromManuallyGeneratedSubGrid()
        {
            var siteModel = CreateSiteModelWithSingleCellForTesting();

            var executor = new ComputeStationOffsetReportExecutor_ClusterCompute
                               (new StationOffsetReportRequestArgument_ClusterCompute
            {
                ProjectID = siteModel.ID,
                Filters   = new FilterSet(new CombinedFilter()),
                Points    = new List <StationOffsetPoint> {
                    new StationOffsetPoint(0, 0, 0, 0)
                },
                ReportElevation   = true,
                ReportCmv         = true,
                ReportMdp         = true,
                ReportPassCount   = true,
                ReportTemperature = true
            });

            var result = await executor.ExecuteAsync();

            result.ResultStatus.Should().Be(RequestErrorStatus.OK);
            result.ReturnCode.Should().Be(ReportReturnCode.NoError);
            result.StationOffsetRows.Count.Should().Be(1);
            result.StationOffsetRows[0].Northing.Should().Be(0);
            result.StationOffsetRows[0].Easting.Should().Be(0);
            result.StationOffsetRows[0].Elevation.Should().Be(MINIMUM_HEIGHT);
            result.StationOffsetRows[0].CutFill.Should().Be(Consts.NullHeight);
            result.StationOffsetRows[0].Cmv.Should().Be(CCV_Test);
            result.StationOffsetRows[0].Mdp.Should().Be(MDP_Test);
            result.StationOffsetRows[0].PassCount.Should().Be(3);
            result.StationOffsetRows[0].Temperature.Should().Be((short)Temperature_Test);
        }
コード例 #2
0
        public async Task CalculateFromTAGFileDerivedModel_ShouldHaveNoPointValues()
        {
            var tagFiles  = Directory.GetFiles(Path.Combine("TestData", "TAGFiles", "ElevationMappingMode-KettlewellDrive"), "*.tag").ToArray();
            var siteModel = DITAGFileAndSubGridRequestsFixture.BuildModel(tagFiles, out var processedTasks);

            // Ask for a point that does not exist in the model the response should be a row with null values (???)
            var executor = new ComputeStationOffsetReportExecutor_ClusterCompute
                               (new StationOffsetReportRequestArgument_ClusterCompute
            {
                ProjectID = siteModel.ID,
                Filters   = new FilterSet(new CombinedFilter()),
                Points    = new List <StationOffsetPoint> {
                    new StationOffsetPoint(0, 0, 0, 0)
                },
                ReportElevation = true
            });

            var result = await executor.ExecuteAsync();

            result.ResultStatus.Should().Be(RequestErrorStatus.OK);
            result.ReturnCode.Should().Be(ReportReturnCode.NoError);
            result.StationOffsetRows.Count.Should().Be(1);
            result.StationOffsetRows[0].Northing.Should().Be(0);
            result.StationOffsetRows[0].Easting.Should().Be(0);
            result.StationOffsetRows[0].Elevation.Should().Be(Consts.NullHeight);
        }
コード例 #3
0
 public StationOffsetReportRequestResponse_ClusterCompute Invoke(StationOffsetReportRequestArgument_ClusterCompute arg)
 {
     _log.LogInformation($"Start {nameof(StationOffsetReportRequestResponse_ClusterCompute)}");
     try
     {
         var executor = new ComputeStationOffsetReportExecutor_ClusterCompute(arg);
         return(executor.ExecuteAsync().WaitAndUnwrapException());
     }
     catch (Exception e)
     {
         _log.LogError(e, $"{nameof(StationOffsetReportRequestResponse_ClusterCompute)}: Unexpected exception.");
         return(new StationOffsetReportRequestResponse_ClusterCompute {
             ResultStatus = RequestErrorStatus.Unknown, ReturnCode = ReportReturnCode.UnknownError
         });
     }
     finally
     {
         _log.LogInformation($"End {nameof(StationOffsetReportRequestResponse_ClusterCompute)}");
     }
 }
コード例 #4
0
        public async Task CalculateFromTAGFileDerivedModel()
        {
            var tagFiles  = Directory.GetFiles(Path.Combine("TestData", "TAGFiles", "ElevationMappingMode-KettlewellDrive"), "*.tag").ToArray();
            var siteModel = DITAGFileAndSubGridRequestsFixture.BuildModel(tagFiles, out var _);

            // For test purposes, create an imaginary 'road' that passes through at least 100 of the
            //  on-null cells in the site model, which also have passCount data
            var    points  = new List <StationOffsetPoint>();
            double station = 0;

            siteModel.ExistenceMap.ScanAllSetBitsAsSubGridAddresses(addr =>
            {
                if (points.Count > 100)
                {
                    return;
                }

                var subGrid = TRex.SubGridTrees.Server.Utilities.SubGridUtilities.LocateSubGridContaining(
                    siteModel.PrimaryStorageProxy, siteModel.Grid,
                    addr.X, addr.Y, siteModel.Grid.NumLevels, false, false);

                subGrid.CalculateWorldOrigin(out var originX, out var originY);

                ((IServerLeafSubGrid)subGrid).Directory.GlobalLatestCells.PassDataExistenceMap.ForEachSetBit(
                    (x, y) =>
                {
                    points.Add(new StationOffsetPoint(station += 1, 0,
                                                      originY + y * siteModel.CellSize + siteModel.CellSize / 2,
                                                      originX + x * siteModel.CellSize + siteModel.CellSize / 2));
                });
            });

            var executor = new ComputeStationOffsetReportExecutor_ClusterCompute
                               (new StationOffsetReportRequestArgument_ClusterCompute
            {
                ProjectID         = siteModel.ID,
                Filters           = new FilterSet(new CombinedFilter()),
                Points            = points,
                ReportElevation   = true,
                ReportCmv         = true,
                ReportMdp         = true,
                ReportPassCount   = true,
                ReportTemperature = true
            });

            var result = await executor.ExecuteAsync();

            result.ResultStatus.Should().Be(RequestErrorStatus.OK);
            result.ReturnCode.Should().Be(ReportReturnCode.NoError);
            result.StationOffsetRows.Count.Should().Be(points.Count);
            result.StationOffsetRows[0].Northing.Should().Be(808525.44000000006);
            result.StationOffsetRows[0].Easting.Should().Be(376730.88);
            result.StationOffsetRows[0].Elevation.Should().Be(68.630996704101562);// Mutable representation result ==> (68.6305160522461);
            result.StationOffsetRows[0].CutFill.Should().Be(Consts.NullHeight);
            result.StationOffsetRows[0].Cmv.Should().Be(CellPassConsts.NullCCV);
            result.StationOffsetRows[0].Mdp.Should().Be(CellPassConsts.NullMDP);
            result.StationOffsetRows[0].PassCount.Should().Be(1);
            result.StationOffsetRows[0].Temperature.Should().Be((short)CellPassConsts.NullMaterialTemperatureValue);

            result.StationOffsetRows.FirstOrDefault(x => x.CutFill != Consts.NullHeight).Should().Be(null);
            result.StationOffsetRows.FirstOrDefault(x => x.Cmv != CellPassConsts.NullCCV).Should().Be(null);
            result.StationOffsetRows.FirstOrDefault(x => x.Mdp != CellPassConsts.NullMDP).Should().Be(null);
            result.StationOffsetRows.FirstOrDefault(x => x.Temperature != (short)CellPassConsts.NullMaterialTemperatureValue).Should().Be(null);
        }