예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
            }
        }
예제 #5
0
        // 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);
        }
예제 #6
0
        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);
 }