private async Task PerformSpatialGpsValidation(WildlifeReportGeometry wildlifeReport, HmrSubmissionRow submissionRow) { var errors = new Dictionary <string, List <string> >(); var typedRow = wildlifeReport.WildlifeReportTyped; var start = new Chris.Models.Point((decimal)typedRow.Longitude, (decimal)typedRow.Latitude); var result = await _spatialService.ValidateGpsPointAsync(start, typedRow.HighwayUnique, Fields.HighwayUnique, _thresholdSpLevel, errors); if (result.result == SpValidationResult.Fail) { SetErrorDetail(submissionRow, errors, _statusService.FileLocationError); } else if (result.result == SpValidationResult.Success) { typedRow.HighwayUniqueLength = result.rfiSegment.Length; typedRow.HighwayUniqueName = result.rfiSegment.Descr; typedRow.Offset = result.lrsResult.Offset; wildlifeReport.Geometry = _geometryFactory.CreatePoint(result.lrsResult.SnappedPoint.ToTopologyCoordinate()); submissionRow.StartVariance = result.lrsResult.Variance; } }
private async Task PerformSpatialGpsValidation(RockfallReportGeometry rockfallReport, HmrSubmissionRow submissionRow) { var errors = new Dictionary <string, List <string> >(); var typedRow = rockfallReport.RockfallReportTyped; var start = new Chris.Models.Point((decimal)typedRow.StartLongitude, (decimal)typedRow.StartLatitude); if (IsPoint(typedRow)) { var result = await _spatialService.ValidateGpsPointAsync(start, typedRow.HighwayUnique, Fields.HighwayUnique, _thresholdSpLevel, errors); if (result.result == SpValidationResult.Fail) { SetErrorDetail(submissionRow, errors, _statusService.FileLocationError); } else if (result.result == SpValidationResult.Success) { typedRow.HighwayUniqueLength = result.rfiSegment.Length; typedRow.HighwayUniqueName = result.rfiSegment.Descr; typedRow.StartOffset = result.lrsResult.Offset; typedRow.EndOffset = typedRow.EndOffset; rockfallReport.Geometry = _geometryFactory.CreatePoint(result.lrsResult.SnappedPoint.ToTopologyCoordinate()); submissionRow.StartVariance = result.lrsResult.Variance; } } else { var end = new Chris.Models.Point((decimal)typedRow.EndLongitude, (decimal)typedRow.EndLatitude); var result = await _spatialService.ValidateGpsLineAsync(start, end, typedRow.HighwayUnique, Fields.HighwayUnique, _thresholdSpLevel, errors); if (result.result == SpValidationResult.Fail) { SetErrorDetail(submissionRow, errors, _statusService.FileLocationError); } else if (result.result == SpValidationResult.Success) { typedRow.HighwayUniqueLength = result.rfiSegment.Length; typedRow.HighwayUniqueName = result.rfiSegment.Descr; typedRow.StartOffset = result.startPointResult.Offset; submissionRow.StartVariance = result.startPointResult.Variance; typedRow.EndOffset = result.endPointResult.Offset; submissionRow.EndVariance = result.endPointResult.Variance; typedRow.WorkLength = typedRow.EndOffset - typedRow.StartOffset; if (result.lines.Count == 1) { if (result.lines[0].ToTopologyCoordinates().Length >= 2) { rockfallReport.Geometry = _geometryFactory.CreateLineString(result.lines[0].ToTopologyCoordinates()); } else if (result.lines[0].ToTopologyCoordinates().Length == 1) { _logger.LogInformation($"[Hangfire] Row [{typedRow.RowNum}] [Original: Start[{typedRow.StartLongitude}/{typedRow.StartLatitude}]" + $" End[{typedRow.EndLongitude}/{typedRow.EndLatitude}] were converted to a point [{result.lines[0].Points[0].Longitude}/{result.lines[0].Points[0].Latitude}]"); rockfallReport.Geometry = _geometryFactory.CreatePoint(result.lines[0].ToTopologyCoordinates()[0]); } } else if (result.lines.Count > 1) { var lineStrings = new List <LineString>(); foreach (var line in result.lines) { lineStrings.Add(_geometryFactory.CreateLineString(line.ToTopologyCoordinates())); } rockfallReport.Geometry = _geometryFactory.CreateMultiLineString(lineStrings.ToArray()); } } } }