Exemple #1
0
        /// <summary>
        /// Get the generated tile for the request
        /// </summary>
        protected async Task <FileResult> GetGeneratedTile(Guid projectUid, Guid?filterUid, Guid?cutFillDesignUid, Guid?baseUid, Guid?topUid, VolumeCalcType?volumeCalcType,
                                                           TileOverlayType[] overlays, int width, int height, string bbox, MapType?mapType, DisplayMode?mode, string language, bool adjustBoundingBox, bool explicitFilters = false)
        {
            var overlayTypes = overlays.ToList();

            if (overlays.Contains(TileOverlayType.AllOverlays))
            {
                overlayTypes = new List <TileOverlayType>((TileOverlayType[])Enum.GetValues(typeof(TileOverlayType)));
                overlayTypes.Remove(TileOverlayType.AllOverlays);
                //TODO: AllOverlays means for 3D so remove 2D overlay. Rename overlay type better to reflect this. Also may need a '2D all overlays' in future.
                overlayTypes.Remove(TileOverlayType.LoadDumpData);
            }

            var project  = await((TilePrincipal)User).GetProject(projectUid);
            var dxfFiles = overlayTypes.Contains(TileOverlayType.DxfLinework)
        ? await GetFilesOfType(projectUid, ImportedFileType.Linework)
        : new List <FileData>();

            var haveFilter           = filterUid.HasValue || baseUid.HasValue || topUid.HasValue;
            var customFilterBoundary = haveFilter && overlayTypes.Contains(TileOverlayType.FilterCustomBoundary)
        ? (await productivity3DProxyCompactionTile.GetFilterPointsList(projectUid, filterUid, baseUid, topUid, FilterBoundaryType.Polygon, CustomHeaders)).PointsList
        : new List <List <WGSPoint> >();
            var designFilterBoundary = haveFilter && overlayTypes.Contains(TileOverlayType.FilterDesignBoundary)
        ? (await productivity3DProxyCompactionTile.GetFilterPointsList(projectUid, filterUid, baseUid, topUid, FilterBoundaryType.Design, CustomHeaders)).PointsList
        : new List <List <WGSPoint> >();
            var alignmentFilterBoundary = haveFilter && overlayTypes.Contains(TileOverlayType.FilterAlignmentBoundary)
        ? (await productivity3DProxyCompactionTile.GetFilterPointsList(projectUid, filterUid, baseUid, topUid, FilterBoundaryType.Alignment, CustomHeaders)).PointsList
        : new List <List <WGSPoint> >();
            var designUid = !volumeCalcType.HasValue || volumeCalcType == VolumeCalcType.None ||
                            volumeCalcType == VolumeCalcType.GroundToGround
        ? cutFillDesignUid
        : (volumeCalcType == VolumeCalcType.DesignToGround ? baseUid : topUid);
            var designBoundary = designUid.HasValue && overlayTypes.Contains(TileOverlayType.CutFillDesignBoundary)
        ? (await productivity3DProxyCompactionTile.GetDesignBoundaryPoints(projectUid, designUid.Value, CustomHeaders)).PointsList
        : new List <List <WGSPoint> >();
            var alignmentPoints = overlayTypes.Contains(TileOverlayType.Alignments)
        ? (await productivity3DProxyCompactionTile.GetAlignmentPointsList(projectUid, CustomHeaders)).PointsList
        : new List <List <WGSPoint> >();

            language = string.IsNullOrEmpty(language) ? (await GetShortCachedUserPreferences()).Language : language;
            ////var geofences = overlayTypes.Contains(TileOverlayType.Geofences)
            ////  ? await geofenceProxy.GetGeofences(GetCustomerUid, CustomHeaders)
            ////  : new List<GeofenceData>();
            var geofences = new List <GeofenceData>();

            if (string.IsNullOrEmpty(bbox))
            {
                bbox = await productivity3DProxyCompactionTile.GetBoundingBox(projectUid, overlays, filterUid, cutFillDesignUid, baseUid, topUid,
                                                                              volumeCalcType, CustomHeaders);
            }

            var mapParameters = tileGenerator.GetMapParameters(bbox, width, height, overlayTypes.Contains(TileOverlayType.ProjectBoundary), adjustBoundingBox);

            var request = TileGenerationRequest.CreateTileGenerationRequest(filterUid, baseUid, topUid,
                                                                            cutFillDesignUid, volumeCalcType, geofences, alignmentPoints, customFilterBoundary,
                                                                            designFilterBoundary, alignmentFilterBoundary, designBoundary, dxfFiles, overlayTypes,
                                                                            width, height, mapType, mode, language, project, mapParameters, CustomHeaders, null, explicitFilters);

            request.Validate();

            var byteResult = await WithServiceExceptionTryExecuteAsync(() =>
                                                                       tileGenerator.GetMapData(request));

            return(new FileStreamResult(new MemoryStream(byteResult), ContentTypeConstants.ImagePng));
        }