예제 #1
0
        private static CodeSummaryItem GetCodeSummaryHierarchy(CodeIds codeIds, Naturetypekodetre kodetre)
        {
            var r = new CodeSummaryItem();

            foreach (var codeId in codeIds)
            {
                var codeItem = kodetre.HentFraKode(codeId.Key);
                var codes    = r.Codes;
                foreach (var parentCodeItem in codeItem.ParentCodeItems)
                {
                    if (!codes.ContainsKey(parentCodeItem.Id))
                    {
                        var item = new CodeSummaryItem(parentCodeItem.Name, parentCodeItem.Url, 0);
                        foreach (var id in codeId.Value)
                        {
                            if (item.HandledIds.Contains(id))
                            {
                                continue;
                            }
                            item.Count++;
                            item.HandledIds.Add(id);
                        }
                        codes[parentCodeItem.Id] = item;
                    }
                    else
                    {
                        foreach (var id in codeId.Value)
                        {
                            if (codes[parentCodeItem.Id].HandledIds.Contains(id))
                            {
                                continue;
                            }
                            codes[parentCodeItem.Id].Count++;
                            codes[parentCodeItem.Id].HandledIds.Add(id);
                        }
                    }
                }

                if (!codes.ContainsKey(codeItem.Id))
                {
                    codes[codeItem.Id] = new CodeSummaryItem(codeItem.Name, codeItem.Url,
                                                             codeId.Value.Count);
                }
                else
                {
                    codes[codeItem.Id].Count += codeId.Value.Count;
                }
            }
            return(r);
        }
예제 #2
0
        private static CodeSummaryItem GetCodeSummaryHierarchy(CodeIds idsForCodes, Naturetypekodetre kodetre)
        {
            var root = new CodeSummaryItem();

            var index = new Dictionary <string, CodeSummaryItem>();

            foreach (var idsForCode in idsForCodes)
            {
                var codeItemFromTree = kodetre.HentFraKode(idsForCode.Key);

                if (codeItemFromTree.Name == "?")
                {
                    continue;
                }

                HandleParents(root.Codes, index, codeItemFromTree);

                CodeSummaryItem item = null;

                if (!index.ContainsKey(codeItemFromTree.Id))
                {
                    item = new CodeSummaryItem(codeItemFromTree.Name, codeItemFromTree.Url, idsForCode.Value.Count);

                    if (codeItemFromTree.ParentCodeItems.Count > 0)
                    {
                        var parent = index[codeItemFromTree.ParentCodeItems.Last().Id];

                        parent.Codes.Add(codeItemFromTree.Id, item);
                    }
                    else
                    {
                        root.Codes.Add(codeItemFromTree.Id, item);
                    }

                    index.Add(codeItemFromTree.Id, item);
                }
                else
                {
                    item           = index[codeItemFromTree.Id];
                    item.OwnCount += idsForCode.Value.Count;
                }
            }

            return(root);
        }
