/AltiFore

Primary LanguagePython

Altifore

Altimeter Forecaster - программа для расчета треков спутников-альтиметров (скаттерометров) для синхронизации времени судовых измерений с их пролетами.

Установка

Без сборки

На диск загружены бинарники под Linux и Windows. Они запускаются "из коробки" при полной выгрузке всех файлов из соответствующей папки. В папке вашей Altifore должна быть папка tle с файлами tle/tle_data.txt и tle/tle_sites.txt.

Ручная сборка

Если установлен Git:

git clone https://github.com/leeiozh/AltiFore.git
cd AltiFore

Альтернативно:

  1. Скачиваем https://github.com/leeiozh/AltiFore/archive/refs/heads/master.zip
  2. Распаковываем, в терминале идем в распакованную папку.

Далее создаем окружением и подгружаем библиотеки (они тяжелые, conda может встать под 2 Гб, из-под pip под 0.5 Гб).

С помощью Anaconda:

conda create --name alti_env
conda activate alti_env
conda install -c conda-forge python=3.11
conda install -c conda-forge screeninfo pillow skyfield matplotlib cartopy openpyxl pandas geopy fiona geopandas pyproj
python3.11 altifore.py

Альтернативно через pip:

python3 -m venv alti_env
source alti_env/bin/activate
pip install screeninfo pillow skyfield matplotlib cartopy openpyxl pandas geopy fiona geopandas requests pyproj
python3 altifore.py

Сборка бинарника под свою систему

Желательно по возможности попробовать сделать это на суше. Повторяем все процедуры выше, затем через Anaconda:

conda install -c conda-forge pyinstaller
pyinstaller --onefile altifore.py --hidden-import='PIL._tkinter_finder' --hidden-import='openpyxl.cell._writer'
mv -i dist/altifore .
./altifore

Альтернативно через pip:

pip install pyinstaller
pyinstaller --onefile altifore.py --hidden-import='PIL._tkinter_finder' --hidden-import='openpyxl.cell._writer'
mv -i dist/altifore .
./altifore

Для Windows пути будут с обратными слэшами. В папке dist родится altifore.exe, его переносим на уровень выше и запускаем. После сборки запуск возможен не через консоль, а через проводник. Из другого места лучше не запускать.

Загрузка карт

Для автономной работы необходимо заранее выгрузить некоторые карты библиотеки cartopy.

Распакуйте архив MAPS_HERE.zip в указанную в его readme.txt папку. Готово.

Обновление TLE

С регулярностью не реже 1 месяца необходимо обновлять данные телеметрии наших спутников. Чаще одного раза в неделю обновлять нецелесообразно. Обновление происходит после нажатия на кнопку "Update TLE!".

Возможные проблемы здесь:

  1. Ошибка вида "Check your internet connection ..." означает, что нужно перепроверить доступ к интернету. Технически, даже если на машине доступ только через прокси, все должно работать.

NOTE: Если вы собирались вручную и компьютер подключен через прокси, в терминале можно попробовать сделать следующее:

sudo env http_proxy=http://user:12345@255.255.255.0:4000 python altifore.py

Где необходимо заменить данные на свой логин и пароль от прокси сервера со своим адресом и портом. Это должно сработать на Linux, на Mac и Windows можно попробовать придумать альтернативы. Если вы не собирались вручную, аналогично стоит попробовать подобное:

sudo env http_proxy=http://user:12345@255.255.255.0:4000 ./altifore
  1. Ошибка вида "Check links in tle_sites.txt ..." означает, что нужно глазами просмотреть запрашиваемый файл в папке tle на наличие опечаток.
  2. Если интернет отвалился во время обновления TLE необходимо обязательно перезапустить программу.

Если ничего не помогает, нужно писать на ezhova.ea@phystech.edu. Я буду высылать или текстом, или файлом tle_data.txt свежие данные. Их необходимо заменой помещать в папку tle, они занимают не больше 2 кБ.

Может случиться так, что при запуске обновления без интернета будут утеряны данные из файла tle_data.txt. На этот случай нужно вручную перенести туда данные из tle_data_for_disasters.txt. При появлении интернета заново обновиться, при отсутствии - писать на почту.

