public IObservable <LocationRecorded> GetDeviceLocation(int timeoutMilliseconds, int howMany)
        {
            return
                (Observable.Defer(() => PositionChanged())
                 .CatchAndLog(ExceptionHandling, NullPosition)
                 .Timeout(TimeSpan.FromMilliseconds(timeoutMilliseconds), _scheduler.TaskPool)
                 .Take(howMany)
                 .Select(position =>
            {
                if (position == null)
                {
                    return null;
                }

                _lastPositionRecorded = position;
                return _lastPositionRecorded;
            }));
        }
Beispiel #2
0
        LocationRecorded createPositionFromPlatform(CLLocation location)
        {
            try
            {
                var p = new LocationRecorded();
                p.Accuracy  = location.HorizontalAccuracy;
                p.Latitude  = location.Coordinate.Latitude;
                p.Longitude = location.Coordinate.Longitude;

                if (location.VerticalAccuracy > -1)
                {
                    p.Altitude         = location.Altitude;
                    p.AltitudeAccuracy = location.VerticalAccuracy;
                }

                if (location.Speed > -1)
                {
                    p.Speed = location.Speed;
                }

                try
                {
                    var date = (DateTime)location.Timestamp;
                    p.Recorded = new DateTimeOffset(date);
                }
                catch (Exception)
                {
                    p.Recorded = DateTimeOffset.UtcNow;
                }

                return(p);
            }
            finally
            {
                location.Dispose();
            }
        }