예제 #1
0
        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)"));
        }
예제 #2
0
파일: DawnDusk.cs 프로젝트: tindav/domogeek
        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;
        }