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); }
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); }
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); }
private static CodeSummaryItem GetNatureAreaTypeSummary(CodeIds natureAreaTypeHash) { return(GetCodeSummaryHierarchy(natureAreaTypeHash, Naturkodetrær.Naturtyper)); }
private static CodeSummaryItem GetDescriptionVariableSummary(CodeIds decriptionVariableHash) { return(GetCodeSummaryHierarchy(decriptionVariableHash, Naturkodetrær.Naturvariasjon)); }
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); }
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); }