| велосипеди в Україні |

Начать новую тему Ответить на тему На страницу Пред.  1 ... 11, 12, 13, 14, 15, Bce  След.
Автор Сообщение
СообщениеДобавлено: 07.10.2015 00:26 

Сообщения: 18
Город: Киев
Пол: Муж
Возраст: 39
Зарегистрирован:27.04.2014
Находил его, завтра буду мучить знакомых, которые нормально английский знают


Вернуться к началу
shoppage  personalpage P  
 
СообщениеДобавлено: 07.10.2015 12:25 
Аватара пользователя

Сообщения: 471
Город: Екатеринбург
Пол: Муж
Возраст: 59
Зарегистрирован:26.03.2012
Д. Засядько писал(а):
Victor Pomortseff
Цитата:
Там все проще. Читаем файл в двоичном режиме. Находим символ '$' если после него идут символы "GP" - это начало nmea строки. Читаем ее до символа '*' + еще два символа (это контрольная сумма строки).

Есть маленькая программка, которая это делает. Могу выложить.


Ни разу не проще. А если строка начинается не с $GP, а например, с $чегототам? или имеет нестандартный формат?
У меня, к примеру, есть строки $PSRFTXT,Read_EndOffset=0x40*1D
И, кстати, символы $GP - это ведь последовательность байт 24 47 50 (hex). Где гарантия, что эта последовательность не встретится в тех восьми служебных байтах?


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

$GPGGA
$GPGSA
$GPGSV
$GPRMC

Ну еще может быть $GPVTG, но только в том случае, если соответствующая опция (GpsEnableVTGmessage) включена в Atlas.ini

Там еще есть строки $PSRFTXT, но это чисто сирфовая информация, к треку отношения не имеет.

А вот есть еще такая штука: InitDebugPvtTrace. Если ее включить, то бог его знает что туда будет выводиться еще (я не пробовал) и не слетит ли этот формат "8 байт + строка".

Д. Засядько писал(а):
Позанудствую...
Вот как раз такой "простой" подход к обработке текста и вызывает непредвиденные проблемы. Как раз сегодня меня попросили о простой вещи: взять список литературы в Word, где указано порядковый номер и через точку название книжки, и отсортировать этот список не по номеру, а по алфавиту. Казалось бы, чего проще: копируем всё в excel, разделяем строчки так, чтобы всё, что слева от точки, попало в одну ячейку, а всё, что справа от точки - в другую. Потом сортируем по второму столбцу и готово. Ага, щас! То лишние пробелы мешали сортировке, то в строке оказывался лишний символ абзаца, то номер строки оказывался не просто набранным числом, а автоматическим номерованным списком, то символ табуляции рвал строку на несколько экселевских ячеек.


Дело в том, что я профессионально программированием занимаюсь уже лет... Ну больше 20-ти точно. Причем, большую часть времени - разработка софта, который работает в режиме 24/7 и не имеет права вылетать просто так (а если что-то случилось, то должен сам себя диагностировать и автоматически восстанавливать работоспособность с сохранением всех данных).

И некоторый опыт накопился уже. В том числе где как можно делать, а где что нельзя. Так вот. В данном случае формат не документирован. Это вообще внутренние отладочные файлы магеллана. Они не для юзера, а для разработчика (у меня тоже в софте такое есть - файлы трассировки, там по полтора-два мегабайта в час накапливается). А это значит, что в следующей версии прошивки они могут их изменить под свои нужды - они никому ничего не обещали.

Так что единственный надежный способ - вылавливать нужную информацию по контексту, а не по формату, который, как вам показалось, вы "раскололи".

Сейчас дописываю мелкую консольную утилитку, которая будет извлекать нужную информацию из этих файлов и конвертировать ее в gpx трек. Но в отличие от того gpx, что пишет сам прибор, там будет все - магнитное склонение, количество спутников, тип фикса, xDOP'ы, скорость, курс (к сожалению, эти теги из gpx версии 1.1 почему-то убрали, так что приходится их писать через расширение, зарегистрированное GPXTrackEditor'ом:
xmlns:gte="http://www.gpstrackeditor.com/xmlschemas/General/1"

Но, так или иначе, использование этих файлов превращает навигатор в полноценный логгер. При каждом включении навигатора создается новый файл. Размер там получается не более 2Мб/час.

