Клуб Народной карты

Yet another Converter

coder-ak
1 сентября 2016, 13:02

...или как случайно создать комбайн. 

Однажды, в одной далёкой-далёкой галактике, прокатившись с трекером по незнакомым местам, я оказался один на один с кучей различных файлов с GPS данными. У меня был трек, были точки (waypoints) и, к некоторым из них, были привязаны фотографии.

"Надо импортировать всё это в Блокнот Картографа", - подумал я и сел за написание своего конвертера, благо, как раз начался отпуск. На всякий случай, чтобы было интереснее, писать стал на Питоне, с которым был совершенно не знаком.

По прошествии одной бессонной ночи появился консольный скрипт gpx2nmap, которому можно было скормить gpx файл меток с привязанными к ним фото и треками, а на выходе получить заветный json файл, который отдать НК для отображения. В процессе отладки скрипта обнаружилось, что на самом деле gpx файлы не очень дружат с внешними данными и для хранения таких данных в процессе переноса с устройства, лучше пользоваться форматом kmz, который, в свою очередь, есть просто zip-архив с упакованными внутрь фото и описанием в формате kml. Параллельно подумалось, что мало кому интересно разбираться в тонкостях установки модулей Питона в консоли и надо бы сделать настоящее приложение.

Сказано - сделано! Скрипт научился понимать оба формата и распаковывать фотографии из архива в папочку, которую можно перенести на Яндекс.Диск и появилось приложение с кнопочками, а я пошел отсыпаться за вторую бессонную ночь.
Вы можете резонно заметить, что делать заметки можно и без фоток, но ведь с ними интереснее. Да и часто так бывает, что проще сфотографировать знак, чем в приложении описывать откуда куда нельзя ехать.  И в этот момент меня осенило. А зачем вообще трекер, если фотографии и так содержат GPX данные! Берём фотографии, отдаём их все приложению и оно экспортирует нужные нам данные во всё тот же json файл Блокнота.

Ехал на работу, снял места, где улицу перекрыли. И не нужно никаких трекеров.

В этот момент надо было бы остановиться, но поздно.
Сначала добавить импорт csv файлов. Мало ли откуда у меня может быть список координат, например, всех филиалов компании. Ок, сделано.
Потом подумалось, что иногда хочется данные собранные за несколько дней можно было объединить в один файл. Готово! Приложению можно отдать любую комбинацию файлов всех поддерживаемых форматов и оно сделает один выходной файл. И, на всякий случай, стало можно взять сами файлы блокнота json и тоже их объединить в один или добавить к каким-то другим данным.
К счастью, на этом я решил остановиться. Форматов данных много, но только с этими я реально имел дело. Для всего остального разнообразия gps данных есть GPSBabel

А вот ещё хорошая идея - треки в Блокноте не имеют подписи, а иногда очень удобно отметить участок дороги в приложении и подписать его, к примеру, "тротуар". Данные то есть, но приложить некуда. Так почему бы не добавить посредине трека ещё одну метку с его названием. Теперь видно, как тот или иной трек называется.

На этом идеи иссякли, отпуск подходил к концу, но приложение было готово!
Да, ему далеко по красоте до Инстаграма, а мои познания Питона слишком скромны, но своё дело приложение делает. Тут ещё надо отметить, что сам я ни разу не видел, как оно выглядит под настоящим Windows. Всё собирается в Wine, а там внешний вид оставляет желать лучшего.

Tl;dr

Any2nmap конвертер - скачать на GitHub.
Понимает: gpx, kml, kmz, csv, jpg, json форматы. Можно одновременно выбрать любые комбинации для экспорта в один файл.
Импортирует: треки, точки (waypoints)
Экспортирует результат работы в любую указанную папку.

Если что-то не работает - жалуйтесь, присылайте примеры файлов, буду багфиксить.

37 комментариев
Подписаться на комментарии к посту
В тексте ошибка: "Tl;dr"


