public async Task <IActionResult> Get( [FromRoute] string location, [FromRoute] DawnDuskType dawnduskType, [FromRoute] string dateInput) { if (dawnduskType == DawnDuskType.Unknown) { return(BadRequest("Invalid Dawn/Dusk request type, accepted values: sunrise|sunset|zenith|dayDuration|all")); } if (string.IsNullOrWhiteSpace(location)) { return(BadRequest("Location must be provided")); } DateTimeOffset?date = GetDateFromInput(dateInput); if (date.HasValue) { var coordinates = await _geolocationHelper.GetLocationAsync(location); if (coordinates == null) { return(BadRequest($"Location {location} not found")); } var utcOffset = await _geolocationHelper.GetUtcOffsetAsync(coordinates, date.Value); return(Ok(new DawnDusk(date.Value, coordinates, dawnduskType, utcOffset))); } return(BadRequest("Invalid date, accepted values: now|tomorrow|yesterday|date(YYYY-MM-DD)")); }
public DawnDusk(DateTimeOffset date, GeoCoordinates coordinates, DawnDuskType dawnDuskType, double utcOffset) { Date = date.Date; var mLon = (coordinates.Longitude * 4.0) / 60.0; var solarDeclination = GetDeclination(GetDay(date)); var Ho = GetHo(solarDeclination, coordinates.Latitude, coordinates.Longitude); var equationOfTime = GetEoT(GetDay(date)); Meridian = 12.0 + equationOfTime - mLon + utcOffset; Sunrise = Meridian - Ho; Sunset = Meridian + Ho; Duration = Ho * 2; _dawnDuskType = dawnDuskType; }