Формат zmp и создание карт
Каждый картографический сервис в SASPlanet описывается в «zmp». Это папка или zip-архив с расширением .zmp, в котором хранится текстовое описание сервиса в особом формате. Один «zmp» соответствует одной карте и независим от других. Сама аббревиатура является производным от слов: zip map.
Коллекция zmp расположена в подпапках Maps в виде дерева каталогов и распространяется через git-репозиторий отдельно от SAS.Planet. В прошлом в программе использовались только zip-архивы с расширением .zmp. Сразу после установки программы обновите набор zmp.
Общий принцип
SAS.Planet скачивает тайлы с сервера и сохраняет их в тайловый кеш. В zmp описывается, как формируется ссылка на конкретный тайл и особенности HTTP-запроса на скачивание с конкретного сервера. При создании zmp чаще всего копируют поведение браузера при просмотре online-карт. Удобно пользоваться встроенными в браузер инструментами веб-разработчика, так, для Firefox нажмите F12, после чего откройте веб-страницу с картой.
Обучающие примеры:
- Описание Паскаль скриптов (GetUrlScript.txt)
- Сложный пример (подключение dll)
Структура ZMP
Каждый zmp может содержать следующие файлы и папки:
- params.txt — описывает основные параметры карты или слоя, единственный файл, который является обязательным;
- GetUrlScript.txt — скрипт, отвечающий за формирование ссылки на тайл карты и пользовательских заголовков; не нужен если используется упрощенное добавление карт). Скрипты пишутся на обычном Pascal. Основными параметрами тайла являются масштаб и координаты по осям
xиy. Масштаб обозначается переменнойGetZ(начинается с единицы), координаты по осямxиy- соответственно переменнымиGetXиGetY. Эти переменные привязаны к тайловой сетке, принятой для Google Maps; - 24.bmp — файл иконки, отображаемой на панели инструментов. Содержимое этого файла — изображение произвольного размера в формате BMP, PNG, ICO и других, но имя должно быть
24.bmp. В ранних версиях программы требовались иконки18.bmp(BMP, 18×18 pix, цвет фона RGB(255,0,255)) и24.bmp24×24 pix, цвет фона RGB(255,0,255)). - info.txt — словесное описание карты в подмножестве HTML (в частности, абзацы надо разделять тегом <BR>). Возможен вывод графических файлов (например, легенды карты), через тег
<img src=”path\to\image.bmp”/>. Ссылаться можно в т.ч. на изображения в папке zmp. - графические файлы, ссылка на которые размещена в
info.txt(например, легенда карты); - EmptyTiles — директория, содержащая образцы файлов, которые отдаёт сервер вместо пустых (полностью прозрачных) или отсутствующих тайлов, а также в случае бана. Такие тайлы не будут сохраняться в SAS.Planet. В некоторых случаях сервер отдаёт нормальные тайлы в одном формате (например image/jpeg), а «пустышки» в другом (например полностью прозрачный image/png). Поскольку SAS.Planet конвертирует все принятые тайлы в формат, указанный в параметре
Ext(см. ниже), то в качестве образцов необходимо использовать исходные файлы, отправленные сервером, а не брать их из кэша программы.
params.txt
Некоторые из параметров карты могут быть изменены внутри программы без редактирования файлаparams.txt. Для этого нужно зайти в Параметры→Параметры карты или нажать Ctrl+Alt+P. Пользовательские изменения настроек карт сохраняются в файлеMaps/maps.ini.
Раздел [PARAMS]
- asLayer — если равно 1, карта используется как слой, накладываемый поверх основной карты.
- pnum — порядковый номер карты в меню. Не обязателен.
- GUID — случайный номер, можно сгенерировать онлайн
- ParentSubMenu — название пункта родительского меню для данной карты на русском языке.
- ParentSubMenu_en — название пункта родительского меню для данной карты на английском языке.
- ParentSubMenu_uk — название пункта родительского меню для данной карты на украинском языке.
- существует возможность указать иерархическое меню разделив пункты символом «\» (например
ParentSubMenu=Google\Планеты)
- name — имя карты на русском языке.
- name_en — имя карты на английском языке.
- name_uk — имя карты на украинском языке.
- CacheType — можно переопределить тип кэша из списка в исходном коде, в который будут записываться тайлы данной карты. NB! Некоторые форматы кеша подходят только для экспорта тайлов.
| CacheType | Название | Путь | Комментарий |
|---|---|---|---|
| 0 | По умолчанию | Ранее использовался 2, теперь 71 | |
| 1 | GoogleMV | cache_old/ /{z+1}/{q}.{ext} | Quadkey |
| 2 | SAS.Planet | cache/ | |
| 3 | EarthSlicer 1.95 | cache_es/ | |
| 4 | GlobalMapper Tiles (GMT) | cache_gmt/ /z{z}/{x}/{y}.{ext} | |
| 41 | GlobalMapper Aux | cache_gmt/ | Не используется? |
| 42 | GlobalMapper Bing | cache_gmt/ /{z}/{y}/{x}.{ext} | Тикет 780 |
| 43 | Mobile Atlas Creator (MOBAC) | cache_ma/ /{z}/{x}/{y}.{ext} | Тикет 1936. Тип кеша известен как Slippy map. Нумерация тайлов используется в OpenStreetMap и Google. Кеш подключается к QGIS, MapProxy. Для использования с JOSM достаточно:tms:file:///home/user/SAS.Planet/cache_ma/vesat/{z}/{x}/{y}.jpg # Linux
tms[18]:file:///c:/SAS.Planet/cache_ma/vesat/{z}/{x}/{y}.jpg # Windows
|
| 44 | OsmAnd+ Tiles | Экспорт {z}/{x}/{y}.{ext}.tile | Тикет 884. Не то же самое что «OsmAnd (SQLite3)» *.sqlitedb (тикет 3577) |
| 45 | Tile Map Service (TMS) | cache_tms/ /{z}/{x}/{-y}.{ext} | Тикет 2848. (спецификация osgeo.org). |
| 5 | Google Earth | cache_ge/ | |
| 51 | GoogleEarth Terrain | ||
| 6 | BerkeleyDB | cache_db/ | |
| 61 | BerkeleyDB (Versioned) | ||
| 7 | DBMS (СУБД) | ||
| 71 | SQLite3 | cache_sqlite/ /z{z+1}/0/0/0.0.sqlitedb | Тикет 1376. Создаётся несколько баз SQLite. |
| 72 | MBTiles | Экспорт *.mbtiles | Тикет 1376, (спецификация MapBox). Используется одна база SQLite, но формат так ограничен, что пригоден только для экспорта. |
| 8 | GeoCacher | ||
| 9 | RAM (на диск не записываются) | Тикет 1755 |
- DefURLBase — неизменная часть адреса ссылки на тайлы карты. Или шаблон URL адреса в случае упрощенного добавления карт.
- projection — проекция карты. 1 — меркатор на сфероид, 2 — меркатор на эллипсоид, 3 — широта/долгота.
- sradiusa — радиус большой полуоси эллипсоида.
- sradiusb — радиус меньшей полуоси эллипсоида.
- EPSG — код проекции карты.
- NameInCache — имя папки в кэше, в которую будут записываться тайлы карты.
- separator — разделитель в виде горизонтальной черты, отображаемый в меню после данной карты (1 — отображать, 0 — не отображать).
- Ext — расширение тайла (.jpg, .png, .bmp, .gif). Задаёт формат, в котором принудительно будут сохраняться карты, если ContentType другой.
- UseDwn — если равно 1, то скачивать тайлы карты разрешено.
- Sleep — величина паузы между загрузками отдельных тайлов в миллисекундах.
- DefHotKey — сочетание горячих клавиш для данной карты.
- ContentType — список форматов изображений (например,
ContentType=image/jpeg,image/png), которые SAS.Planet ожидает получить от сервера. При несовпадении формата (например сервер вернул текст, а не картинку) отображается ошибка. - DefaultContentType — тип, который будет использоваться, если сервер не вернул никакого типа или если стоит игнорирование типа, возвращаемого сервером.
- IgnoreContentType — игнорирование типа, возвращаемого сервером.
- DetectContentType - если равно 1, то после загрузки тайла будет выполнятся анализ его содержимого и коррекция поля Content-Type в заголовках ответа сервера
- MimeTypeSubst — подстановка типа загружаемых данных (например, «image/png8bit=image/png»).
- TILERLEFT, TILERRIGHT, TILERTOP, TILERBOTTOM — параметры для обрезки скачиваемых тайлов соответственно слева, справа, сверху и снизу. Если получившийся прямоугольник не совпадает с квадратом 256×256, он ещё и растягивается или сжимается до этого размера.
- UsePreloadPage — если равно 1, использовать предварительно загружаемую страницу (обязательно следует указать её адрес).
- PreloadPage — адрес предварительно загружаемой страницы.
- RequestHead — пользовательские HTTP-заголовки (headers), передаваемые на сервер. Поля должны отделяться символами
\r\n(пример:RequestHead=Referer: maps.kosmosnimki.ru\r\nConnection: Keep-Alive). - Version — версия тайлов, соответствует переменной Version в
GetUrlScript.txt. - MaxConnectToServerCount — максимальное число потоков. Значение по умолчанию устанавливается в секции [ZmpDefaultParams] файла
SASPlanet.ini - IsUseDownloaderInScript=1 - использование скачивания внутри скрипта добавить отсюда
- UseMemCache - использовать кэш в памяти (при CacheType=9 (RAM-кэш) отключение данной опции приведёт к ошибке), включено по-умолчанию
- MemCacheCapacity - количество тайлов кэшируемых в память. По-умолчанию = 100
- MemCacheTTL - время жизни тайлов (в миллисекундах), кэшируемых в память. По-умолчанию = 60000 мс. (1 мин)
- MemCacheClearStrategy - стратегия очистки (по TTL) кэшируемых в память тайлов. Принимает значения:
- 0 - удалять ВСЕ тайлы из RAM-кэша, если истёк TTL у самого СТАРОГО тайла;
- 1 - удалять ВСЕ тайлы из RAM-кэша, если истёк TTL у самого МОЛОДОГО тайла (включён по-умолчанию);
- 2 - удалять только те тайлы, у которых истёк TTL;
- 3 - НЕ удалять тайлы по TTL.
- RestartDownloadOnMemCacheTTL - автоматически перезакачивать тайлы в пределах видимой области экрана при очистке RAM-кэша (работает только если UseMemCache=1). По-умолчанию отключено.
- License=© - текст лицензии, который будет выводиться в левом верхнем углу карты. Требуется для соблюдения условий распространения некоторых карт.
- LayerZOrder - порядок отображения слоёв, по умолчанию 0. Слои с большим значением будут отображаться поверх слоев с меньшим значением
- IsReadOnly=1 - использовать кэш в режиме «Только чтение»
- IteratorSubRectSize - размеры по вертикали и горизонтали, измеряемые в стандартных тайлах (256х256 пикселей) при скачивании так называемых «мегатайлов», то есть тайлов с размерами более чем 256х256 пикселей. (Только в SACS)
- IteratorSubRectAlign - если 0 - всё по умолчанию, если не 0 (1 или 2), то осуществляется точная привязка к размеру мегатайла. Если же не 1, а 2 - то будет дополнительно увеличен размер просматриваемой области, чтобы возможно было скачать даже, например, один левый верхний тайл в режиме кэш+интернет при сдвиге окна влево и вверх. Толкование малопонятное, интересующимся смотреть здесь. Только в SACS.
Раздел [ViewInfo]
- EPSG — код проекции карты при выводе на экран.
В ночных версиях появилась возможность использовать более продвинутый хоть и медленный парсер kml, c поддержкой чтения оформления меток, линий и полигонов или принудительно задать свои настройки для конкретного zmp. Для того чтобы включить и настроить эти функции используются следующие разделы:
Раздел [PARAMS_Vector]
- UseAppearance — если равно 1, то включается использование оформления из zmp и загруженных векторных тайлов
Раздел [PARAMS_Vector_Point] Настройки оформления точек.
- IconName — имя иконки по-умолчанию
- IsForceIconName — если равно 1 (это значение по-умолчанию), то будет принудительно использовать заданную в параметре IconName, даже если парсер смог считать имя иконки из праметров точки
- IconSize — размер иконки по-умолчанию
- IsForceIconSize — если равно 1 (это значение по-умолчанию), то будет принудительно использовать размер иконки заданный в IconSize, даже если парсер смог считать размер из праметров точки
Раздел [PARAMS_Vector_Line] Настройки оформления линий
- LineColor — цвет линии по-умолчанию
- IsForceLineColor — если равно 1 (это значение по-умолчанию), то будет принудительно использовать цвет из LineColor, даже если парсер смог считать настройки из параметров линии
- LineWidth — толщина линии по-умолчанию
- IsForceLineWidth — если равно 1 (это значение по-умолчанию), то будет принудительно использовать толщину линии заданную в LineWidth, даже если парсер смог считать настройки из параметров линии
Раздел [PARAMS_Vector_Poly] Настройки оформления полигонов
- LineColor — цвет границы полигона по-умолчанию
- IsForceLineColor — если равно 1 (это значение по-умолчанию), то будет принудительно использовать цвет из LineColor, даже если парсер смог считать настройки из параметров полигона
- LineWidth — толщина границы полигона по-умолчанию
- IsForceLineWidth — если равно 1 (это значение по-умолчанию), то будет принудительно использовать толщину линии заданную в LineWidth, даже если парсер смог считать настройки из параметров полигона
- FillColor — цвет заливки полигона по-умолчанию
- IsForceFillColor — если равно 1 (это значение по-умолчанию), то будет принудительно использовать цвет из FillColor, даже если парсер смог считать настройки из параметров полигона