Запуск расчета из файла

Пусть есть маршрут, построенный в OpenCPN. Его нужно ПКМ "Copy to file" скопировать в буфер, затем сохранить в текстовый файл формата .kml (KML standard). Затем подгрузить в программу после нажатия на кнопку "Select file". После необходимо ввести предполагаемую скорость (в предположении равномерного движения), дату и время старта из первой точки маршрута. Чем больше точек на маршруте, тем точнее расчет.

КРАЙНЕ ВАЖНО!

Расстояние между точками на маршруте стоит указывать не реже чем каждые 200 км = 100 миль. Это значение обуславливается радиусом круга, в котором мы отслеживаем пролеты спутников. При приближении к суше данное значение рекомендуется уменьшать вплоть до 50 км = 25 миль.

После введения параметров необходимо нажать "Calculate file!".

Возможные проблемы здесь:

  1. Опечатки в скорости, дате или времени.
  2. Предупреждение вида "No flights ..." означает, что вам не повезло и стоит попробовать ввести больше данных о времени и положении, чтобы убедиться, что программа работает корректно. Если есть подозрения, необходимо проверить файл tle_data.txt. Если подозрений нет, то завтра можно отдыхать.

Запуск расчета по ручным данным

Для расчета на ближайшее время или при отсутствии OpenCPN можно избрать этот вариант. Необходимо добавить строчки для ввода по нажатию кнопки "Add new row". Рекомендуется добавлять новую строку после заполнения предыдущей для отработки автозаполнения. В каждой строке необходимо ввести координаты и время точки, в которой вы планируете быть в ближайшее время. Рекомендуемое количество точек на день от 4 до 7.

После введения параметров необходимо нажать "Calculate table!".

Возможные проблемы здесь:

  1. Опечатки. Плюс в широте и долготе вводить не обязательно.
  2. Данные ввода должны быть отсортированы по времени от настоящего к будущему.
  3. Пустые строки необходимо удалять с помощью кнопки "Remove last row".

Интерпретация результатов

В поле "Name for saving files (without extension)" вам предлагается ввести путь и имя сохраняемых файлов. По умолчанию это дата выполнения прогноза. Если вы введете некорректное имя, при попытке сохранения должна вылететь ошибка.

После выполнения расчета будет доступно несколько файлов:

Интерактивная карта

Вверху находится панель управления (зум и стрелочки). Внизу строка с текущим положением курсора. При наведении на интересующую точку пролета отрисовывается голубой круг вокруг соответствующей точки положения судна. Внизу выводятся полные данные о пролете: расстояние до судна, дата и время пролета, название спутника, его координаты.

Таблица *.xlsx с расписанием пролетов

Цвета соответствуют легенде на карте. Если вы видите, что время не отсортировано по возрастанию, следует перепроверить время каждого пролета с помощью интерактивной карты. Вообще, сверять полученные результаты с картой полезно.

Текстовый файл *.txt с полным описанием каждого пролета

В нем записываются данные о ближайшей к треку судна точке пролета спутника.

Картинка *.png со скриншотом карты в домашнем положении

При составлении графика вахт нужно руководствоваться здравым смыслом. Близкие по времени точки можно объединять в одно измерение. Очень далекие по расстоянию можно отбрасывать (особенно вблизи суши).

Обратить внимание!

На спутник Sentinel-1A (синий). Это не альтиметр, а скаттерометр, который дает не только высоту, но направленный спектр волнения. Синхронизация с ним нам особенно важна.

Все вводимые и выводимые времена указываются по UTC.

Для удобства было добавлено поле Ship timezone. При выводе на интерактивную карту данное значение прибавляется к UTC. При этом на данные в таблице оно не влияет. Для изменения значения по умолчанию нужно изменить переменную SHIP_TIME в файле const.py.

Так для удобства можно в файле const.py изменить переменную SELECT_FILE, чтобы не выбирать файл с треком каждый раз. Тогда необходимо будет загружать предполагаемый трек в файл tomorrow.kml.