Exemple #1
0
        /// <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");
        }
Exemple #3
0
        /// <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)));
        }
Exemple #5
0
        /// <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)));
        }