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()); } } } }
private async Task PerformSpatialLrsValidation(RockfallReportGeometry rockfallReport, HmrSubmissionRow submissionRow) { var errors = new Dictionary <string, List <string> >(); var typedRow = rockfallReport.RockfallReportTyped; //remeber that feature type line/point has been replaced either line or point in PerformGpsEitherLineOrPointValidation(). if (IsPoint(typedRow)) { var result = await _spatialService.ValidateLrsPointAsync((decimal)typedRow.StartOffset, 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.StartLongitude = result.point.Longitude; typedRow.StartLatitude = result.point.Latitude; typedRow.EndLongitude = typedRow.StartLongitude; typedRow.EndLatitude = typedRow.StartLatitude; rockfallReport.Geometry = _geometryFactory.CreatePoint(result.point.ToTopologyCoordinate()); submissionRow.StartVariance = typedRow.StartOffset - result.snappedOffset; submissionRow.EndVariance = submissionRow.StartVariance; } } else { var result = await _spatialService.ValidateLrsLineAsync((decimal)typedRow.StartOffset, (decimal)typedRow.EndOffset, 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.StartLongitude = result.startPoint.Longitude; typedRow.StartLatitude = result.startPoint.Latitude; submissionRow.StartVariance = typedRow.StartOffset - result.snappedStartOffset; typedRow.EndLongitude = result.endPoint.Longitude; typedRow.EndLatitude = result.endPoint.Latitude; submissionRow.EndVariance = typedRow.EndOffset - result.snappedEndOffset; typedRow.WorkLength = result.snappedEndOffset - result.snappedStartOffset; 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.StartOffset}]" + $" End[{typedRow.EndOffset}] were converted to a Start[{result.snappedStartOffset}] End[{result.snappedEndOffset}]"); 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()); } } } }
private async Task PerformSpatialLrsValidation(WildlifeReportGeometry wildlifeReport, HmrSubmissionRow submissionRow) { var errors = new Dictionary <string, List <string> >(); var typedRow = wildlifeReport.WildlifeReportTyped; var result = await _spatialService.ValidateLrsPointAsync((decimal)typedRow.Offset, 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.Longitude = result.point.Longitude; typedRow.Latitude = result.point.Latitude; wildlifeReport.Geometry = _geometryFactory.CreatePoint(result.point.ToTopologyCoordinate()); submissionRow.StartVariance = typedRow.Offset - result.snappedOffset; } }