Как читать данные сонара в python

Мне нужно прочитать файл типа данных сонара в python. Данные гидролокатора содержат детали океана, используемые для измерения глубины моря. Файл содержит двоичные данные и расширение в формате .s7k.

Если вы погуглите «xtf python», самым первым попаданием будет проект GitHub для чтения файлов xtf. Я думаю, что вы не особо искали, прежде чем прийти сюда.

Tim Roberts 21.11.2022 06:43

Тим Робертс искал в Google формат .s7k, но не смог найти никакого решения. Потом только сюда выкладывал.

Gomathi 21.11.2022 07:05

Затем вам может понадобиться преобразовать его вручную во что-то, что вы МОЖЕТЕ прочитать.

Tim Roberts 21.11.2022 07:15

Вы пробовали это?

Mercury 21.11.2022 07:20

Есть еще один пример здесь, который может быть полезен. Попробуйте поискать в github вместо google с такими терминами, как s7k py reson sonar и т. д.

Mercury 21.11.2022 07:29

@Mercury Получение ошибки ОШИБКА: невозможно установить hyo2-qc==3.5.12 и hyo2-qc==3.5.4, поскольку эти версии пакетов имеют конфликтующие зависимости.

Gomathi 21.11.2022 10:05
Скраппинг поиска Apple App Store с помощью Python
Скраппинг поиска Apple App Store с помощью Python
📌Примечание: В этой статье я покажу вам, как скрапировать поиск Apple App Store и получить точно такой же результат, как на Apple iMac, потому что...
Редкие достижения на Github ✨
Редкие достижения на Github ✨
Редкая коллекция доступна в профиле на GitHub ✨
Мутабельность и переработка объектов в Python
Мутабельность и переработка объектов в Python
Объекты являются основной конструкцией любого языка ООП, и каждый язык определяет свой собственный синтаксис для их создания, обновления и...
Другой маршрут в Flask Python
Другой маршрут в Flask Python
Flask - это фреймворк, который поддерживает веб-приложения. В этой статье я покажу, как мы можем использовать @app .route в flask, чтобы иметь другую...
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
Проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
Python PyPDF2 - запись метаданных PDF
Python PyPDF2 - запись метаданных PDF
Python скрипт, который будет записывать метаданные в PDF файл, для этого мы будем использовать PDF ридер из библиотеки PyPDF2 . PyPDF2 - это...
0
6
113
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я скачал образец файла s7k, чтобы проверить, могу ли я его прочитать --- и я смог. (Пример файла, который я использовал для тестирования, можно скачать здесь.)

  1. Во-первых, в новую папку проекта загрузите этот файл dg_formats.py, который содержит список кодов дейтаграмм reson и помощников.

  2. Затем загрузите этот файл reader.py в ту же папку.

  3. Строка № 9 файла reader.py выглядит следующим образом:

    from hyo2.openbst.lib.raw.parsers.reson.dg_formats import parse, ResonDatagrams, reson_datagram_code
    

    Измените это на:

    from dg_formats import parse, ResonDatagrams, reson_datagram_code
    

    По сути, мы пропускаем установку библиотеки hyo2-qc, мы просто берем код для синтаксического анализа и чтения.

После этого я могу просто сделать:

from pathlib import Path
from reader import Reson
from dg_formats import parse, ResonDatagrams, reson_datagram_code

input_path = Path("20190730_144835.s7k") # the sample I downloaded

sonar_file = Reson(input_path)
sonar_file.is_mapped()

Мы можем проверить атрибуты с помощью класса dict:

>>> sonar_file.__dict__
{'_valid': True,
 'data': None,
 'map': {7200: [[64, 1564498115590.0002, 334, 386]],
  7022: [[466, 1564495196916.9998, 32, 0]],
  7001: [[566, 1564495197011.0015, 7699, 0]],
  7021: [[8333, 1564498114898.9983, 20116, 0],
   [2340566, 1564498116758.9988, 20116, 0],
   [5031198, 1564498118618.9995, 20116, 0],
...
 '_reson_sync_patt': 65535,
 'format_type': 's7k',
 'file_length': 88684918,
 'file_location': 88684918,
 'file_end': True}

Мы также можем увидеть список ключей карты, например:

>>> print(sorted(sonar_file.map.keys()))
[1003, 1012, 1013, 7000, 7001, 7002, 7004, 7007, 7010, 7021, 7022, 7027, 7028, 7058, 7200, 7300, 7503, 7504, 7610]

Это в основном то, что информация находится внутри. Из dg_formats.py мы можем сопоставить код и посмотреть, что к чему. Например, 1003 — это позиция, поэтому:

>>> position_data = sonar_file.get_datagram(ResonDatagrams.POSITION)
>>> print(position_data)

[<dg_formats.Data1003 at 0x7f4946c1c5e0>,
 <dg_formats.Data1003 at 0x7f4946c1c130>,
...
...
 <dg_formats.Data1003 at 0x7f493e28d880>]

# let's get information of first position
>>> print(position_data[0].__dict__)

{'desc': 'Position', 'time': 1564498113624.0005, 'num_beams_max': 512, 'parse_check': True, 'header_fmt': '<If3d5B', 'header_size': 37, 'datum': 'WGS', 'latency': 0.0, 'latitude': 0.7517794800836651, 'longitude': -1.2341624217514013, 'datum_height': 1.32, 'position_flag': 0, 'qual_flag': 0, 'position_method': 0, 'num_of_satelites': 15}

Не для всех кодов есть хелперы (например, для 7200, 7300, 7503, 7504, 7610 ничего нет), но я надеюсь, что это начало того, как получить информацию из файла!

Mercury, какой инструмент вы используете для доступа / открытия файла s7k

Gomathi 22.11.2022 11:43

Я не использовал никаких инструментов. Я просто попытался посмотреть, смогу ли я получить информацию из файла s7k с помощью Python, как и заданный вами вопрос!

Mercury 22.11.2022 11:45

Спасибо, Меркурий, position_data = sonar_file.get_datagram(ResonDatagrams.POSITION) NameError: имя «ResonDatagrams» не определено

Gomathi 22.11.2022 12:02

Добавьте эту строку в свой скрипт: from dg_formats import parse, ResonDatagrams, reson_datagram_code

Mercury 22.11.2022 12:03

Другие вопросы по теме