Опять завели меня на какой-то непонятный сайт. Трудно на Яндекс.Диск загрузить?
Котик,
это не ошибка)
Александр,
f xnj ;t 'nj, если не ошибка? Ещё какой-то дурацкий жаргон?
Котик,
Вроде того)
Котик,
Tl;dr это таки https://en.wikipedia.org/wiki/TL;DR
А на Диск да, можно - https://yadi.sk/d/EmJJC1_KufxAA
coder-ak,
переводчик переводит как "МНОГАБУКАФ.". Это, по крайней мере, понятными словами написано.
Спасибо, очень и крутая и полезная штука)
А что за приложение на первых скринах?
AlexPS,
https://play.google.com/store/apps/details?id=psyberia.alpinequest.full
Приложение очень классное. Позволяет любые подложки загружать, в том числе в оффлайн закачивать. И предельно просто организовано добавление меток и путей.
Семён Федотов
1 сентября 2016, 17:02
Русифицировать бы)
Семён Федотов,
можно и украинизировать. Завёл таск: https://github.com/Coder-ak/any2nmap/issues/4 ))
Семён Федотов
1 сентября 2016, 18:58
Накопилась куча записей из MyTracks, экспортировал всё в kmz. https://yadi.sk/d/gyVy8YSNugSTZ - тут лежит сам трек и то, что из него получилось. А получилось мало что - лишь точки начала и конца. При этом если загрузить kmz на gpsvisualizer.com, виден весь трек.
Семён Федотов,
попробуйте выгрузить в GPX. C KML (KMZ - это архивированный KML с иконками точек) гугл обходиться иногда очень фривольно.
Семён Федотов
2 сентября 2016, 14:54
Alexxegorov,
попробовал в GPX. Не конвертирует вообще, gpsvisualizer.com говорит, что нет GPS-информации. Вечером попробую в остальные форматы.
Семён Федотов,
, мой конвертер пробовали? Там Kml как раз должен быть заточен под MyTracks.
Семён Федотов
2 сентября 2016, 17:03
Alexxegorov,
пробовал и, если не ошибаюсь, была ошибка на line 32.
Семён Федотов,
действительно, тут используются новые расширения стандарта kml и библиотека в приложении их не поддерживает. Пошел читать, как реализовать.
Семён Федотов,
Разобрался.
Только такое количество треков НК явно не может переварить. Там же файл в почти 4 МБ вышел. Если загружать кусочками, то всё отлично.
Завтра уже релиз обновлю.
Семён Федотов,
можно обновиться. 
Версия 3.5 - https://github.com/Coder-ak/any2nmap/releases/latest 
Но всё равно такое количество треков в одном файле НК не сможет загрузить. 
Семён Федотов
3 сентября 2016, 12:44
coder-ak,
теперь при нажатии на кнопку Convert вообще ничего не происходит, какой бы трек я не выбрал.
Семён Федотов,
да, kmz забыл включить. https://github.com/Coder-ak/any2nmap/releases/latest поправил.
Семён Федотов,
и ещё раз поправил. Надеюсь окончательно.
Не работает на Windows 10. Пишет эту ошибку: https://yadi.sk/i/PI2vLPRczwSRX
XjCyan1de,
Добрый день!
Ссылка не открывается.
Попробую найти 10-ку и проверить, если найду баг, поправлю.
coder-ak,
http://prntscr.com/dej7gn
XjCyan1de,
вот решение проблемы: https://pc-helpp.com/141-skachat-fayl-msvcr100dll-dlya-windows-7-8.html
это не в приложении дело.
coder-ak,
Запустил, теперь никакой трек не конвертирует в .json, выплёвывает пустой log файл... Google Earth спокойно открывает треки
coder-ak,
Потратил свои кровные 300 рублей на AlpineQuest и все треки начали экспортироватся, спасибо за прогу)
XjCyan1de,
А можете куда-то выложить файл, который не конвертируется. Может там что-то поправлю в парсере.
Альпайнквест классный. Там разработчик по моей просьбе добавил параметр, чтобы в gpx с фото могли экспортироваться треки. Но можно и в kmz сохранять.
Спасибо!
Из фото вытаскивает данные, а GPX не конвертирует. Папка назначения остается пустой.
almazamama,
не заметил уведомления о сообщении. Если ещё актуально, можете скинуть gpx файл куда-то и прислать ссылку. Посмотрю, что там не так.
"Ошибка загрузки фотографии" при выборе любой точки с привязанным фото. Покопался в json файлах. Оказалось, что при добавлении точки обычным путём, через Блокнот, в значении ключа photo прописывается локальный путь к файлу ("photo":"/2017-04-01/многобукоф.jpg") Конвертер же всегда прописывает только имя файла ("photo":"мояфотка.JPG") Приходится каждый раз после получения json файла дописывать в нём имена папок. Такое только у меня?
☭Okclick,
нет, это надо поправить в приложении. Раньше работало и без указания пути, но теперь хочет путь. Постараюсь на днях выложить обновление.
☭Okclick,
запустите приложение, должно выскочить предложение об обновлении.  Или скачайте тут: https://github.com/Coder-ak/any2nmap/releases/latest
Вроде поправил, если что, пишите )
coder-ak,
оперативненько) Работает, спасибо!
☭Okclick,
та я давно пофиксил для себя, а выложить никак руки не доходили )
Если что ещё поправить или добавить, пишите!