WackoWiki: MaxUshakov/GPSSoft ...

Home Page | Изменения | Новые Комменты | Пользователи | Каталог | Регистрация | Вход:  Пароль:  

Программы для GPS

Нас тут просят перейти на NPJ.RU


Так давай перейдём. Этот текст тут закрывается, текст там вот: http://npj.ru/gpssoft/gps_soft


Зачем они нужны?


Для трёх, более или менее, целей.



Или, что то же самое,



Вообще, существующая система с xfig'ом более-менее все это позволяет. Но имеет ли смысл развивать именно ее – непонятно.


Может быть, годится такая Схема Утилит?

Архитектурные вопросы


Обсуждаются в разделе Архитектура Программ.


Попробую здесь описать архитектуру того, что уже есть, по директориям.


jeeps


Очень приятная библиотека для связи с gps-приемниками. К сожалению, в чистом виде мне не удалось ее найти. Так что взял из gpsbabel и подправил немного. (Сам gpsbabel, мне, кстати, не особенно понравился). jeeps работает, кажется, со всеми новыми garmin-приемниками, через serial port и libusb, кажется, ее можно скомпилировать и под windows — очень интересно, если кто-то это попробует сделать!
Также в jeeps есть и различные процедуры для преобразования систем координат – все, что нам когда-либо может понадобиться!
В директории jeeptest есть несколько глупых примеров использования, вероятно, их когда-нибудь надо удалить...


io


Библиотека для чтения/записи геоданных.
Все данные представлены в виде системы вложенных объектов (см. data.h):



Имеются процедуры для чтения/записи таких объектов в файлы разного формата. Для разбора файлов используется boost/spirit и boost/lexical_cast. (Вероятно, в основном из-за лени и любопытства :))


* xml — такой «xml-подобный» формат, замечательный тем, что отображает без измненений все данные из внутреннего представления на диск (и обратно). При этом каждый объект представляется в виде тэга с соответствующим названием, атрибутами и вложеными тэгами. (В xml-файле может находиться несколько объектов). В хml формат записываются/читаются объекты любого типа. Для всех остальных форматов пока поддерживаются только объекты типа “waypoints” и “track”, причем в каждом из них должны содержаться объекты типа “pt”.
Подробнее про map-файлы: http://www.rus-roads.ru/gps/help_ozi/map_file_format.html


* gu — старый формат программы garmin-utils (кажется, это формат примерно версии 1.4, сейчас он, вероятно, уже изменился). Важен мне из исторических соображений: до недавнего времени я пользовался именно этой программой и большинство моих gps-данных хранится в таком формате. Может быть, этот формат подойдет и для записи файлов вручную или простыми скриптами. Других причин пользоваться им я уже не вижу.


* oe — формат OziExplorer. Пока поддерживается чтение и запись wpt- и plt- файлов и не вполне полноценное чтение map-файлов. При чтении распознаются системы координат wgs84 и pulkovo42, проекции карт "Latitude / Longitude?" и Transverce Mercator".
todo – доделать запись map-файлов (границы изображения и размеры файла — Кстати, чем бы правильнее узнавать размеры граф.файла?).


* gps — это интерфейс к библиотеке jeeps — запись и чтение данных с gps-приемника.


Таблица совместимости тэгов и параметров:


gps gu oe комментарии
track
width
rw
displ
rw
color
rw
rw
comm
rw
rw
skip
rw
type
rw
fill
rw
cfill
rw
track/pt
lat
rw
rw 
rw
lon
rw
rw 
rw
time
rw
rw 
rw
alt
rw
rw
depth
rw
start
rw
rw 
rw
waypoints
symbset
rw
waypoints/pt
lat
rw
rw 
rw
lon
rw
rw 
rw
name
rw
rw 
rw
comm
rw
rw 
rw
alt
rw
rw
symb
rw
rw 
rw
displ
rw
rw 
rw
color
rw
rw
bgcolor
rw
time
rw
rw
map_displ
rw
ptdir
rw
prox_dist
rw
font_size
rw
font_style
rw
size
rw
map
proj
rw  “tmerc” или “latlon”
file
rw  Название файла с картой
comm
rw  Название карты. Надо ли его преобразовывать в win1251->koi8?
border
Граница изображения в координатах карты
map/pt
x
rw 
y
rw 
lat
rw 
lon
rw 

converter


Программа, конвертирующая перечисленные выше форматы данных.


./convert <in1> ... <inN> -o <out>


Формат входных файлов определяется автоматически. Поддерживаются «xml-подобный» формат, garmin-utils, Ozi Explorer?.


Формат выходного файла определяется по его расширению:
.xml — xml
.gu — garmin-utils
.wpt, .plt, .map, .oe, .zip — Ozi Explorer?


