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); }
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); }
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)}"); } }
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); }