/// <summary> /// Creates a species observation CSV file and stores it on the server in the /// Temp/Export/ folder. /// This can be used in workflow scenarios. /// /// </summary> /// <returns>JSON data with information about the URL to the generated file.</returns> public JsonNetResult SpeciesObservationGridAsCsvStoreFileOnServer() { JsonModel jsonModel; SpeciesObservationGridCalculator resultCalculator = null; SpeciesObservationGridResult result = null; try { IUserContext currentUser = GetCurrentUser(); if (currentUser.IsAuthenticated() && !currentUser.IsCurrentRolePrivatePerson()) { throw new Exception(Resource.ResultWorkflowCurrentRoleIsNotPrivatePerson); } resultCalculator = new SpeciesObservationGridCalculator(currentUser, SessionHandler.MySettings); result = resultCalculator.GetSpeciesObservationGridResultFromCacheIfAvailableOrElseCalculate(); string filename = FileExportManager.CreateSpeciesObservationGridAsCsvAndStoreOnServer(currentUser, result); string url = FileSystemManager.ExportFolderUrl + filename; jsonModel = JsonModel.CreateFromObject(url); } catch (Exception ex) { jsonModel = JsonModel.CreateFailure(ex.Message); } return(new JsonNetResult(jsonModel)); }
public override void Execute() { System.Diagnostics.Debug.WriteLine("CalculateDefaultGridCellObservationsTask started"); IUserContext userContext = CoreData.UserManager.GetCurrentUser(); MySettings.MySettings mySettings = new MySettings.MySettings(); SpeciesObservationGridCalculator resultCalculator = new SpeciesObservationGridCalculator(userContext, mySettings); SpeciesObservationGridResult result = resultCalculator.CalculateSpeciesObservationGridResult(mySettings); DefaultResultsManager.AddGridCellObservations(result); System.Diagnostics.Debug.WriteLine("CalculateDefaultGridCellObservationsTask finished"); }
/// <summary> /// Generates a CSV file with grid based counts of number of species observations for each selected taxon. /// </summary> /// <param name="filename"> /// The filename (without file extension). /// </param> /// <param name="convertCountToOccurrenceBoolean"> /// If set to <c>true</c> the observation count will be written as 1 if the count > 0 and 0 if count = 0; /// If set to <c>false</c> the observation count will be written. /// </param> /// <returns> /// A CSV file. /// </returns> private FileResult TaxonSpecificGridStatisticsOnSpeciesObservationCountsAsCsv(string filename, bool convertCountToOccurrenceBoolean) { SpeciesObservationGridCalculator resultCalculator = new SpeciesObservationGridCalculator(GetCurrentUser(), SessionHandler.MySettings); TaxonSpecificGridSpeciesObservationCountResult result = resultCalculator.CalculateMultipleSpeciesObservationGrid(); TaxonSpecificSpeciesObservationCountGridCsv file = FileExportManager.GetTaxonSpecificGridStatisticsOnSpeciesObservationCountsAsCsv(result, convertCountToOccurrenceBoolean); MemoryStream returnStream = file.ToStream(); SetServerDone(); return(File( returnStream.ToArray(), "text/csv", FilenameGenerator.CreateFilename(filename, FileType.Csv))); }
/// <summary> /// Constructor of an excel xml file with grid statistics on species observation counts. /// </summary> /// <param name="currentUser">Current user context.</param> /// <param name="coordinateSystem">Coordinate system of the transformated coordinates.</param> /// <param name="addSettings">True if settings sheet should be included</param> /// <param name="addProvenance">True if provenance sheet should be included.</param> public GridStatisticsOnSpeciesObservationCountExcelXml(IUserContext currentUser, CoordinateSystemId coordinateSystem, bool addSettings, bool addProvenance) : base() { var resultCalculator = new SpeciesObservationGridCalculator(currentUser, SessionHandler.MySettings); var data = resultCalculator.GetSpeciesObservationGridResultFromCacheIfAvailableOrElseCalculate(); _xmlBuilder = new StringBuilder(); //Add file definitions and basic format settings _xmlBuilder.AppendLine(base.GetInitialSection()); //Specify column and row counts _xmlBuilder.AppendLine(base.GetColumnInitialSection(7, data.Cells.Count)); //Specify column widths _xmlBuilder.AppendLine(base.GetColumnWidthLine(200)); _xmlBuilder.AppendLine(base.GetColumnWidthLine(90)); _xmlBuilder.AppendLine(base.GetColumnWidthLine(150)); _xmlBuilder.AppendLine(base.GetColumnWidthLine(150)); _xmlBuilder.AppendLine(base.GetColumnWidthLine(170)); _xmlBuilder.AppendLine(base.GetColumnWidthLine(170)); _xmlBuilder.AppendLine(base.GetColumnWidthLine(170)); //Add row with column headers _xmlBuilder.AppendLine(base.GetRowStart()); _xmlBuilder.AppendLine(base.GetColumnNameRowLine("Id")); _xmlBuilder.AppendLine(base.GetColumnNameRowLine(Resource.GridStatisticsObservationCount)); _xmlBuilder.AppendLine(base.GetColumnNameRowLine(String.Format("Centre coordinate X ({0})", data.GridCellCoordinateSystem))); _xmlBuilder.AppendLine(base.GetColumnNameRowLine(String.Format("Centre coordinate Y ({0})", data.GridCellCoordinateSystem))); _xmlBuilder.AppendLine(base.GetColumnNameRowLine(String.Format("Centre coordinate X ({0})", coordinateSystem.ToString()))); _xmlBuilder.AppendLine(base.GetColumnNameRowLine(String.Format("Centre coordinate Y ({0})", coordinateSystem.ToString()))); _xmlBuilder.AppendLine(base.GetColumnNameRowLine("Grid cell width (metres)")); _xmlBuilder.AppendLine(base.GetRowEnd()); //Data values foreach (SpeciesObservationGridCellResult row in data.Cells) { _xmlBuilder.AppendLine(base.GetRowStart()); _xmlBuilder.AppendLine(base.GetDataRowLine("String", row.Identifier)); _xmlBuilder.AppendLine(base.GetDataRowLine("Number", row.ObservationCount.ToString())); _xmlBuilder.AppendLine(base.GetDataRowLine("Number", row.OriginalCentreCoordinateX.ToString())); _xmlBuilder.AppendLine(base.GetDataRowLine("Number", row.OriginalCentreCoordinateY.ToString())); _xmlBuilder.AppendLine(base.GetDataRowLine("Number", row.CentreCoordinateX.ToString(base.GetApprotiateGlobalization()))); _xmlBuilder.AppendLine(base.GetDataRowLine("Number", row.CentreCoordinateY.ToString(base.GetApprotiateGlobalization()))); _xmlBuilder.AppendLine(base.GetDataRowLine("Number", data.GridCellSize.ToString())); _xmlBuilder.AppendLine(base.GetRowEnd()); } // Add final section of the xml document. _xmlBuilder.AppendLine(GetFinalSection(GetAditionalSheets(currentUser, addSettings, addProvenance))); }
/// <summary> /// Generates an GeoJson (.geojson) file with grid statistics on species observation counts. /// </summary> /// <returns>A .geojson file.</returns> public FileResult GridStatisticsOnSpeciesObservationCountsAsGeoJson() { SpeciesObservationGridCalculator resultCalculator = null; string geojson = null; CalculatedDataItem <FeatureCollection> result; resultCalculator = new SpeciesObservationGridCalculator(GetCurrentUser(), SessionHandler.MySettings); geojson = resultCalculator.GetSpeciesObservationGridAsGeoJson(); SetServerDone(); byte[] bytes = System.Text.Encoding.UTF8.GetBytes(geojson); return(File( bytes, "application/json", FilenameGenerator.CreateFilename("SpeciesObservationCountsGrid", FileType.GeoJSON))); }
/// <summary> /// Creates an excel file. /// Writes the content of a list into a worksheet of an excelfile and save the file. /// </summary> /// <param name="autosizeColumnWidth"> /// If true, the columns will be autosized. /// </param> /// <returns> /// The <see cref="MemoryStream"/>. /// </returns> private MemoryStream CreateExcelFile(bool autosizeColumnWidth = false) { var memoryStream = new MemoryStream(); try { using (ExcelPackage package = new ExcelPackage(memoryStream)) { var resultCalculator = new SpeciesObservationGridCalculator(currentUser, SessionHandler.MySettings); var data = resultCalculator.CalculateMultipleSpeciesObservationGrid(); // Add a new worksheet to the empty workbook. // The name of the sheet can not be longer than 31 characters. var worksheet = package.Workbook.Worksheets.Add("SLW Data"); AddHeaders(worksheet, data); AddContentData(worksheet, data); AddContentFormat(worksheet, data); if (autosizeColumnWidth) { worksheet.Cells.AutoFitColumns(0); } //Add aditional sheets if user has request that AddAditionalSheets(package); package.Save(); } memoryStream.Position = 0; return(memoryStream); } catch (Exception) { memoryStream.Dispose(); throw; } }
public static string GetLayerGeojson( IUserContext currentUser, int layerId, CoordinateSystemId coordinateSystemId, IDictionary <string, object> parameters, out string layerName, MapExportModel.Extent mapExtent) { string geoJson = null; layerName = null; if (layerId == null) { return(null); } if (layerId >= CustomLayersStartLayerId) { var viewManager = new WfsLayersViewManager(currentUser, SessionHandler.MySettings); var layer = viewManager.GetWfsLayers().FirstOrDefault(l => l.Id == layerId); layerName = layer.Name; if (layer.IsFile) { geoJson = JsonConvert.SerializeObject(MySettingsManager.GetMapDataFeatureCollection(currentUser, layer.GeometryName, coordinateSystemId)); } else { var url = WFSFilterUtils.GetResultingUrl(layer.ServerUrl, layer.TypeName, "1.1.0", layer.Filter, "application%2Fjson", null, string.Format("EPSG%3A{0}", coordinateSystemId.Srid())); var request = WebRequest.Create(url); request.Credentials = CredentialCache.DefaultCredentials; // Get the response. using (var response = request.GetResponse()) { using (var dataStream = response.GetResponseStream()) { using (var reader = new StreamReader(dataStream)) { geoJson = reader.ReadToEnd(); reader.Close(); } } response.Close(); } } } else { switch (layerId) { case SpeciesRichnessGridLayerId: var taxonGridCalculator = new TaxonGridCalculator(currentUser, SessionHandler.MySettings); geoJson = taxonGridCalculator.GetTaxonGridAsGeoJson(); var attribute = (string)(parameters.ContainsKey("attribute") ? parameters["attribute"] : null); layerName = Resource.ResultViewSpeciesRichnessGridMapLayerName; if (attribute != null) { switch (attribute.ToLower().Trim()) { case "speciescount": layerName = Resource.ResultDownloadSpeciesRichnessGridMap; break; case "observationcount": layerName = Resource.ResultDownloadObservationsGridMap; break; } } break; case SpeciesObservationGridMapLayerId: case EooConvexHullLayerId: case EooConcaveHullLayerId: var speciesObservationGridCalculator = new SpeciesObservationGridCalculator(currentUser, SessionHandler.MySettings); if (layerId == SpeciesObservationGridMapLayerId) { geoJson = speciesObservationGridCalculator.GetSpeciesObservationGridAsGeoJson(); layerName = Resource.ResultViewSpeciesObservationGridMap; } else { var alphaValue = (int?)(parameters.ContainsKey("alphaValue") ? parameters["alphaValue"] : null); var useCenterPoint = (bool?)(parameters.ContainsKey("useCenterPoint") ? parameters["useCenterPoint"] : null); geoJson = speciesObservationGridCalculator.GetSpeciesObservationAOOEOOAsGeoJson( layerId == EooConcaveHullLayerId ? alphaValue : 0, useCenterPoint ?? true); layerName = Resource.MapEOOLayer; } break; case ObservationsLayerId: //Observations case SpeciesObservationClusterPointMapLayerId: SpeciesObservationResultCalculator resultCalculator = null; try { var displayCoordinateSystemId = SessionHandler.MySettings.Presentation.Map.PresentationCoordinateSystemId; resultCalculator = new SpeciesObservationResultCalculator(currentUser, SessionHandler.MySettings); geoJson = resultCalculator.GetSpeciesObservationsAsGeoJson(displayCoordinateSystemId); layerName = Resource.MapLayerObservations; } catch (Exception) { } break; } } return(geoJson); }
/// <summary> /// Constructor of an excel xml file with multiple grid statistics on species observation counts. /// </summary> /// <param name="currentUser">The user context.</param> /// <param name="coordinateSystem"> /// Coordinate system of the transformated coordinates. /// </param> /// <param name="formatCountAsOccurrence"> /// If set to <c>true</c> the result cells will be set to 1 if there are any observations; otherwise 0. /// </param> /// <param name="addSettings">True if settings sheet should be included</param> /// <param name="addProvenance">True if provenance sheet should be included.</param> public TaxonSpecificGridStatisticsOnSpeciesObservationCountsExcelXml(IUserContext currentUser, CoordinateSystemId coordinateSystem, bool formatCountAsOccurrence, bool addSettings, bool addProvenance) : base() { var resultCalculator = new SpeciesObservationGridCalculator(currentUser, SessionHandler.MySettings); var data = resultCalculator.CalculateMultipleSpeciesObservationGrid(); _xmlBuilder = new StringBuilder(); int nrColumns = 6 + data.Taxa.Count; // Add file definitions and basic format settings. _xmlBuilder.AppendLine(base.GetInitialSection()); // Specify column and row counts. _xmlBuilder.AppendLine(base.GetColumnInitialSection(nrColumns, data.GridCells.Count)); // Specify column widths. _xmlBuilder.AppendLine(base.GetColumnWidthLine(200)); _xmlBuilder.AppendLine(base.GetColumnWidthLine(150)); _xmlBuilder.AppendLine(base.GetColumnWidthLine(150)); _xmlBuilder.AppendLine(base.GetColumnWidthLine(170)); _xmlBuilder.AppendLine(base.GetColumnWidthLine(170)); _xmlBuilder.AppendLine(base.GetColumnWidthLine(170)); for (int i = 0; i < data.Taxa.Count; i++) { _xmlBuilder.AppendLine(base.GetColumnWidthLine(140)); } string gridCoordinateSystemDescription = ""; if (data.GridCells.Count > 0) { gridCoordinateSystemDescription = data.GridCells.First().Key.GridCoordinateSystem.ToString(); } // Add row with column headers. _xmlBuilder.AppendLine(base.GetRowStart()); _xmlBuilder.AppendLine(base.GetColumnNameRowLine("Id")); _xmlBuilder.AppendLine(base.GetColumnNameRowLine(String.Format("Centre coordinate X ({0})", gridCoordinateSystemDescription))); _xmlBuilder.AppendLine(base.GetColumnNameRowLine(String.Format("Centre coordinate Y ({0})", gridCoordinateSystemDescription))); _xmlBuilder.AppendLine(base.GetColumnNameRowLine(String.Format("Centre coordinate X ({0})", coordinateSystem.ToString()))); _xmlBuilder.AppendLine(base.GetColumnNameRowLine(String.Format("Centre coordinate Y ({0})", coordinateSystem.ToString()))); _xmlBuilder.AppendLine(base.GetColumnNameRowLine("Grid cell width (metres)")); foreach (TaxonViewModel taxon in data.Taxa) { _xmlBuilder.AppendLine(base.GetColumnNameRowLine(string.Format("{0} (TaxonId {1})", taxon.ScientificName, taxon.TaxonId))); } _xmlBuilder.AppendLine(base.GetRowEnd()); // Data values. List <IGridCellBase> orderedGridCells = data.GridCells.Keys.OrderBy(x => x.Identifier).ToList(); foreach (IGridCellBase gridCell in orderedGridCells) { _xmlBuilder.AppendLine(base.GetRowStart()); _xmlBuilder.AppendLine(base.GetDataRowLine("String", gridCell.Identifier)); _xmlBuilder.AppendLine(base.GetDataRowLine("Number", gridCell.OrginalGridCellCentreCoordinate.X.ToString())); _xmlBuilder.AppendLine(base.GetDataRowLine("Number", gridCell.OrginalGridCellCentreCoordinate.Y.ToString())); _xmlBuilder.AppendLine(base.GetDataRowLine("Number", gridCell.GridCellCentreCoordinate.X.ToString(base.GetApprotiateGlobalization()))); _xmlBuilder.AppendLine(base.GetDataRowLine("Number", gridCell.GridCellCentreCoordinate.Y.ToString(base.GetApprotiateGlobalization()))); _xmlBuilder.AppendLine(base.GetDataRowLine("Number", gridCell.GridCellSize.ToString())); foreach (TaxonViewModel taxon in data.Taxa) { long nrObservations = 0; if (data.GridCells[gridCell].ContainsKey(taxon.TaxonId)) { nrObservations = data.GridCells[gridCell][taxon.TaxonId].ObservationCount; } if (formatCountAsOccurrence) { int binaryVal = nrObservations > 0 ? 1 : 0; _xmlBuilder.AppendLine(base.GetDataRowLine("Number", binaryVal.ToString(CultureInfo.InvariantCulture))); } else { _xmlBuilder.AppendLine(base.GetDataRowLine("Number", nrObservations.ToString(CultureInfo.InvariantCulture))); } } _xmlBuilder.AppendLine(base.GetRowEnd()); } // Add final section of the xml document. _xmlBuilder.AppendLine(GetFinalSection(GetAditionalSheets(currentUser, addSettings, addProvenance))); }