_________________
//Cheers, Victor
//Magellan eXplorist 310, Transystem TripMate 852, Columbus V-990, Transystem PersonalMate 860Lite, Garmin Nuvi 50


Вернуться к началу
shoppage  personalpage P  
 
СообщениеДобавлено: 07.10.2015 13:54 
Аватара пользователя

Сообщения: 471
Город: Екатеринбург
Пол: Муж
Возраст: 59
Зарегистрирован:26.03.2012
Ну вот, если интересно: https://drive.google.com/open?id=0B1SFdzGC9fHXMDlhZzZ1SDFta2s

Извлекает информацию из файла и сохраняет ее в формате gpx.

Каждая точка содержит следующую информацию:

Код:
      <trkpt lat="56.825193" lon="60.635643">
        <time>2015-10-07T04:15:03.095Z</time>
        <ele>239.7</ele>
        <hdop>2.30</hdop>
        <pdop>4.90</pdop>
        <vdop>4.30</vdop>
        <sat>04</sat>
        <fix>3d</fix>
        <magvar>0.0</magvar>
        <geoidheight>-7.0</geoidheight>
        <extensions>
          <gte:gps speed="0.6" azimuth="257.6"/>
        </extensions>
        <desc>Lat = 56.825193, Lon = 60.635643, Alt = 239.7m, Speed = 0.6km/h, Course = 257.6</desc>
      </trkpt>

_________________
//Cheers, Victor
//Magellan eXplorist 310, Transystem TripMate 852, Columbus V-990, Transystem PersonalMate 860Lite, Garmin Nuvi 50


Вернуться к началу
shoppage  personalpage P  
 
СообщениеДобавлено: 07.10.2015 19:40 

Сообщения: 1128
Город: Харків, Холодна Гора
Пол: Не указан
Возраст: 45
Зарегистрирован:02.10.2006
Гм. Оно ругается на отсутствие vcl60.bpl :oops: Наверное, потому что C++ Builder у меня не установлен. :roll:
Ну то такое, мелочи. Я нашёл недостающие .dll, и вроде заработало. Сейчас запишу новый .bin-файл (а то я сдуру стёр их все) и попробую что получится.


Вернуться к началу
shoppage  personalpage P  
 
СообщениеДобавлено: 07.10.2015 20:10 
Аватара пользователя

Сообщения: 471
Город: Екатеринбург
Пол: Муж
Возраст: 59
Зарегистрирован:26.03.2012
Д. Засядько писал(а):
Гм. Оно ругается на отсутствие vcl60.bpl :oops: Наверное, потому что C++ Builder у меня не установлен. :roll:
Ну то такое, мелочи. Я нашёл недостающие .dll, и вроде заработало. Сейчас запишу новый .bin-файл (а то я сдуру стёр их все) и попробую что получится.


Ох, извиняюсь. Завтра пересоберу в статике. Забыл в опциях проекта поставить галочку :-)

_________________
//Cheers, Victor
//Magellan eXplorist 310, Transystem TripMate 852, Columbus V-990, Transystem PersonalMate 860Lite, Garmin Nuvi 50


Вернуться к началу
shoppage  personalpage P  
 
СообщениеДобавлено: 07.10.2015 20:37 

Сообщения: 1128
Город: Харків, Холодна Гора
Пол: Не указан
Возраст: 45
Зарегистрирован:02.10.2006
Та ничего. Работает. Я проверил. Хотя, конечно, без возни с dll было бы удобнее. А то одну .dll подкинул, а оно просит ещё что-то. Подкинул ещё .dll, а оно просит третью. А я сижу, качаю эти файлики и думаю "ну когда ты уже наешься?!" :D
Кстати, а зачем для каждой точки писать
Код:
<desc>Lat = , Lon = , Alt = , Speed = , Course = </desc>

?
Ведь эта инфа продублирована в других тегах.
И зачем нужна SK42WGS84.dll, если данные от чипа вроде как идут в WGS84?


Вернуться к началу
shoppage  personalpage P  
 
СообщениеДобавлено: 07.10.2015 21:12 
Аватара пользователя

