public void AddLevelSurvey(FieldVisitInfo fieldVisit, LevelSurvey levelSurvey)
        {
            fieldVisit.LevelSurveys.Add(levelSurvey);

            ExtendVisitPeriod(fieldVisit,
                              new [] { levelSurvey.SurveyPeriod.Start, levelSurvey.SurveyPeriod.End }
                              .Concat(levelSurvey.LevelSurveyMeasurements.Select(lsm => lsm.MeasurementTime)));
        }
Exemplo n.º 2
0
 public void AddLevelSurvey(FieldVisitInfo fieldVisit, LevelSurvey levelSurvey)
 {
     fieldVisit.LevelSurveys.Add(levelSurvey);
 }
Exemplo n.º 3
0
 private IEnumerable <DateTimeOffset?> GetTimes(LevelSurvey item)
 {
     return(item
            .LevelSurveyMeasurements
            .Select(m => (DateTimeOffset?)m.MeasurementTime));
 }
        public IEnumerable <LevelSurvey> Map(EHSN eHsn)
        {
            if (eHsn == null)
            {
                throw new ArgumentNullException(nameof(eHsn));
            }

            var parsedSurvey = ParseLevelSurveyInfo(eHsn);

            var levelSurvey = (LevelSurvey)null;

            var levelSurveyTime = (DateTimeOffset?)null;

            foreach (var table in parsedSurvey.LevelCheckTables)
            {
                if (!table.upload.ToNullableBoolean() ?? false)
                {
                    continue;
                }

                var establishedRows = table.LevelChecksRow
                                      .Where(row => row.establish.ToNullableDouble().HasValue)
                                      .ToList();

                if (!establishedRows.Any())
                {
                    continue;
                }

                var originReferenceName = establishedRows.First().station;

                var measuredRows = establishedRows
                                   .Where(row => row == establishedRows.First() || row.foresight.ToNullableDouble().HasValue)
                                   .ToList();

                if (!measuredRows.Any())
                {
                    continue;
                }

                if (levelSurvey == null)
                {
                    levelSurvey = new LevelSurvey(originReferenceName)
                    {
                        Comments = parsedSurvey.LevelCheckComments,
                        Party    = parsedSurvey.Party
                    };
                }
                else if (levelSurvey.OriginReferencePointName != originReferenceName)
                {
                    _logger.Error($"Can't change the {nameof(LevelSurvey)}.{nameof(levelSurvey.OriginReferencePointName)} from '{levelSurvey.OriginReferencePointName}' to '{originReferenceName}'. Retaining first origin.");
                }

                if (!levelSurveyTime.HasValue)
                {
                    levelSurveyTime = GetLevelSurveyTime(eHsn);
                }

                var distinctRows = measuredRows
                                   .DistinctBy(r => new { r.station })
                                   .ToList();

                var skippedRows = measuredRows
                                  .Where(r => !distinctRows.Contains(r))
                                  .ToList();

                if (skippedRows.Any())
                {
                    foreach (var skippedRow in skippedRows)
                    {
                        var keptRow = distinctRows.First(r => r.station == skippedRow.station);

                        _logger.Error($"'{keptRow.station}' using first circuit measurement of {keptRow.elevation}, and ignoring secondary measurement of {skippedRow.elevation}");
                    }
                }

                var measurements = distinctRows
                                   .Select(row => new LevelSurveyMeasurement(row.station, levelSurveyTime.Value, row.elevation.ToNullableDouble() ?? 0)
                {
                    Comments = row.comments
                })
                                   .ToList();

                var secondaryMeasurements = measurements
                                            .Where(m => IsReferencePointMeasured(levelSurvey, m.ReferencePointName))
                                            .ToList();

                foreach (var secondaryMeasurement in secondaryMeasurements)
                {
                    var existingMeasurement = levelSurvey
                                              .LevelSurveyMeasurements
                                              .Single(m => m.ReferencePointName.Equals(secondaryMeasurement.ReferencePointName, StringComparison.InvariantCultureIgnoreCase));

                    if (!DoubleHelper.AreEqual(secondaryMeasurement.MeasuredElevation, existingMeasurement.MeasuredElevation))
                    {
                        _logger.Error($"'{existingMeasurement.ReferencePointName}' with first measured elevation of {existingMeasurement.MeasuredElevation}. Ignoring secondary measured elevation of {secondaryMeasurement.MeasuredElevation}");
                    }
                    else
                    {
                        _logger.Info($"'{existingMeasurement.ReferencePointName}' was remeasured a second time with the same elevation of {secondaryMeasurement.MeasuredElevation}");
                    }
                }

                var newMeasurements = measurements
                                      .Where(m => !secondaryMeasurements.Contains(m))
                                      .ToList();

                levelSurvey.LevelSurveyMeasurements.AddRange(newMeasurements);
            }

            var levelSurveys = new List <LevelSurvey>();

            if (levelSurvey != null)
            {
                levelSurveys.Add(levelSurvey);
            }

            return(levelSurveys);
        }
 private bool IsReferencePointMeasured(LevelSurvey levelSurvey, string referencePointName)
 {
     return(levelSurvey
            .LevelSurveyMeasurements
            .Any(m => m.ReferencePointName.Equals(referencePointName, StringComparison.InvariantCultureIgnoreCase)));
 }