Search
Write a publication
Pull to refresh

Гаджет — хитрый прогноз погоды

Идея проста:
  • Берем пачку (у меня пока что 3) сайтов с российскими прогнозами погоды. gismeteo.ru (Фобос), meteoinfo.ru (РосГидроМет), yandex.pogoda.ru (Foreca, насколько я знаю).
  • Вытаскиваем из них данные о погоде на последующие +6 +72 часа.
  • Записываем данные (температура, ветер, облачность, давление) с каждого сайта в файл для последующего сравнения с фактическими данными на этот же период.
  • В соответствии с рейтингом (изначально у каждого сайта рейтинг = 1) составляем среднее для всех метеопараметров и получаем средний прогноз погоды с учетом рейтинга доверия.
  • После первого запуска каждый раз, при достижении указанного в файле периода подсчитываются ошибки в прогнозе для каждого сайта и рейтинг доверия обновляется.

В итоге, чем больше запусков программы, тем больше, (теоретически) должна быть, точность прогнозов.

Я решил осуществить эту идею. Выбрал для начала свой город (Казань).
Ближайший на данный момент прогноз погоды я решил сделать для времени +6 часов.
Создал класс WeatherData для хранения метеопараметров со следующими полями:
        public double Temperature;
        public double Pressure;
        public double Humidity;
        public double PrecipitationIntensity;
        public double CloudsCoverage;
        public double PrecipitationSolidity;
        public double StormChance;
        public double WindSpeed;
        public double WindDirection;
        public DateTime Date;

А также класс Forecasts от которого унаследовал 3 класса для каждого из сайтов с перегруженным методом
        public virtual void DownLoad() { }

Далее начался нудный и долгий парсинг страничек. Использовал для этого htmlagilitypack. Сложность заключалась во времени, обновлениях на сайтах и отсутствии кое-где некоторых метеопараметров. Это разрешил через Linq.

Настроил учет фактических данных и пересчет рейтинга через статический класс FactManager. Парсил архив данных РосГидроМета. За норму для ошибок взял максимум по всем метеопараметрам. Ошибки суммируются в конфиге.

Нашел халявные и довольно сносные иконки для отображения погоды (хотя и их, как мне кажется мало). И построил контрол для отображения метеоданных WeatherDataView.

Ссылки на прогнозы погоды для Казани, рейтинги и некоторые настройки сохранил в xml конфиге. Изменил ссылки на прогнозы для Москвы и получил ожидаемый результат. Но в Москве на все 3 дня получилась ясная погода, поэтому для демонстрации иконок привожу местный прогноз:

image

Сейчас пользуюсь этой программой и очень ей рад. Обновляется каждые 3 часа, по-моему. Признаюсь, часто она бывает более точна в прогнозах, чем отдельные прогнозы с любого из этих сайтов. Планирую сделать ручную надстройку для выбора города и добавить еще один сайт rp5.ru.

P.S.
После 4-5 запусков ошибки в конфиге выглядят следующим образом:
        <add key="GismeteoError" value="10.667" />
        <add key="MeteoInfoError" value="11.000" />
        <add key="YandexError" value="15.500" />
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.