Ejemplo n.º 1
0
        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)));
        }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
        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);
        }