Часы Amazfit в качестве GPS-трекера

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

Поэтому при возникновении некоторое время назад мысли приобрести “умные” часы, остановился на модели Amazfit, где был заявлен приемник GPS. Однако “в лоб” извлечь трек в каком-либо доступном формате удалось не сразу, хотя приложения Andriod показывали треки на карте, а за небольшую плату даже предлагали экспорт в формат GPX с отправкой данных по электронной почте. Можно и так, но хотелось все-таки получить исходные данные, а не то, что сочли нужным экспортировать неизвестные разработчики.

Некоторое время ушло на раскопки и в результате был обнаружен архивный файл в формате zip, где и находились вожделенные данные. В моем планшете Android, связанном с часами, они оказались в каталоге

/storage/emulated/0/amazfit/amazfitnotify

Очевидно, что первая часть пути /storage/emulated/0 зависит от конкретного устройства и места установки программы, а остальное с большой вероятностью не меняется от устройства к устройству. Сам файл называется у меня backupAuto.nak. Как уже было отмечено, файл оказался архивом zip, во всяком случае его содержимое легко извлекается с помощью unzip. Внутри архива обнаружилось несколько файлов с именами logReportGPSDataX.bak, где X – целое число. У меня значения X начинались с нуля. Каждый из этих файлов содержит данных GPS, а именно, записи, содержащие долготу, широту, высоту над уровнем моря и временную метку. Записи в файле имеют вид

{"rush_id":"f7700b87-2e6b-4f0c-82ab-764e727af178","rush_version":1,"altitude":"40.0","latitude":"60.044675","longitude":"30.34232167","timestamp":"1548940025778"}

где интересующие нас поля просто очевидны. Время указано в формате Unixtime, который не составит труда преобразовать в привычные человеку значения. Геоданные же указаны просто в явном виде и достаточно их прочесть из файла. Немножко удивило отсутствие привязок к полушариям (запад-восток, север-юг), но они могут указываться знаками, а я был в северном и восточном полушарии, где традиционно долготу и широту указывают со знаком плюс, который в файлах зачастую опускают. Окажусь в другом полушарии – уточню. Хотя даже если это никак не указывается, проблем особых не возникнет, поскольку уж полушарие, где человек находился, он легко запомнит. Если конечно не ходить туда-сюда около Гринвичского меридиана или экватора.

Дискретность записей, как можно увидеть из приведенного фрагмента составляет 1 секунду, что более чем достаточно для привязки фотографий к местности. Остается лишь сделать из этого файла GPX, что не составит ни малейшего труда любому, кто умеет программировать хоть на каком-то языке.

{"GPSData":[
{"rush_id":"cdc11afa-ad88-4e99-8c00-2f4411671a04","rush_version":1,"altitude":"40.0","latitude":"60.04434167","longitude":"30.34196167","timestamp":"1548940025756"},
{"rush_id":"f53d8e15-2c58-47a4-9245-f42d418c9d06","rush_version":1,"altitude":"40.0","latitude":"60.04439833","longitude":"30.341975","timestamp":"1548940025757"},
{"rush_id":"262ab1ca-a8f2-4d8d-910b-621661abf1de","rush_version":1,"altitude":"40.0","latitude":"60.04449833","longitude":"30.34194833","timestamp":"1548940025758"},
{"rush_id":"e15defc2-99c0-48d6-bc2b-469faac3b18b","rush_version":1,"altitude":"40.0","latitude":"60.04459","longitude":"30.34192","timestamp":"1548940025759"},
{"rush_id":"e7fe54af-bce4-4644-9183-8e6edfe495af","rush_version":1,"altitude":"40.0","latitude":"60.04462833","longitude":"30.34192","timestamp":"1548940025760"},
{"rush_id":"7738779c-6a72-4ea7-a0e4-a3d44354f115","rush_version":1,"altitude":"40.0","latitude":"60.044615","longitude":"30.34192333","timestamp":"1548940025761"},
{"rush_id":"9dc1f78b-4138-4b43-a869-5ebd8ad0064d","rush_version":1,"altitude":"40.0","latitude":"60.044615","longitude":"30.34189833","timestamp":"1548940025762"},
{"rush_id":"265442ba-9d3d-4af0-abf7-88854350e96c","rush_version":1,"altitude":"40.0","latitude":"60.0446","longitude":"30.34195167","timestamp":"1548940025763"},
{"rush_id":"d455ec29-c85b-47c0-b223-16f421d6a396","rush_version":1,"altitude":"40.0","latitude":"60.04459833","longitude":"30.34199833","timestamp":"1548940025764"},
{"rush_id":"b04f160a-2bf8-430a-84c9-e2faf38d1e69","rush_version":1,"altitude":"40.0","latitude":"60.044595","longitude":"30.34204","timestamp":"1548940025765"},

Приведенный выше фрагмент файла разбит на строки для удобочитаемости, в оригинале файл состоит из одной длинной строки. Это лишь упрощает его считывание и преобразование в нужный формат.