public async Task <TileResult> GetProductionDataTile( [FromQuery] string service, [FromQuery] string version, [FromQuery] string request, [FromQuery] string format, [FromQuery] string transparent, [FromQuery] string layers, [FromQuery] string crs, [FromQuery] string styles, [FromQuery] ushort width, [FromQuery] ushort height, [FromQuery] string bbox, [FromQuery] Guid projectUid, [FromQuery] Guid?filterUid, [FromQuery] Guid?cutFillDesignUid, [FromQuery] DisplayMode mode, [FromQuery] Guid?volumeBaseUid, [FromQuery] Guid?volumeTopUid, [FromQuery] VolumeCalcType?volumeCalcType, [FromQuery] bool explicitFilters = false) { Log.LogDebug($"{nameof(GetProductionDataTile)}: " + Request.QueryString); var projectId = ((RaptorPrincipal)User).GetLegacyProjectId(projectUid); var projectSettings = GetProjectSettingsTargets(projectUid); var projectSettingsColors = GetProjectSettingsColors(projectUid); var filter = GetCompactionFilter(projectUid, filterUid); var cutFillDesign = GetAndValidateDesignDescriptor(projectUid, cutFillDesignUid); var sumVolParameters = GetSummaryVolumesParameters(projectUid, volumeCalcType, volumeBaseUid, volumeTopUid); await Task.WhenAll(projectId, projectSettings, projectSettingsColors, filter, cutFillDesign, sumVolParameters); return(await WithServiceExceptionTryExecuteAsync(() => tileService.GetProductionDataTile( projectSettings.Result, projectSettingsColors.Result, filter.Result, projectId.Result, projectUid, mode, width, height, boundingBoxHelper.GetBoundingBox(bbox), cutFillDesign.Result, sumVolParameters.Result.Item1, sumVolParameters.Result.Item2, sumVolParameters.Result.Item3, volumeCalcType, CustomHeaders, GetUserId(), explicitFilters))); }
/// <summary> /// Get the map parameters for the report tile /// </summary> public MapParameters GetMapParameters(string bbox, int width, int height, bool addMargin, bool adjustBoundingBox) { log.LogDebug($"GetMapParameters: bbox={bbox}, width={width}, height={height}, addMargin={addMargin}, adjustBoundingBox={adjustBoundingBox}"); var bboxRadians = boundingBoxHelper.GetBoundingBox(bbox); MapBoundingBox mapBox = new MapBoundingBox { minLat = bboxRadians.BottomLeftLat, minLng = bboxRadians.BottomLeftLon, maxLat = bboxRadians.TopRightLat, maxLng = bboxRadians.TopRightLon }; int zoomLevel = TileServiceUtils.CalculateZoomLevel(mapBox.maxLat - mapBox.minLat, mapBox.maxLng - mapBox.minLng); long numTiles = TileServiceUtils.NumberOfTiles(zoomLevel); MapParameters parameters = new MapParameters { bbox = mapBox, zoomLevel = zoomLevel, numTiles = numTiles, mapWidth = width, mapHeight = height, addMargin = addMargin }; if (adjustBoundingBox) { boundingBoxService.AdjustBoundingBoxToFit(parameters); } parameters.pixelTopLeft = TileServiceUtils.LatLngToPixel(mapBox.maxLat, mapBox.minLng, parameters.numTiles); log.LogDebug("MapParameters: " + JsonConvert.SerializeObject(parameters)); return(parameters); }
public async Task <TileResult> GetMapTileData( [FromQuery] Guid projectUid, [FromQuery] Guid?filterUid, [FromQuery] Guid?designUid, [FromQuery] Guid?cutfillDesignUid, [FromQuery] MapDisplayType type, [FromQuery] DisplayMode mode, [FromQuery] ushort width, [FromQuery] ushort height, [FromQuery] string bbox) { var projectId = ((RaptorPrincipal)User).GetLegacyProjectId(projectUid); var projectSettings = GetProjectSettingsTargets(projectUid); var filter = GetCompactionFilter(projectUid, filterUid); Task <CompactionProjectSettingsColors> projectSettingsColors; Task <DesignDescriptor> design = null; Task <DesignDescriptor> cutFillDesign = null; if (type == MapDisplayType.DesignMap) { design = GetAndValidateDesignDescriptor(projectUid, designUid); projectSettingsColors = GetGreyScaleHeightColors(); await Task.WhenAll(projectId, projectSettings, filter, design, projectSettingsColors); mode = DisplayMode.Design3D; } else if (type == MapDisplayType.HeightMap) { projectSettingsColors = GetGreyScaleHeightColors(); await Task.WhenAll(projectId, projectSettings, filter, projectSettingsColors); mode = DisplayMode.Height; // The height map must be of type height.... } else if (type == MapDisplayType.Texture) { // Only used in texture mode cutFillDesign = GetAndValidateDesignDescriptor(projectUid, cutfillDesignUid); projectSettingsColors = GetProjectSettingsColors(projectUid); await Task.WhenAll(projectId, projectSettings, filter, cutFillDesign, projectSettingsColors); } else { throw new NotImplementedException(); } var tileResult = await WithServiceExceptionTryExecuteAsync(() => tileService.GetProductionDataTile( projectSettings.Result, projectSettingsColors.Result, filter.Result, projectId.Result, projectUid, mode, width, height, boundingBoxHelper.GetBoundingBox(bbox), design?.Result ?? cutFillDesign?.Result, // If we have a design, it means we are asking for the design height map - otherwise we may have a cut fill design to determine the texture null, null, null, null, CustomHeaders, GetUserId(), false)); Response.Headers.Add("X-Warning", tileResult.TileOutsideProjectExtents.ToString()); return(tileResult); }