Сообщения: 471
Город: Екатеринбург
Пол: Муж
Возраст: 59
Зарегистрирован:26.03.2012
Д. Засядько писал(а):
Та ничего. Работает. Я проверил. Хотя, конечно, без возни с dll было бы удобнее. А то одну .dll подкинул, а оно просит ещё что-то. Подкинул ещё .dll, а оно просит третью. А я сижу, качаю эти файлики и думаю "ну когда ты уже наешься?!" :D
Кстати, а зачем для каждой точки писать
Код:
<desc>Lat = , Lon = , Alt = , Speed = , Course = </desc>

?
Ведь эта инфа продублирована в других тегах.
И зачем нужна SK42WGS84.dll, если данные от чипа вроде как идут в WGS84?


Завтра пересоберу чтобы без лишних dll.
Просто писал на скорую руку, между работой, а по умолчанию оно в свойствах проекта ставит динамическую линковку.

Тэг <desc> есть тяжелое наследие nmeaprocessor - там я не пользовал расширение gte и информация о скорости писалась туда. Плюс некоторые программы при наведении на точку трека отображают содержимое этого тэга в виде хинта.

Dll содержит много разных сервисных функций. Тут используется универсальный (для меня) модуль классов gpxpoint, gpxtrack, gpxfile в котором используются функции из этой dll.

Кстати завтра докину в архив еще утилитку, которая просто nmea строки извлекает. Все, которые есть (а их там больше чем попадает в gpx файл - туда я пишу только те строки, где связь со спутниками уже есть, а в файле есть все, включая процесс поиска спутников. Плюс тут я игнорирую строки gpgsv где содержится информация о все видимых спутниках - номер, азимут, возвышение, snr.

_________________
//Cheers, Victor
//Magellan eXplorist 310, Transystem TripMate 852, Columbus V-990, Transystem PersonalMate 860Lite, Garmin Nuvi 50


Вернуться к началу
shoppage  personalpage P  
 
СообщениеДобавлено: 08.10.2015 09:16 
Аватара пользователя

Сообщения: 471
Город: Екатеринбург
Пол: Муж
Возраст: 59
Зарегистрирован:26.03.2012
Выложил исправленное:
https://drive.google.com/open?id=0B1SFdzGC9fHXdGd0NHF4eU9QWlk

_________________
//Cheers, Victor
//Magellan eXplorist 310, Transystem TripMate 852, Columbus V-990, Transystem PersonalMate 860Lite, Garmin Nuvi 50


Вернуться к началу
shoppage  personalpage P  
 
СообщениеДобавлено: 08.10.2015 09:20 

Сообщения: 1128
Город: Харків, Холодна Гора
Пол: Не указан
Возраст: 45
Зарегистрирован:02.10.2006
Ага, теперь понятно. И спасибо за программу.
Но всё равно остаётся вопрос о тех восьми служебных байтах. А что если в них окажутся символы $GP ?
По крайней мере, в первых четырёх байтах это вполне возможно

UPD: Ну вот, что я и говорил :(
Как только в служебных байтах обнаруживается символ $, программа это воспринимает как новую NMEA-последовательность.
Кстати, почему-то не все последовательности заканчиваются звёздочкой и двумя контрольными байтами.
В логе встретилась такая:
$GPGSV,3,2,12,03,81,122,23,23,67,254,,01,28,186,,mM
Причём, если я правильно расколол формат, то тут символы mM лишние, потому что перед строчкой указана длина 49 байт, куда mM уже не влазят.


Вернуться к началу
shoppage  personalpage P  
 
СообщениеДобавлено: 08.10.2015 09:35 
Аватара пользователя

Сообщения: 471
Город: Екатеринбург
Пол: Муж
Возраст: 59
Зарегистрирован:26.03.2012
Д. Засядько писал(а):
Ага, теперь понятно. И спасибо за программу.
Но всё равно остаётся вопрос о тех восьми служебных байтах. А что если в них окажутся символы $GP ?
По крайней мере, в первых четырёх байтах это вполне возможно


Ну если говорить о преобразовании в gpx, то там после извлечения nmea строки она передается в парсер. А он просто проигнорирует если что-то не так.

_________________
//Cheers, Victor
//Magellan eXplorist 310, Transystem TripMate 852, Columbus V-990, Transystem PersonalMate 860Lite, Garmin Nuvi 50


Вернуться к началу
shoppage  personalpage P  
 
СообщениеДобавлено: 08.10.2015 10:52 

Сообщения: 1128
Город: Харків, Холодна Гора
Пол: Не указан
Возраст: 45
Зарегистрирован:02.10.2006
Ну всё равно это как-то неправильно.


Вернуться к началу
shoppage  personalpage P  
 
СообщениеДобавлено: 08.10.2015 11:00 
Аватара пользователя

Сообщения: 471
Город: Екатеринбург
Пол: Муж
Возраст: 59
Зарегистрирован:26.03.2012
Ужесточил проверку.

https://drive.google.com/open?id=0B1SFdzGC9fHXU3F6U01DUmtIaE0

Теперь в Bin2GPX в парсер пропускаются только строки GPGGA, GPGSA и GPRMC. А в выходной файл попадает только те строки, где есть фиксация позиции.

В Bin2NMEA фильтруются все возможные строки: GPGGA, GPGSA, GPGSV, GPRMC, GPVTG и PSRFTXT

Есть строка не заканчивается контрольной суммой (* плюс еще две цифры), то она игнорируется т.к. не является корректной nmea строкой

_________________
//Cheers, Victor
//Magellan eXplorist 310, Transystem TripMate 852, Columbus V-990, Transystem PersonalMate 860Lite, Garmin Nuvi 50


Вернуться к началу
shoppage  personalpage P  
 
СообщениеДобавлено: 08.10.2015 11:03 
Аватара пользователя

Сообщения: 471
Город: Екатеринбург
Пол: Муж
Возраст: 59
Зарегистрирован:26.03.2012
Д. Засядько писал(а):
Ну всё равно это как-то неправильно.


Чтобы было все на 100% правильно нужна информация о формате этого файла от разработчика. Т.е. читаться он должен точно так же как пишется. Тогда будет гарантия правильности. Когда информации нет, правильно сделать не получится. Получится только извлечь максимум информации с гарантией того, что извлеченное достоверно. А то, что подвергается сомнению просто отбрасывается.

_________________
//Cheers, Victor
//Magellan eXplorist 310, Transystem TripMate 852, Columbus V-990, Transystem PersonalMate 860Lite, Garmin Nuvi 50


Вернуться к началу
shoppage  personalpage P  
 
СообщениеДобавлено: 08.10.2015 11:58 

Сообщения: 1128
Город: Харків, Холодна Гора
Пол: Не указан
Возраст: 45
Зарегистрирован:02.10.2006
Ох и занудный вы дядька :D
Кабы мы на информацию от разработчика надеялись, мы бы вообще без карт к "Магелланам" остались :)
Ну сделайте вы, пожалуйста, отдельную версию программы, чтобы разбиение на строки делалось по инфе из служебных байтов. Это ж проще, чем с нуля программу писать.

А насчёт возможных изменений в формате .bin-файла вы не переживайте. Программисты Магеллана слишком ленивы для этого :)


