/// <summary> /// Get the generated tile for the request. Used for geofence thumbnails. /// </summary> protected async Task <FileResult> GetGeneratedTile(GeofenceData geofence, TileOverlayType[] overlays, int width, int height, string bbox, MapType?mapType, string language, bool adjustBoundingBox) { var byteResult = await tileCache.GetOrCreateAsync <byte[]>(geofence.GeofenceUID, async entry => { entry.SlidingExpiration = tileCacheExpiration; var overlayTypes = overlays.ToList(); language = string.IsNullOrEmpty(language) ? (await GetShortCachedUserPreferences()).Language : language; var geofences = new List <GeofenceData> { geofence }; var mapParameters = tileGenerator.GetMapParameters(bbox, width, height, overlayTypes.Contains(TileOverlayType.GeofenceBoundary), adjustBoundingBox); var request = TileGenerationRequest.CreateTileGenerationRequest(null, null, null, null, null, geofences, null, null, null, null, null, null, overlayTypes, width, height, mapType, null, language, null, mapParameters, CustomHeaders, null); request.Validate(); Log.LogDebug("The tile doesn't exist in cache - generating it"); return(await WithServiceExceptionTryExecuteAsync(() => tileGenerator.GetMapData(request))); }); return(new FileStreamResult(new MemoryStream(byteResult), ContentTypeConstants.ImagePng)); }
/// <summary> /// Get the generated tile for the request. Used for raw geofence thumbnails where the boundaries have come from a DXF file. /// </summary> protected async Task <FileResult> GetGeneratedTile(List <WGSPoint> geofencePoints, TileOverlayType[] overlays, int width, int height, string bbox, MapType?mapType, string language, bool adjustBoundingBox) { var overlayTypes = overlays.ToList(); language = string.IsNullOrEmpty(language) ? (await GetShortCachedUserPreferences()).Language : language; var mapParameters = tileGenerator.GetMapParameters(bbox, width, height, overlayTypes.Contains(TileOverlayType.GeofenceBoundary), adjustBoundingBox); var request = TileGenerationRequest.CreateTileGenerationRequest(null, null, null, null, null, null, null, null, null, null, null, null, overlayTypes, width, height, mapType, null, language, null, mapParameters, CustomHeaders, geofencePoints); request.Validate(); var byteResult = await WithServiceExceptionTryExecuteAsync(() => tileGenerator.GetMapData(request)); return(new FileStreamResult(new MemoryStream(byteResult), ContentTypeConstants.ImagePng)); }
/// <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)); }