예제 #3
0
        public object GetNatureAreaStatisticsBySearchFilter([FromBody] SearchFilterRequest request)
        {
            var natureLevels = request.AnalyzeSearchFilterRequest();
            int natureAreaCount;

            var search = new SearchV2(Config.Settings.ConnectionString);

            var natureAreas = search.GetNatureAreasBySearchFilter(
                natureLevels,
                request.NatureAreaTypeCodes,
                request.DescriptionVariableCodes,
                request.Municipalities,
                request.Counties,
                request.ConservationAreas,
                request.Institutions,
                request.RedlistAssessmentUnits,
                request.RedlistCategories,
                request.Geometry,
                "",
                request.EpsgCode,
                true,
                1,
                0,
                int.MaxValue,
                out natureAreaCount
                );

            var institutions  = new Dictionary <string, int>();
            var surveyedYears = new Dictionary <int, int>();

            var typecastedNatureAreas = natureAreas.Select(na => (NatureArea)na);

            foreach (var natureArea in typecastedNatureAreas)
            {
                if (institutions.ContainsKey(natureArea.Institution))
                {
                    institutions[natureArea.Institution]++;
                }
                else
                {
                    institutions[natureArea.Institution] = 1;
                }
                if (!natureArea.Surveyed.HasValue)
                {
                    continue;
                }
                if (surveyedYears.ContainsKey(natureArea.Surveyed.Value.Year))
                {
                    surveyedYears[natureArea.Surveyed.Value.Year]++;
                }
                else
                {
                    surveyedYears[natureArea.Surveyed.Value.Year] = 1;
                }
            }

            var natureAreaTypeHash = new CodeIds();

            foreach (var natureArea in typecastedNatureAreas)
            {
                foreach (var parameter in natureArea.Parameters)
                {
                    var natureAreaType = parameter as NatureAreaType;
                    if (natureAreaType != null)
                    {
                        natureAreaTypeHash.Add(natureAreaType, natureArea);
                    }
                }
            }

            var natureAreaTypeSummary = GetCodeSummaryHierarchy(natureAreaTypeHash, Naturkodetrær.Naturtyper);

            var natureAreaStatistics = new NatureAreaStatistics {
                NatureAreaTypes = natureAreaTypeSummary
            };

            foreach (var institution in institutions)
            {
                natureAreaStatistics.Institutions.Add(new NatureAreaSummaryItem
                {
                    Name            = institution.Key,
                    NatureAreaCount = institution.Value
                });
            }
            foreach (var surveyYear in surveyedYears)
            {
                natureAreaStatistics.SurveyYears.Add(new NatureAreaSurveyYearSummaryItem
                {
                    Year            = surveyYear.Key,
                    NatureAreaCount = surveyYear.Value
                });
            }

            var natureAreaStatisticsJson = JObject.FromObject(natureAreaStatistics);

            RemoveFields(natureAreaStatisticsJson, "HandledIds", true);
            if (natureAreaStatisticsJson.First == null)
            {
                return(natureAreaStatisticsJson);
            }

            RemoveFields(natureAreaStatisticsJson.First.First, "Name", false);
            RemoveFields(natureAreaStatisticsJson.First.First, "Url", false);
            RemoveFields(natureAreaStatisticsJson.First.First, "Count", false);

            return(natureAreaStatisticsJson);
        }
예제 #4
0
 private static CodeSummaryItem GetNatureAreaTypeSummary(CodeIds natureAreaTypeHash)
 {
     return(GetCodeSummaryHierarchy(natureAreaTypeHash, Naturkodetrær.Naturtyper));
 }
예제 #5
0
 private static CodeSummaryItem GetDescriptionVariableSummary(CodeIds decriptionVariableHash)
 {
     return(GetCodeSummaryHierarchy(decriptionVariableHash, Naturkodetrær.Naturvariasjon));
 }
