Язык: RU EN
На главную...

Геоданные в Mapsoft2 (2020-01-02)

Структура геоданных

Структура геоданных в mapsoft2 (как и в старом mapsoft) может содержать несколько треков, несколько наборов путевых точек и несколько наборов карт.

Трек содержит текстовое имя, текстовый комментарий, дополнительные параметры (ассоциативный массив ключ - значение) и массив точек трека. Каждая точка трека содержит координаты (lon, lat, alt), время и флаг начала сегмента. Такая стректура с разбиением треков на сегменты с помощью расстановки флагов пришла, кажется, из последовательного протокола передачи данных старых gps-приемников garmin. Она же используется в формате данных OziExplorer и других старых форматая. Возможно, следует ее переделать в обычную многосегментную линию...

Наборы точек и наборы карт (также, как и треки) содержат текстовое имя, текстовый комментарий, дополнительные параметры и массив элементов, путевых точек и карт, соответственно. Такая группировка точек и карт удобна для использования в графическом интерфейсе: можно загрузить несколько файлов с точками как отдельные наборы и работать с каждым из них; можно сгруппировать большое количество карт (например, все километровки Подмосковья) в один набор и работать только с ним, не путаясь в длинном списке карт. Операции кэширования картинок во вьюере оптимизированы для работы с наборами карт, с использованием того факта, что весь набор всегда показывается как единое целое.

Путевая точка содержит координаты (lon, lat, alt), время, текстовое имя, текстовый комментарий и набор дополнительных параметров (ключ - значение). Дополнительные параметры используются, например, при чтании и записи формата OxiExplorer: вся многочисленная дополнительная информация о точке сохраняется в виде таких параметров, при записи они попадают в файл без изменений. При преобразовании из одного формата в другой некоторые поля могут также сохранятся.

Карта - довольно сложный объект, задающий геодезическую привязку растровой картинки. В целом он напоминает привязку карты в OziExplorer, однако содержит различные дополнительные поля, в частности, для поддержки "плиточных" карт. Такой объект используется в mapsoft2 во всех случаях, когда надо правильно расположить какое-то изображение на географической карте, или нарисовать какую-либо карту.

Структура геоданных, в соответствии с файлом geo_data/geo_data.h:

Чтение и запись из файлов различных форматов

При чтении и записи формат файла определяется по его расширению. Кроме того, можно явно задать формат параметрами --in_fmt и --out_fmt. Возможные значения:

GPX

Формат GPX -- стандартный формат gps-приемников garmin, очень популярный формат для обмена треками и точками. GPX-файл может содержать в себе произвольное количество треков, точек, а также "маршрутов" (route).

Из файла читаются все треки; все путевые точки помещаются в один список точек, название которого совпадает с именем файла (без пути и расширения .gpx); маршруты читаются как дополнительные списки точек. При записи в файл сохраняются все треки, а все списки точек сливаются в один. Если же дан параметр "--gpx_write_rte 1", то все списки точек записываются как отдельные маршруты.

Поле metadata gpx-файла не поддерживается.

Для треков и маршрутов (в формате gpx они устроены похоже) поддерживаются все основные поля (имя, комментарий), следующие дополнительные поля читаются в виде дополнительных параметров с префиксом "gpx_" и при записи в GPX не должны потеряться:

Полe extension не читаeтся. Было бы полезно извлекать оттуда хотя бы цвет трека, который иногда закопан там весьма глубоко: <extensions><gpxx:TrackExtension><gpxx:DisplayColor>Cyan</gpxx:DisplayColor></gpxx:TrackExtension></extensions>

Для путевых точек поддерживаются все основные поля (имя, комментарии, координаты, высота, время). Следующие поля сохраняются в виде дополнительных параметров с префиксом "gpx_" и при записи обратно в GPX не должны потеряться:

Поле extension не читается.

Для точек треков читаются/записываются только поля lat, lon, ele, time.

Параметры, с помощью которых можно управлять записью файла:

KML и KMZ

Формат KML - стандартный формат Google Maps. Файл может содержать сложную структуру каталогов с треками, точками, привязанными картами. KMZ - запакованная версия. В mapsoft2 поддерживается чтение и запись точек и треков, но не карт. При этом структура каталогов приводится к структуре данных mapsoft2, становится плоской.

Списки путевых точек записываются в виде каталогов (KML Folder), основные поля (имя и комментарий) поддерживаются. При чтении, каталоги, содержащие хотя бы одну точку, преобразуется в списки точек mapsoft. Пустые списки точек не могут быть прочитаны из KML-файла. Сами путевые точки записываются в виде объекта KML Placemark. Все основные параметры (lon, lat, alt, time, name, comm) поддерживаются.

Треки также записываются в виде объекта KML Placemark. Все основные параметры треков и их точек поддерживаются, кроме времени, которое кажется, не поддерживается форматом KML. Кроме того, поддерживаются открытые/закрытые треки (дополнительный параметр type=open/closed).

При записи файлов используются те же переметры форматирования xml, что и для GPX:

TODO: Поддержка карт в KML? Надо ли сделать флаг трека "отрытый/замкнутый" основным параметром (он содержательно используется при рисовании, поддерживается в KML, Ozi,...)?

GeoJSON

