private VegSampleDTO GetSample(VegDataDTO item, EntityBundle sites, Dictionary <Tuple <CompoundIdentity, Point2 <double> >, Dictionary <DateTime, VegSampleDTO> > elements) { Dictionary <DateTime, VegSampleDTO> element = null; Tuple <CompoundIdentity, Point2 <double> > loc = GetLocation(item, sites); if (!elements.ContainsKey(loc)) { element = new Dictionary <DateTime, VegSampleDTO>(); elements[loc] = element; } else { element = elements[loc]; } if (element.ContainsKey(item.MeasureDateTime.Value)) { return(element[item.MeasureDateTime.Value]); } VegSampleDTO res = new VegSampleDTO(loc.Item1, item.MeasureDateTime.Value, loc.Item2, float.NaN, float.NaN); element[item.MeasureDateTime.Value] = res; return(res); }
private IEnumerable <VegSamplesDTO> ToSamples(VegDET det, Dictionary <string, CompoundIdentity> deployIds, EntityBundle sites, EntityBundle plotTypes, EntityBundle shrubSpecies, EntityBundle treeSpecies, EntityBundle herbSpecies, EntityBundle nonLiving) { Dictionary <string, VegSamplesDTO> samples = new Dictionary <string, VegSamplesDTO>(); foreach (KeyValuePair <string, CompoundIdentity> cur in deployIds) { samples.Add(cur.Key, VegSamplesDTO.Create(cur.Value)); } Dictionary <Tuple <CompoundIdentity, Point2 <double> >, Dictionary <DateTime, VegSampleDTO> > elements = new Dictionary <Tuple <CompoundIdentity, Point2 <double> >, Dictionary <DateTime, VegSampleDTO> >(); foreach (VegElevationDTO cur in det.Elevations.Values) { if (cur.MeasureDateTime.HasValue) { Dictionary <DateTime, VegSampleDTO> element = null; Tuple <CompoundIdentity, Point2 <double> > loc = GetLocation(cur, sites); if (!elements.ContainsKey(loc)) { element = new Dictionary <DateTime, VegSampleDTO>(); elements[loc] = element; } else { element = elements[loc]; } float min = cur.MinElevation.HasValue ? (float)cur.MinElevation.Value : float.NaN; float max = cur.MaxElevation.HasValue ? (float)cur.MaxElevation.Value : float.NaN; element[cur.MeasureDateTime.Value] = new VegSampleDTO(loc.Item1, cur.MeasureDateTime.Value, loc.Item2, min, max); } } foreach (VegHerbDTO cur in det.Herbs.Values) { if (cur.MeasureDateTime.HasValue) { VegSampleDTO it = GetSample(cur, sites, elements); if (it != null) { float pct = cur.PctCover.HasValue ? (float)cur.PctCover.Value : float.NaN; it.Add(new VegHerbSampleDTO(GetTaxa(cur.HerbSpeciesId, herbSpecies, nonLiving), pct, cur.Comments)); if (!samples[cur.SurveyId].ContainsKey(it.When)) { samples[cur.SurveyId].Add(it); } } } } foreach (VegShrubDTO cur in det.Shrubs.Values) { if (cur.MeasureDateTime.HasValue) { VegSampleDTO it = GetSample(cur, sites, elements); if (it != null) { uint pct = cur.Count.HasValue ? cur.Count.Value : 0; it.Add(new VegShrubSampleDTO(GetTaxa(cur.ShrubSpeciesId, shrubSpecies, nonLiving), cur.SizeClass, pct, cur.Comments)); if (!samples[cur.SurveyId].ContainsKey(it.When)) { samples[cur.SurveyId].Add(it); } } } } foreach (VegTreeDTO cur in det.Trees.Values) { if (cur.MeasureDateTime.HasValue) { VegSampleDTO it = GetSample(cur, sites, elements); if (it != null) { float pct = cur.DBH.HasValue ? (float)cur.DBH.Value : float.NaN; it.Add(new VegTreeSampleDTO(GetTaxa(cur.TreeSpeciesId, treeSpecies, nonLiving), pct, cur.Comments)); if (!samples[cur.SurveyId].ContainsKey(it.When)) { samples[cur.SurveyId].Add(it); } } } } return(samples.Values); }