Вернуться к началу
shoppage  personalpage P  
 
СообщениеДобавлено: 08.10.2015 12:11 
Аватара пользователя

Сообщения: 471
Город: Екатеринбург
Пол: Муж
Возраст: 59
Зарегистрирован:26.03.2012
Д. Засядько писал(а):
Ох и занудный вы дядька :D


Ага :-) Результат долгих танцев с бубном на граблях :-)

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


Практически одинаково. Там кроме чтения из файла ничего нет. Остальное - набор уже готовых модулей если речь идет о выводе в gpx, при выводе в nmea там вообще ничего больше нет).
Да и смысла нет. Суть ведь не в том, чтобы выдрать оттуда сколько-то байт, начиная с определенного, а в том, чтобы получить валидную nmea строку, которая потом пройдет через парсер и не будет им отвергнута. А это достигается 100% контролем того, что мы пишем в выходной файл. Что я и делаю сейчас.

_________________
//Cheers, Victor
//Magellan eXplorist 310, Transystem TripMate 852, Columbus V-990, Transystem PersonalMate 860Lite, Garmin Nuvi 50


Вернуться к началу
shoppage  personalpage P  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему На страницу Пред.  1 ... 11, 12, 13, 14, 15, Bce  След.


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
  © Mishael 2003-2024
Наши друзья: Телеграм-канал про SEO | Рыбалка в Полтаве
Мобильный вид

[ Time : 0.114s | 28 Queries | GZIP : On ]
Reputation System ©'