private async Task <bool> FixMean(TerrestrialRound round) { foreach (var obs in round.Observations) { if (obs.Value.MeanF1F2 == null) { if (obs.Value.Face1 != null) { if (obs.Value.Face1.EdmDistance != null) { TerrestrialObservation mean = obs.Value.Face1; mean.ObservationType = "MeanF1"; await _LoadSaveRepo.SaveMeanAsync(mean, obs.Key); } } if (obs.Value.Face2 != null) { if (obs.Value.Face2.EdmDistance != null) { TerrestrialObservation mean = obs.Value.Face2; mean.ObservationType = "MeanF2"; await _LoadSaveRepo.SaveMeanAsync(mean, obs.Key); } } } } return(true); }
public LocalPoint GetLocalPoint(TerrestrialObservation terrestrialObservation) { LocalPoint point = new LocalPoint(); point.PointId = terrestrialObservation.PointId; point.Y = terrestrialObservation.EdmDistance * Math.Sin((double)terrestrialObservation.VerticalAngle) * Math.Sin((double)terrestrialObservation.HorizontalCircleReading); point.X = terrestrialObservation.EdmDistance * Math.Sin((double)terrestrialObservation.VerticalAngle) * Math.Cos((double)terrestrialObservation.HorizontalCircleReading); point.Z = terrestrialObservation.EdmDistance * Math.Cos((double)terrestrialObservation.VerticalAngle); return(point); }
public async Task <string> SaveMeanAsync(TerrestrialObservation observation, string roundId) { var filter = Builders <TerrestrialRound> .Filter.Eq(s => s._id, roundId); var update = Builders <TerrestrialRound> .Update.Set(u => u.Observations[observation.PointId].MeanF1F2, observation); await _MongoCollectionRounds.UpdateOneAsync(filter, update); return(roundId); }
public TerrestrialObservation MeanObservations(TerrestrialObservation terrestrialObservationF1, TerrestrialObservation terrestrialObservationF2) { if (terrestrialObservationF1.EdmDistance != null && terrestrialObservationF2.EdmDistance != null) { TerrestrialObservation ObsF1F2 = new TerrestrialObservation() { PointId = terrestrialObservationF1.PointId, TimeUtc = terrestrialObservationF2.TimeUtc, TargetHeight = terrestrialObservationF1.TargetHeight, EdmDistance = (terrestrialObservationF1.EdmDistance + terrestrialObservationF2.EdmDistance) / 2, Temperature = (terrestrialObservationF1.Temperature + terrestrialObservationF2.Temperature) / 2, CompensatorTiltX = (terrestrialObservationF1.CompensatorTiltX + terrestrialObservationF2.CompensatorTiltX * -1) / 2, CompensatorTiltY = (terrestrialObservationF1.CompensatorTiltY + terrestrialObservationF2.CompensatorTiltY * -1) / 2, Pressure = (terrestrialObservationF1.Pressure + terrestrialObservationF2.Pressure) / 2, Lockmode = terrestrialObservationF1.Lockmode, ObservationType = "MeanF1F2", HorizontalCircleReading = MeanHzFaces((double)terrestrialObservationF1.HorizontalCircleReading, (double)terrestrialObservationF2.HorizontalCircleReading), VerticalAngle = MeanVzFaces((double)terrestrialObservationF1.VerticalAngle, (double)terrestrialObservationF2.VerticalAngle) }; if (terrestrialObservationF1.Position != null) { ObsF1F2.Position = terrestrialObservationF1.Position; } return(ObsF1F2); } else if (terrestrialObservationF1.EdmDistance != null) { TerrestrialObservation ObsF1F2 = new TerrestrialObservation(); ObsF1F2 = terrestrialObservationF1; ObsF1F2.ObservationType = "MeanF1F2"; return(ObsF1F2); } else if (terrestrialObservationF2.EdmDistance != null) { TerrestrialObservation ObsF1F2 = new TerrestrialObservation(); ObsF1F2 = terrestrialObservationF2; ObsF1F2.ObservationType = "MeanF1F2"; return(ObsF1F2); } else { TerrestrialObservation ObsF1F2 = null; return(ObsF1F2); } }
// When looking at the code keep in mind that a lot of the code is there to handle incomplete data public async Task <bool> ProcessNewObs(string roundId) { TerrestrialRound round = await _LoadSaveRepo.LoadSingleRoundAsync(roundId); foreach (var point in round.Observations) { if (round.Observations[point.Key].Face1 != null && round.Observations[point.Key].Face2 != null && round.Observations[point.Key].MeanF1F2 == null) { if (round.Observations[point.Key].Face1.EdmDistance != null && round.Observations[point.Key].Face2.EdmDistance != null) { TerrestrialObservation mean = _GeodeticCalc.MeanObservations(round.Observations[point.Key].Face1, round.Observations[point.Key].Face2); mean.EdmDistance = _ObservationCorrectionService.GetCorrectedDistance(round.Station, mean); await _LoadSaveRepo.SaveMeanAsync(mean, roundId); await _LoadSaveRepo.SaveLocalCoords(_GeodeticCalc.GetLocalPoint(mean), roundId); } } } return(true); }
public ObservationIntegrity GetObservationIntegrity(TerrestrialObservation terrestrialObservationF1, TerrestrialObservation terrestrialObservationF2) { if (terrestrialObservationF1.EdmDistance != null && terrestrialObservationF2.EdmDistance != null) { ObservationIntegrity obsInteg = new ObservationIntegrity() { PointId = terrestrialObservationF1.PointId, VzDiff = (double)(terrestrialObservationF1.VerticalAngle - (Math.PI * 2 - terrestrialObservationF2.VerticalAngle)), HzDiff = (double)terrestrialObservationF1.HorizontalCircleReading - NormHzFace2((double)terrestrialObservationF2.HorizontalCircleReading), EdmDiff = (double)(terrestrialObservationF1.EdmDistance - terrestrialObservationF2.EdmDistance), CompTiltXDiff = (double)(terrestrialObservationF1.CompensatorTiltX - (terrestrialObservationF2.CompensatorTiltX * -1)), CompTiltYDiff = (double)(terrestrialObservationF1.CompensatorTiltY - (terrestrialObservationF2.CompensatorTiltY * -1)), }; return(obsInteg); } ObservationIntegrity observationIntegrity = new ObservationIntegrity() { Flag = true }; return(observationIntegrity); }
// this is here for reasons ... like handling real data ... also most of the code was removed in this version of the programm public double GetCorrectedDistance(TerrestrialStation station, TerrestrialObservation observation) { return((double)observation.EdmDistance); }