Автор оригинала: Dmitry Vasilev.
Привет, сообщество Codementor!
Когда-то у меня было свободное время в выходные, и я решил сделать для себя какой-нибудь питомец-проект/микро-хакатон. В Москве уже пару месяцев не было солнечной погоды, когда я решил это сделать. Поэтому я решил разобраться!
Вот как я это сделал:
Шаг 1: Я припарковал координаты города из map.aviasales.ru
Шаг 2: Я обогатил его данными о погоде, взятыми из openweathermap.org .
Шаг 3: Я нарисовал его на Google maps в виде тепловой карты! Выглядит красиво…но это не очень полезно – на распределение цвета повлияла близость точек, а не их температура.
Шаг 4: Я попытался построить его в виде цветных кругов, где цвета были рассчитаны как градиент HSL. Он тоже выглядит нормально, но был немного слишком отстающим с 3K очками.
Для таких случаев у Google maps есть классная функция, в настоящее время это альфа-версия – Fusion Tables.
- Шаг 5: Я загрузил в него свои данные, построил график – супер, не лагает.
Веб-интерфейс Fusion Tables также позволяет настраивать маркеры для диапазонов данных. Он был не слишком гибким, может быть, это из-за альфа — состояния-в JS тоже есть хакерские обходные пути, но теперь мне этого достаточно!
- Шаг 6: Я проанализировал map.aviasales.ru опять же для цен на билеты туда и обратно, затем слегка отфильтрованные результаты:
places = [place for place in Place.objects.all() if 17 <= place.weather['temp'] < 25 and place.price and place.price < 20000]
Шаг 7: с помощью уродливого JS я добавил его в качестве второго слоя пользовательских маркеров на карту:
Шаг 8: Я завернул весь проект с помощью Docker (django, uwsgi, nginx, postgres в один контейнер) и выкатил его на свой VPS в Нидерландах!
Вот оно!
Чтобы просмотреть результат, посетите сайт: http://catchthesummer.scythargon.ru
источники: https://github.com/scythargon/catch_the_summer
Затраченное время: менее 15 часов
Жаль, что aviasales.ru/calendar не принимает GET-параметры:)
Любые комментарии очень приветствуются!