Формат zmp и создание карт

Каждый картографический сервис в SASPlanet описывается в «zmp». Это zip-архив или папка с расширением .zmp, в которой хранится текстовое описание сервиса в особом формате. Один «zmp» соответствует одной карте и независим от других. Сама аббревиатура является производным от слов: zip map.

Готовые zmp распространяются через git-репозиторий отдельно от SAS.Planet. Сразу после установки программы обновите набор zmp.

Общий принцип

SAS.Planet скачивает тайлы с сервера и сохраняет их в кеш. В zmp описывается, как формируется ссылка на конкретный тайл и особенности HTTP-запроса на скачивание с конкретного сервера. При создании zmp чаще всего копируют поведение браузера при просмотре online-карт. Удобно пользоваться встроенными в браузер инструментами веб-разработчика, так, для Firefox нажмите F12, после чего откройте веб-страницу с картой.

Обучающие примеры:

Простой пример

Простой пример с плейсхолдерами

Пример порезки на тайлы

Описание Паскаль скриптов (GetUrlScript.txt)

Как скачивать нужные масштабы и не скачивать ненужные

Сложный пример (подключение dll)

Структура ZMP

Коллекция zmp карт располагается в подпапках Maps программы. Изначально в программе использовались только zip-архивы с расширением .zmp, затем появилась возможность хранить описание в неархивированных папках. Каждый zmp может содержать следующие файлы и папки:

params.txt (обязательно) — параметры карты;

GetUrlScript.txt (обязательно, если не используется упрощенное добавление карт) — скрипт, отвечающий за формирование ссылки на тайл карты и пользовательских заголовков;

info.txt — словесное описание карты в HTML;

24.bmp — файл иконки, отображаемой на панели инструментов. Содержимое этого файла — изображение произвольного размера в формате BMP, PNG, ICO и других (но с расширением BMP). В ранних версиях программы требовались иконки 18.bmp (BMP, 18×18 pix, цвет фона RGB(255,0,255)) и 24.bmp 24×24 pix, цвет фона RGB(255,0,255)).

графические файлы, ссылка на которые размещена в info.txt (например, легенда карты);

EmptyTiles — директория, содержащая образцы тайлов, которые не будут сохраняться после скачивания с сервера (например, полностью прозрачные тайлы). В некоторых случаях сервер отдаёт «пустышки» в формате, отличном от формата обычных тайлов, например, обычные тайлы — jpg, а «пустышка» — png. SAS.Planet же переписывает все принятые тайлы в формат, указанный в параметре Ext (см. ниже). В таких случаях в качестве образцов необходимо использовать исходные файлы, отправленные сервером, а не брать их из кэша программы.

params.txt

Параметры файла params.txt:

Раздел [PARAMS]

asLayer — если равно 1, карта используется как слой, накладываемый поверх основной карты.

pnum — порядковый номер карты в меню. Не обязателен.

GUID — случайный номер, можно сгенерировать онлайн

ParentSubMenu — название пункта родительского меню для данной карты на русском языке.

ParentSubMenu_en — название пункта родительского меню для данной карты на английском языке.

ParentSubMenu_uk — название пункта родительского меню для данной карты на украинском языке.

существует возможность указать иерархическое меню разделив пункты символом «\» (например ParentSubMenu=Google\Планеты)

name — имя карты на русском языке.

name_en — имя карты на английском языке.

name_uk — имя карты на украинском языке.

CacheType — можно переопределить тип кэша из списка в исходном коде, в который будут записываться тайлы данной карты. NB! Некоторые форматы кеша подходят только для экспорта тайлов.

#	Название	Путь	Комментарий
0	По умолчанию
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. Легко подключается к JOSM: tms:file:///home/user/SAS.Planet/cache_ma/vesat/{z}/{x}/{y}.jpg 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	cache_tms/ /{z}/{x}/{-y}.{ext}	Тикет 2848. Спецификация TMS
5	Google Earth	cache_ge/
51	GoogleEarth Terrain
6	BerkeleyDB	cache_db/	Wikipedia
61	BerkeleyDB (Versioned)
7	DBMS (СУБД)
71	SQLite3	cache_sqlite/ /z{z+1}/0/0/0.0.sqlitedb	Тикет 1376
72	MBTiles	Экспорт *.mbtiles	Тикет 1376, OSM wiki
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. По-умолчанию включён режим 1.

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, даже если парсер смог считать настройки из параметров полигона

Некоторые из параметров карты могут быть изменены внутри программы без редактирования файла params.txt. Для этого нужно зайти в Параметры→Параметры карты или нажать Ctrl+Alt+P. Пользовательские изменения настроек карт сохраняются в файле Maps/maps.ini.

GetUrlScript.txt

Файл GetUrlScript.txt содержит скрипт, формирующий полные адреса ссылок на тайлы данной карты. Скрипты пишутся на обычном Pascal.

Основными параметрами тайла являются масштаб и координаты по осям x и y. Масштаб обозначается переменной GetZ (начинается с единицы), координаты по осям x и y - соответственно переменными GetX и GetY. Эти переменные привязаны к тайловой сетке, принятой для Google Maps.

info.txt

Файл info.txt содержит текстовую информацию о карте. Используется синтаксис HTML (в частности, абзацы надо разделять тегом <BR>). Также возможен вывод графических файлов (например, легенды карты), через тег <img src=”path\to\image.bmp”/>. Ссылаться можно в т.ч. на изображения в папке zmp.