В формате Ozi Explorer'a? может записываться много разных файлов за один раз, например: a.wpt, a1.plt, a2.plt, a3.plt, при этом их расширения зависят только от того, что в них находится, а не от указанного изначально расширения... Если было указано расширение .zip, то все эти файлы потом зазиповываются.


Чтение zip-файлов пока не сделано, хотя это было бы очень полезно...


Если среди имен входного или выходного файлов попадется имя символьного устройства или слово “usb:», то произойдет связь с gps-приемником (через последовательный порт или libusb).


Примеры


Скачать данные с gps через usb, записать их в zip-архив:
./convert usb: -o aaa.zip
Закачать в gps все треки:
./convert *.plt -o /dev/ttyS0


Почти вся работа converter'a сейчас перенесена в io/io_file.cpp


map


Построение различных преобразований для файла привязки. Замечательная штука получилась!


Примеры использования см. в директориях sdl/ и mergemap/


От класса RPoint я решил здесь отказаться.


todo — быстрая проверка, лежит ли координатное окно целиком вне карты или целиком в карте.


Тут я хотел сказать, что точной проверки нам не нужно! надо только выбрать те карты, которые могли бы понадобиться, и отбросить остальные. Поэтому достаточно сделать проверку bounding box, а дальше смотреть поточечно.

sdl


Ленивые попытки разобраться с libsdl, чтобы рисовать что-нибудь на экране :)


./test2 <геоданные> — Рисует треки и точке на привязанной карте (которая должна быть среди входных файлов).


mergemap


./mergemap <геоданные> — склеивает все карты в проекции Гаусса-Крюгера, накладывает на них треки и точки.
Результат записывает в Jpeg-файл.
В качестве примера даны 4 карты, xml-файл привязки для них и какой-то трек.


Ценное в программе — правильное чтение/запись цвета с поверхности SDL.


todo

Загадки природы


При скачивании из GPS60 активный трек называется “ACTIVE LOG”. При записи в GPS трека с таким названием получается ошибка. При записи трека с названием, которое начинается на “ACTIVE LOG” (например “ACTIVE LOG1”) трек добавляется к активному. При записи трека с любым другим названием – он записывается в сохраненные треки. Надо ли как-то обходить такую ситуацию – не очень понятно.


gps после включения всегда распознается только со второго раза...


Чем отличается Ozi Track Point File Version 2.0 от 2.1? Никаких отличий я не обнаружил, читаю одинаково.
Так же, одинаково читаю и Map 2.0, 2.1, 2.2 (замеченные различия несущественны)

Работа с геодезическими данными


Все координаты хранятся в градусах WGS84.


Высота не преобразуется.


Про привязанную карту мы хотим хранить следующую информацию:
* название карты
* название файла с картой
* проекция карты (для начала — “latlon” или “tmerc”)
* граница карты (многоугольник в координатах граф.файла)
* точки привязки (x, y — координаты в граф.файле, lat, lon — координаты wgs84)


Мы не будем хранить СК и параметры поперечно-цилиндрической проекции карты, считая, что изменения этих параметров ведет лишь к линейному ее преобразованию. Таким образом, все преобразования карты сведуться к преобразованию latlon <-> tmerc (в зависимости от того, в какой проекции нарисована исходная карта и в какой мы хотим ее нарисовать) для wgs84 (а то и для сферической Земли :)) и разумного осевого меридиана, и, после этого, к линейному преобразованию, которое мы будем находить по точкам привязки (минимизацией среднеквадратичного отклонения – если точек больше трех).


При рисовании карт и gps-данных мы можем работать в одном из трех миров:
* latlon. Прямоугольные координаты – широта и долгота.
* tmerc с переключением — обычные координаты Гаусса-Крюгера, координаты – x,y и номер зоны. При рисовании зоны можно делать перекрывающимися, а переключения между ними – вручную.
* tmerc с поворотом — координаты Гаусса-Крюгера, повернутые так, чтобы карта была ориентирована на север. Тогда соседние зоны будут более-менее правильно склеиваться (особенно на крупных масштабах) и пользователю не надо будет заботиться об их переключении. Но кажется, с построеием такого мира возникнет куча проблем, а полезность и аккуратность его будет сомнительной.


При этом нам не нужны построения преобразований между двумя произвольными привязками, а нужно для каждой привязанной карты найти лишь преобразования в каждый из миров и обратно.
Что и сделано в map/mymap.h

Дальнейшие направления работы




 
Файлов нет. [Показать файлы/форму]
Много комментариев (121). [Показать комментарии/форму]
Donate
Время работы: 3.359 s
Использовано памяти: 2.209 Mb