Esempio n. 1
0
        public async Task <WeatherGroup> GetForecast(double latitude, double longitude, Unit unit = Unit.Auto, Language language = Language.English)
        {
            DSModel.Forecast src = await _service.GetForecast(latitude, longitude, (DSModel.DSUnit) unit, language);

            var output = new WeatherGroup(src.Daily?.Data?.Count ?? 16);

            TinyMapper.Map <DSModel.Forecast, WeatherGroup>(src, output);
            foreach (var dataPoint in src.Daily.Data)
            {
                // convert datapoints patching/normalizing some values
                var weatherOftheDay = TinyMapper.Map <Weather>(dataPoint);
                if (string.IsNullOrEmpty(weatherOftheDay.TimeZone))
                {
                    weatherOftheDay.TimeZone = output.TimeZone;
                }
                if (weatherOftheDay.TimeZoneOffset == 0.0f)
                {
                    weatherOftheDay.TimeZoneOffset = output.TimeZoneOffset;
                }
                if (weatherOftheDay.Coordinates == null)
                {
                    weatherOftheDay.Coordinates = output.Coordinates;
                }
                // normalize time unix utc
                if (Math.Abs(output.TimeZoneOffset) > 0.4f)
                {
                    weatherOftheDay.UnixTime += (int)(3600 * output.TimeZoneOffset);
                }

                output.Add(weatherOftheDay);
            }

            return(output);
        }
Esempio n. 2
0
        public async Task <ForecastModel> GetWeather(string city, DateTime?date)
        {
            if (string.IsNullOrEmpty(city)) // todo: think about it
            {
                city = DefaultCity;
            }

            if (date.Equals(null)) // todo: think about it
            {
                date = DateTime.UtcNow;
            }


            var address         = GetAddressFromString(city);
            var forecastOptions = new DarkSkyService.OptionalParameters
            {
                MeasurementUnits = "si",
                ForecastDateTime = date
            };
            var response =
                await _client.GetForecast(address.Coordinates.Latitude, address.Coordinates.Longitude, forecastOptions);

            var forecastResult = response.Response;
            var forecast       = new ForecastModel
            {
                Temperature = forecastResult.Currently.Temperature.ToString(),
                WindSpeed   = forecastResult.Currently.WindSpeed.ToString(),
                Summary     = forecastResult.Currently.Summary,
                Location    = address.ToString(),
            };

            return(await Task.FromResult(forecast));
        }