예제 #6
0
        public object GetNatureAreaSummary([FromBody] AreaFilterRequest areaFilterRequest)
        {
            if (string.IsNullOrWhiteSpace(areaFilterRequest.Geometry) && cachedNatureAreaSummary != null)
            {
                return(cachedNatureAreaSummary);
            }

            var geometry = "";

            if (areaFilterRequest != null)
            {
                geometry = areaFilterRequest.Geometry;
            }

            var natureAreaTypes        = SqlServer.GetNatureAreaSummary(geometry);
            var natureAreaTypeHash     = new CodeIds();
            var decriptionVariableHash = new CodeIds();

            foreach (var natureAreaTypeItem in natureAreaTypes)
            {
                if (natureAreaTypeItem.Item3)
                {
                    if (natureAreaTypeHash.ContainsKey(natureAreaTypeItem.Item1))
                    {
                        natureAreaTypeHash[natureAreaTypeItem.Item1].Add(natureAreaTypeItem.Item2);
                    }
                    else
                    {
                        natureAreaTypeHash[natureAreaTypeItem.Item1] = new HashSet <int> {
                            natureAreaTypeItem.Item2
                        }
                    };
                }
                else
                {
                    if (decriptionVariableHash.ContainsKey(natureAreaTypeItem.Item1))
                    {
                        decriptionVariableHash[natureAreaTypeItem.Item1].Add(natureAreaTypeItem.Item2);
                    }
                    else
                    {
                        decriptionVariableHash[natureAreaTypeItem.Item1] = new HashSet <int> {
                            natureAreaTypeItem.Item2
                        }
                    };
                }
            }

            CodeSummaryItem natureAreaTypeSummary      = GetNatureAreaTypeSummary(natureAreaTypeHash);
            CodeSummaryItem descriptionVariableSummary = GetDescriptionVariableSummary(decriptionVariableHash);

            var r = new NatureAreaSummary
            {
                NatureAreaTypes      = natureAreaTypeSummary,
                DescriptionVariables = descriptionVariableSummary
            };

            var jo = JObject.FromObject(r);

            RemoveFields(jo, "HandledIds", true);
            if (jo.First != null)
            {
                RemoveFields(jo.First.First, "Name", false);
                RemoveFields(jo.First.First, "Url", false);
                RemoveFields(jo.First.First, "Count", false);
            }
            if (jo.Last != null)
            {
                RemoveFields(jo.Last.First, "Name", false);
                RemoveFields(jo.Last.First, "Url", false);
                RemoveFields(jo.Last.First, "Count", false);
            }

            if (string.IsNullOrWhiteSpace(areaFilterRequest.Geometry))
            {
                cachedNatureAreaSummary = jo;
            }

            return(jo);
        }
예제 #7
0
        public object GetNatureAreaSummary(AreaFilterRequest areaFilterRequest)
        {
            var geometry = "";

            if (areaFilterRequest != null)
            {
                geometry = areaFilterRequest.Geometry;
            }

            var natureAreaTypes        = SqlServer.GetNatureAreaSummary(geometry);
            var natureAreaTypeHash     = new CodeIds();
            var decriptionVariableHash = new CodeIds();

            foreach (var natureAreaTypeItem in natureAreaTypes)
            {
                if (natureAreaTypeItem.Item3)
                {
                    if (natureAreaTypeHash.ContainsKey(natureAreaTypeItem.Item1))
                    {
                        natureAreaTypeHash[natureAreaTypeItem.Item1].Add(natureAreaTypeItem.Item2);
                    }
                    else
                    {
                        natureAreaTypeHash[natureAreaTypeItem.Item1] = new HashSet <int> {
                            natureAreaTypeItem.Item2
                        }
                    };
                }
                else
                {
                    if (decriptionVariableHash.ContainsKey(natureAreaTypeItem.Item1))
                    {
                        decriptionVariableHash[natureAreaTypeItem.Item1].Add(natureAreaTypeItem.Item2);
                    }
                    else
                    {
                        decriptionVariableHash[natureAreaTypeItem.Item1] = new HashSet <int> {
                            natureAreaTypeItem.Item2
                        }
                    };
                }
            }

            var natureAreaTypeSummary      = GetCodeSummaryHierarchy(natureAreaTypeHash, Naturkodetrær.Naturtyper);
            var descriptionVariableSummary =
                GetCodeSummaryHierarchy(decriptionVariableHash, Naturkodetrær.Naturvariasjon);

            var r = new NatureAreaSummary
            {
                NatureAreaTypes      = natureAreaTypeSummary,
                DescriptionVariables = descriptionVariableSummary
            };

            var jo = JObject.FromObject(r);

            RemoveFields(jo, "HandledIds", true);
            if (jo.First != null)
            {
                RemoveFields(jo.First.First, "Name", false);
                RemoveFields(jo.First.First, "Url", false);
                RemoveFields(jo.First.First, "Count", false);
            }
            if (jo.Last != null)
            {
                RemoveFields(jo.Last.First, "Name", false);
                RemoveFields(jo.Last.First, "Url", false);
                RemoveFields(jo.Last.First, "Count", false);
            }

            return(jo);
        }