Mapsoft2 поддерживает чтение и запись геоданных в формате GeoJSON. В файле может храниться сложная структура директорий (FeatureCollections) с различными геометрическими объектами: точками, линиями, многоугольниками. Поддерживается чтение и запись всей структуры данных mapsoft в файл GeoJSON. При этом запись разных дополнительных параметров, а также карт сделана как расширение стандарта GeoJSON, в соответствии с этим стандартом. В данный момент это единственный формат, в котором можно хранить структуру данных mapsoft2 без потери информации.

При этом сам формат GeoJSON поддерживается не полностью:

Списки точек записываются как директории (FeatureCollection) второго уровня. При чтении директория любого уровня преобразуется в список точек в двух случаях: если она содержит хотя бы одну точку, или если она не содержит точек, треков и карт. Во втором случае создается пустой список точек. Для имени, комментария и дополнительных параметров списка точек используются стандартные поля name, cmt и properties.

Треки записываются в директорию первого уровня как объект (Feature) с многосегментными координатами (MultiLineString), вне зависимости от того, содержит ли трек один или несколько сегментов. Читаются треки из директории любого уровня, при этом понимаются одно- и многосегментные линии (LineString, MultiLineString) и многоугольники (Polygon, MultiPolygon). Для имени, комментария и дополнительных параметров списка точек используются поля name, comm и properties.

Координаты путевых точек и точек трека записываются в виде массива [lon, lat, alt, time]. GeoJSON требует наличия только двух первых элементов, но допускает большее их число и рекомендует, чтобы третьим элементом была высота. Если время или высота не определены, длина массива может сокращаться. Если определено время, но не высота, то в качестве третьего элемента записывается null.

Списки карт записываются как директории второго уровня с нестандартными полями: ms2maps для списка карт, ms2maps_name и ms2maps_comm для имени и комментария, ms2maps_properties для дополнительных параметров. Такое расширение сделано из-за того, что стандарт GeoJSON запрещает создание новых типок, но допускает нестандартные поля в существующих типах. Для карт не используются поля name, comm, properties, чтобы в одной директории могли находиться треки, точки и карты, не мешая друг другу.

Каждый элемент массива ms2maps содержит объект JSON со следующими полями: "name", "comm", "proj", "image", "ref", "brd", "image_size", "image_dpi", "tile_size", "tile_swapy", "is_tiled", "tile_minz", "tile_maxz", "min_scale", "max_scale", "def_color".

Параметры, с помощью которых можно управлять записью файлов:

OziExplorer

Программа OziExplorer и ее форматы были очень популярны в нашей компании до распространения GPX и сайта nakarte. До сих пор (2020) я храню архивы треков и точек именно в этом виде. Треки, наборы точек и карты хранятся в отдельных файлах (.plt, .wpt, .map)

Набор путевых точек не поддерживает никаких полей, это просто контейнер для точек. При чтении файла с точками, набор точек называется по имени файла (без расширения .wpt).

Для путевых точек поддерживаются все основные поля (lon, lat, alt, time, name, comm). Кроме того, читаются и записываются следующие дополнительные поля:

Для треков поддерживается поле name, но не comm. Кроме того, читаются и записываются следующие дополнительные поля:

Для точки трека поддерживаются все поля: долгота, широта, высота, время, флаг начала сегмента.

В формате OziExplorer каждая привязка карты хранится в отдельном файле. Соответственно, группировка карт в списки не поддерживаются. При чтении каждого файла создается отдельный список карт из одного элемента. (Имя списка дублирует имя карты) При записи все карты из всех списков записываются в отдельные файлы.

При чтении/записи карт сделано следеющее:

Параметры, с помощью которых можно управлять чтением/записью файлов:

Garmin Utils

Очень старый формат, я его много использовал в 1998-1999 годах, какие-то треки до сих пор у меня так хранятся. Сейчас использовать не рекомендуется. Файл может содержать несколько безымянных списков точек и несколько безымянных треков.

Путевые точки записываются в виде строки, разделенный пробелами: долгота, широта, имя и комментарий. Пробелы в имени заменяются на символ подчеркивания. (Помните, что garmin gps-12 записывал дату и время точки в комментарий, а ограничение имени по длине и набору символов было весьма жестким).

Точки трека записываются в виде строки, разделенный пробелами: долгота, широта, высота, время, флаг начала сегмента.

Параметры, с помощью которых можно управлять чтением/записью файла:

Mapsoft XML

В mapsoft1 геоданные могли быть записаны в странном xml-подобном формате. Сейчас он не поддерживается.

Программы для работы с геоданными

ms2conv

Для преобразования геоданных между разными форматами служит программа ms2conv (man-страница со всеми параметрами).

В программе ms2conv, кроме чтения и записи геоданных реализована их "фильтрация". Это - разные операции, которые можно выполнить с геоданными после их чтения.

ms2tab

Иногда требуется преобразовать трек в текстовую таблицу (например, для построения графиков высоты и скорости от расстояния и т.п.) Для этого служит программа ms2xyz (man-страница со всеми параметрами).

ms2view

В программе ms2view в правой части находится панель, показывающая структуру геоданных. В ней три вкладки: набор списков точек, набор треков, набор списков карт. Показываются названия соответствующих объектов и влаги, позволяющие показывать и скрывать их на карте.

Есть три места, откуда можно редактировать геоданные:

(man-страница со всеми параметрами)

ms2render

Программа может нарисовать геоданные (и не только) в виде картинке в растровом формате (jpeg, png, gif, tiff) или форматах pdf, ps, svg. (man-страница со всеми параметрами)

ms2geofig

Чтение/запись геоданных в fig-файл. (man-страница со всеми параметрами)