Есть ли на свете люди, которых удовлетворяет прогноз погоды размещенный в интернете? Я думаю, что есть, но существуют и те, кому пятидесятипроцентная погрешность порядком надоела. С таким же успехом можно выйти на улицу и определить: будет солнечный день, или пасмурный. Я уже упоминал в предыдущей статье о гидрометеорологическом спутнике Electro-L, который каждые 30 минут делает фотографии Земли в разных спектрах и отправляет на поверхность. Ссылка, где можно посмотреть эти фотографии. Пытаясь сделать прогноз по фотографиям мы столкнемся со сложностью в определении движения циклона или антициклона. Поэтому я сделал скрипт, который объединяет фотографии в анимированное изображение и делает визуальное восприятие более удобным. Вот такой результат вас ожидает в конце.
Написано все на Python 3.0. Соответственно вам необходимы знания этого языка и умение работать в Linux.
Привожу сразу код. Он подробно прокомментирован, поэтому я не вижу смысла описывать его еще раз.
На закуску. Вот что будет, если в коде поменять с
ИК диапазон
Привожу сразу код. Он подробно прокомментирован, поэтому я не вижу смысла описывать его еще раз.
Вызывая скрипт, мы ждем и в конце получаем файл выходную анимацию.from ftplib import FTP import datetime import os Months = ["January","February","March","April","May","June","July","August","September","October","November","December"] # Создаем список, для перевода числового обозначения месяцев в буквенное def cwd(zn,delta): # Функция для перемещения к удаленному FTP каталогу. zn=-1,1 позволяет отнимать или прибавлять значение к текущей дате date_now = datetime.date.today()+(zn*delta) # Непосредственно прибавление day = date_now.day # Преобразование даты, к типу, который используется на FTP сервере if day<10: # Делаем значение дня двузначным, если номерсостоит из одного символа, например "01" day="0"+str(day) else: day=str(day) month = date_now.month # Месяц сразу поставляется в двузначном варианте. year = str(date_now.year) tm = datetime.datetime.now() ftp.cwd("/"+year+"/"+Months[month-1]+"/"+day+"/"); #Переход в директорию def GetDay(zn,delta,find): # Данная функция получает фотографии за день hours = [] dirs = [] cwd(zn,delta) # Функция описана выше hours = ftp.nlst() # Загружаем в список имена всех директорий hours.sort() for i in hours: # Перебираем каталоги содержащие фотографии и именуемые временем, в которое они были сделаны. dirs = ftp.nlst(i) for j in dirs: # Перебираем файлы в каталоге и ищем тот, в котором содержится строка find="_9.jpg","_8.jpg","0_RGB.jpg" и т.д. if j.find(find)!=-1: f = j[5:] # Убираем название папки в котором находится файл print(f) # Выводим имя скачиваемого файла image = open("images/"+f,"wb") ftp.retrbinary("RETR "+j,image.write) # Загрузка и сохранение image.close() ftp = FTP("ftp.ntsomz.ru","electro","electro") # Подключаемся к FTP find = "_9.jpg" # Задаем маску поиска GetDay(-1,datetime.timedelta(days=1),find) # Получаем вчерашние фотографии GetDay(1,datetime.timedelta(),find) # Актуальные фото ftp.close() os.system("convert -delay 10 images/*.jpg images/gif.gif") # Тут используется утилита convert создающая анимированный gif. delay - время между кадрами images/gif.gif - название исходного файла os.system("mirage images/gif.gif &") # Открываем файл программой для просмотра фотографий, можно использовать gwenview и любые другие приложения.
python3 weaher.pyЧтобы не писать это строку постоянно, заходя в консоль я закинул в /usr/bin файл, который позволяет сделать все операции одной командой. Название ему дал соответственное: weather.
cd /home/vladislav/laboratory/Python/Вот собственно и все. Планирую сделать специальную программу для просмотра изображение в более удобном формате.
xterm -e python3 FTPElectro.py
На закуску. Вот что будет, если в коде поменять с
find = "_9.jpg"на
find = "0_RGB.jpg"
Видимый диапазон
В настоящее время спутник Electro-L перестал передавать фотографии,
так как потерял ориентацию в пространстве.
Комментариев нет:
Отправить комментарий