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; })); }
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(); } }