Исходный код Mapsoft2 организован в виде набора отдельных "модулей", каждый из которых может содержать код, документацию, тесты, программы и т.п. Некоторые из этих модулей стабильны и используются мной в разных проектах, другие могут быть экспериментальными, нестабильными или бесполезными. Модули могут зависеть друг от друга. Сборочная система (использующая make) позволяет собирать программы и библиотеки используя только необходимые модули, а также переносить модули между различными проектами.
Модули находятся в https://github.com/slazav/mapsoft2-libs. Их можно подключить в виде git submodule или cкопировать в проект.
Использование git submodules не поддержиивается сборочной системой Altlinux (а именно, программой gear). Она хочет, чтобы весь исходный код был доступен из определенного коммита в git-репозитории. Эта проблема решается запаковкой всех модулей в отдельный tar-файл (см. скрипт update_modules) и хранением этого файла в репозитории mapsoft2. Если вы не используете gear для сборки пакета, то этот файл можно игнорировать.
Сборочая система сделана на основе GNU make. Модули расположены в одной директории (обычно modules). Программы, библиотеки и модули, которые не используются другими модулями, могут быть расположены в любом месте. Каждый модуль содержит Makefile где описаны его компоненты и включен файл Makefile.inc из директории modules. Для построения дерева зависимостей используется отдельный скрипт modules/get_deps. Для правильного поиска зависимостей подключение заголовочного файла file.h из модуля name надо записывать в виде #include "name/file.h", а локальных заголовочных файлов - в виде #include "file.h".
В Makefile модуля могут быть определены следующие переменные:
as git submodule:
copy of some modules:
cache | Кэш объектов с автоматическим удалением (в зависимости от количества объектов или их суммарного размера). |
cairo | Обертка для libcairo. |
conv | Преобразования координат геометрических объектов. |
downloader | Многопоточный менеджер загрузок. |
err | Простой класс для генерации исключений с текстовыми сообщениями. Используется во многих моих проектах. |
fig | Чтение и запись FIG-файлов. Fig - это древний векторный графический формат, который я использую, в частности, для рисования карт. |
fig_geo | Расширение формата FIG для хранения геоданных и привязки. |
fig_opt | Расширение формата FIG для хранения данных в комментариях объектов. |
filename | Функции для работы с именами файлов. |
geo_data | Классы для работы с геоданными. Чтение и запись (форматы GPX,
KML, KMZ, GeoJson, OziExplorer). Расстояния между точками на поверхности Земли
(формула Гаверсинуса). Геодезические преобразования (обертка для
библиотеки libproj).
https://github.com/slazav/mapsoft2-libs/blob/master/geo_data/Formats.md |
geo_mkref | Изготовление привязок карт. |
geo_nom | Функции для работы с именами советских номенклатурных карт. |
geo_render | Рисование геоданных, сеток, растровых карт на растровых картинках. |
geo_tiles | Функции для работы с тайлами TMS/Google. |
geohash | Библиотека Geohash и простое хранилище данных с гео-индексацией. |
geom | Геометрические объекты: классы Point, Line, Multiline и Rect. Множество полезных функция для работы с ними. |
getopt | Обертка getopt для изготовления сложных интерфейсов командной строки. |
iconv | Преобразование кодировок, обертка libiconv. |
image | Двухмерный массив данных для хранения растровых изображений. Чтение и
запись растровых изображений (PNG, TIFF, JPEG, GIF), квантизация цветов и
другие операции.
https://github.com/slazav/mapsoft2-libs/blob/master/image/Readme.md |
iofilter | Перенаправление std::stream через внешнюю программу. |
jsonxx | Простая C++ обертка для библиотеки libjansson. |
log | Простой способ вывода сообщений в консоль или в файл. |
mapview | Окно вьюера геоданных и карт. Для использования в программе ms2view. |
mp | Чтение и запись MP-файлов. MP -- это формат векторных карт, используемый для компиляции карт для Garmin GPS. |
opt | Контейнер map<string,string> с функциями для записи и чтения различных типов данных. Широко используется в mapsoft. |
osmxml | Чтение файлов OSM XML. |
rainbow | Преобразовать вещественное число в цвет в соответствии с некоторым заданным градиентом. Полезная библиотека, которую я использую в разных местах. |
read_words | Прочитать строчку из std::istream и разбить ее на слова, разделенные пробелами. Понимает комментарии, кавычки, escape-символ \. Похоже на чтение строки параметров в shell. |
shape | Чтение и запись SHAPE-файлов, обертка для shapelib. |
srtm | Работа с картами высот (форматы hgt и tiff). |
time_fmt | Функции для чтения и записи времени в различных форматах. |
tmpdir | Класс для работы со временной директорией и zip-файлами. Можно создать временную директорию, положить туда файлы, и зазиповать их, можно раззиповать файлы во временную динекторию. Директория будет удалена при уничтожении объекта. Использует библиотеку libzip. |
viewer | Вьюер (GTK) для объектов, которые умеют рисовать растровые изображения. "Резиновые линии" и "действия" для изготовления интерактивных интерфейсов (например, рисование и редактирование геометрических объектов). Примеры использования находятся в директории viewer/examples. |
vmap | Чтение и запись VMAP, старого формата mapsoft для векторных карт. |
vmap2 | VMAP2, новый формат векторных карт (текстовый или база данных) и все операции с ним. |