Работа с Tile-серверами


Многие ГИС имеют возможность предоставлять картографическую информацию по заданной территории в виде растровых изображений, нарезанных на небольшие части -  плитки или тайлы (tile).  Часто в качестве тайлов используются квадраты со стороной 256 пикселей. Из этих плиток формируется изображение всей территории в нескольких фиксированных масштабах. Все плитки одного масштаба образуют уровень (level). Уровень на единицу больше данного содержит в четыре раза больше плиток. Т.е. каждая плитка одного уровня представляется на следующем уровне четырьмя плитками. Совокупность плиток всех уровней образует тайловую систему (Tile System).
Система Zulu предоставляет функциональные возможности по использованию картографических данных с таких Tile-серверов в качестве слоев карт (см. Слой Tile-сервера) и нарезке растровых слоев на плитки для последующего использование на Tile-сервере (см. Создание данных для Tile-сервера).

Примечание: Функционал системы Zulu по загрузке данных с Tile серверов не предназначен для скачивания данных защищенных авторским правом без разрешения их правообладателями. Реальные названия серверов используются только для примера реализации соответствующих моделей формирования запросов.
Функции загрузки данных с Tile-серверов предназначены для доступа к  Tile-серверам специально организованным для работы с системой Zulu, либо к серверам в условиях использования которыми явно оговорено разрешение на скачивание данных с помощью сторонних программ.

Используемые проекции

Рассмотрим две основные географические проекции, для которых строится тайловая система на весь земной шар.

Проекция Меркатора

На нулевом уровне вся Земля помещается в одну квадратную плитку со стороной, равной длине экватора. Для остальных уровней количество плиток определяется по формуле:

N = H * W
H = W = 2^Z, где  H – количество плиток по высоте,
W – количество плиток по ширине,
Z – номер уровня, начиная с нуля

Для тайловой системы в проекции Меркатора часто используются две системы координат:

  • EPSG:3395 - WGS 84 / World Mercator  на сфероиде. Эта проекция используется такими сервисами как Космоснимки, Яндекс карты, Карты mail.ru (спутник) и др.
  • EPSG:3857 - WGS 84 / Pseudo-Mercator (Spherical Mercator) на сфере. Эта проекция используется такими сервисами как Google, Virtualearth, Maps-For-Free, Wikimapia, OpenStreetMap, Роскосмос, Навител, Nokia и др.

Проекция plate carrée (широта/долгота)

На нулевом уровне вся Земля помещается в две квадратные плитки с координатами (-90, -180, 90, 0) и (-90, 0, 90, 180). Для остальных уровней количество плиток определяется по формуле:

N = H * W, где

H = 2^Z количество плиток по высоте,
W = (2^Z)*2 количество плиток по ширине,
Z – номер уровня, начиная с нуля

 

В случае широты/долготы, как правило, используется проекция EPSG:4326 – WGS 84.

Система координат тайловой системы

Каждая плитка в тайловой системе задается тремя параметрами: номером уровня (Z), положением плитки по горизонтали (X) и положением плитки по вертикали (Y).

Направление отсчета местоположения плитки по горизонтали, как правило, идет слева на право (с запада на восток).

Направление отсчета местоположения плитки по вертикали может идти как сверху вниз (на юг), так и снизу вверх (на север).

Начало отсчета системы (положение плитки с параметрами X=0, Y=0) тоже может задаваться по-разному.
На рисунках приведено несколько примеров систем координат с разным началом отсчета и ориентацией осей для уровня Z=2

Формирование запроса к Tile-серверу

Для получения растрового изображения плитки с параметрами X, Y, Z  по протоколу HTTP следует сформировать и отправить на сервер запрос соответствующий следующему шаблону:

http://<хост>:<порт>/<URL-путь>?<параметры>

Запрос содержит информацию об имени сервера, названии и настройке карты, фрагмент которой требуется получить. Для разных серверов формирование запроса может происходить по-разному. Но, в любом случае, в пути, в параметрах,  в хосте или в их комбинации должна содержаться информация об X, Y, Z.
При описании шаблона запроса к серверу необходимо знать, какую модель запроса он поддерживает.

На данный момент Zulu поддерживает следующие модели обращения к Tile-серверам:

  1. Модель XYZ
  2. Модель Bing Maps Tile System
  3. Модель OpenStreetMap
  4. Модель Yahoo
  5. Модель Роскосмос
  6. Модель Navitel
  7. Модель Wikimapia
  8. Модель Maps-For-Free
  9. Модель кэша SAS.Планета

Cлой Tile-сервера

Слой Tile-сервера системы Zulu – это особый тип слоя, который позволяет работать с данными тайловых систем, соответствующих одной из моделей, описанных выше.
Параметры Tile-сервера хранятся в описателе слоя, который представляет собой  текстовый файл с расширением zww. Структуру описателя Tile-сервера см. Параметры описателя Tile-сервера

Настройка и подключение описателя Tile-сервера

Настройка описателя Tile-сервера и его подключения в качестве слоя карты выполняется с помощью диалога Параметры Tile-сервера программы Zulu.  Для открытия диалога выполните команду главного меню программы Zulu Слой|Tile-сервер|Задать.


В группе настроек Слой задается описатель Tile-сервера используемый в качестве слоя:

  • В поле Имя файла описателя отображается название выбранного файла-описателя слоя;
  • В поле Название слоя задается название слоя карты, в котором отображаются графические данные с Tile-сервера. В объектной модели соответствует свойству Layer.UserName;
  • Для того чтобы выбрать уже существующий файл-описатель нажмите кнопку Открыть и выберите файл-описатель на диске;
  • Для того чтобы очистить параметры описателя и задать их с нуля, нажмите кнопку Новый;
  • По завершении редактирования параметров описателя, нажмите кнопку Сохранить чтобы сохранить изменения в текущем файле-описателе, либо кнопку Сохранить как, чтобы сохранить новый файл-описатель. 

В группах полей Запрос и Уровни задаются параметры обращения к Tile-серверу (см. Формирование запроса к Tile-серверу). Часть полей данного раздела могут становиться неактивными в том случае если они не используются в выбранной модели обращения к серверу:

  • В поле запрос задается строка шаблона запроса, зависящая от используемой сервером модели запроса. При использовании модели кэша SAS.Планета, нажав кнопку  справа от поля  можно указать путь к папке кэша.
    Для модели «Zulu Server» параметр должен содержать URL тайлового слоя на ZuluServer, например:

    Address: zulu://zs.zulugis.ru:6473/osm/Relief_Maps-For_Free.zl

    Для всех остальных моделей параметр должен содержать шаблон HTTP запроса, обязательно начинаясь с указания протокола “http://”, например:

    Address: http://www.maps-for-free.com/layer/relief
  • В поле со списком Модель выбирается используемая модель обращения к серверу;
  • В поле со списком Проекция выбирается код используемой картографической проекции;
  • В поле со списком Порядок координат задается последовательность указания параметров X и Y в модели «OpenStreetMap»;
  • В поле Расширение задается расширение запрашиваемого файла изображения. Применяется для моделей «OpenStreetMap» и «Map-For-Free». Для остальных моделей расширение изображения либо жестко задано, либо определяется динамически;
  • В полях Широта и Долгота группы настроек Начало отсчета указываются, соответственно, широта и долгота точки начала отсчета;
  • В полях По широте и По долготе группы настроек Ориентация осей задается ориентация осей Y и X;
  • В полях со списком Минимальный и Максимальный группы настроек Уровни задаются минимальный и максимальный уровень запрашиваемых с сервера плиток.
  • При установке флажка Использовать кэш запрашиваемые данные кэшируются, путь к папке кэша указывается в поле Папка кэша (см. Кэширование данных Tile-сервера).

После завершения настройки параметров доступа к Tile Server нажмите кнопку Закрыть и подтвердите добавление слоя в карту

Кэширование данных Tile-сервера

При работе с Tile-сервером кэширование – это сохранение на жестком диске полученных с сервера растровых изображений с целью их дальнейшего многократного использования без повторных обращений к серверу.
Если кэш содержит достаточное количество данных для работы, пользователь может работать с этими данными off-line, не загружая глобальную сеть.
Изображения, сохраняемые на диске, должны быть определенным образом организованы.
Текущая версия Zulu и ZuluServer для организации кэшируемых файлов использует файловую структуру кэша программы Sas.Планета.

<Корневая папка>\z[Z+1]\[X/1024]\x[X]\[Y/1024]\[Y].<EXT>

Следует отметить, что независимо от системы отсчета плиток в исходной тайловой-системе, в кэш плитки складываются всегда в системе координат Lat0 = 90, Lon0 = -180, ось X – на восток, ось Y - на юг. 
То есть для записи в кэш нового файла, его исходные параметры X, Y, Z сначала преобразуются в новые параметры X, Y, Z для кэша. При совпадении систем координат тайлового слоя и кэша, параметры X, Y, Z не изменятся.

Корневая папка.
Местоположение корневой папки кэша, создаваемого Zulu или ZuluServer на компьютере, определяется следующим образом:

<Папка приложений для всех пользователей>\Zulu\ztc_<Код кэша>\

Папка приложений для всех пользователей – это системная папка, для создания приложениями данных для всех пользователей компьютера.
В зависимости от используемой операционной системы, путь папки может быть разным.

Для Windows XP -  C:\Documents and Settings\All Users\Application Data\
Для Windows 7   -  C:\ProgramData\

Код кэша – числовой код, автоматически формируемый Zulu, как контрольная сумма строки с шаблоном запроса (значение параметра Address в описателе).

Пример:
 

Address: http://www.maps-for-free.com/layer/relief/

Папка кэша:
WindowsXP -  C:\Documents and Settings\All Users\Application Data\Zulu\ztc_2138735954\
Windows 7  -  C:\ProgramData\Zulu\ztc_2138735954\

Для плитки Z = 15, X = 19141, Y = 9525 имя файла в формате PNG в Windows 7 сформируется так:
C:\ProgramData\Zulu\ztc_2138735954\z16\18\x19141\9\y9525.png

Выбор общей для всего компьютера папки и создание единого кода для разных описателей с одинаковым шаблоном запроса, позволяет избежать дублирования кэша для одних и тех же данных.

Варианты кэширования

Возможны несколько вариантов использования механизма кэширования.

Первый вариант. Описатель слоя расположен на том же компьютере и в шаблоне запроса указана связь с данными по протоколу HTTP.

Address: http://<шаблон запроса>

В этом случае запросы на получение плиток идут непосредственно к указанному в шаблоне серверу. Полученные плитки складываются в кэш на этом компьютере.
При этом если в организации несколько компьютеров обращаются к одному и тому же ресурсу глобальной сети, на каждой машине будет создаваться свой кэш, а общая нагрузка на глобальную сеть возрастет пропорционально количеству пользователей.

Второй вариант. Описатель тайлового слоя можно разместить на компьютере, где установлен ZuluServer и опубликовать данный слой как слой ZuluServer, создав соответствующий описатель.
Например, если в область данных сервера поместить описатель sample.zww, то для его публикации на сервере достаточно создать в той же папке текстовый описатель sample.zl с одной строкой: “Path: sample.zww”

В этом случае клиенты ZuluServer будут обращаться за данными не прямо к серверу тайловых данных, а к тайловому слою, опубликованному на ZuluServer (например, zulu://zs_host:6473/sample.zl).

При обращении клиента к ZuluServer за плиткой, ZuluServer проверит, нет ли такого изображения в кэше сервера. Если изображение найдено в кэше сервера, оно будет отправлено клиенту без обращения в глобальную сеть. Если изображение в кэше отсутствует, ZuluServer запросит его из глобальной сети, положит себе в кэш и отправит клиенту.

Таким образом, ZuluServer может выступать как посредник в предоставлении данных тайл-сервера клиенту.

Удобство такого варианта в том, что для всех клиентов ZuluServer кэш будет создаваться в одном месте, на диске сервера, сильно сокращая количество запросов в глобальную сеть и существенно экономя дисковое пространство клиентских машин.
Кроме того, при таком подходе клиентские машины вообще могут не иметь доступа в интернет.

Третий вариант. Кэш располагается на локальном компьютере, но данные для него получать не из глобальной сети, а от ZuluServer.

Для этого нужно создать на локальной машине описатель, с моделью “Тайловый слой ZuluServer”  и в шаблоне запроса указать имя тайлового слоя на сервере:

Method: ZS
Address: zulu://zs_host:6473/sample.zl

В этом случае для получения изображения клиент проверяет, нет ли его в локальном кэше. Если нет, клиент обращается за изображением на ZuluServer.
ZuluServer проверяет, нет ли изображения в его кэше. Если нет, ZuluServer обращается за изображением в глобальную сеть, получает изображение, сохраняет его в своем кэше, и отправляет клиенту.
Клиент, получив изображение от ZuluServer, кладет изображение в свой кэш.

При таком комбинированном варианте клиент нагружает ZuluServer только по необходимости, а ZuluServer только по необходимости загружает глобальную сеть.

Управление кэшированием данных Tile-сервера

Система Zulu позволяет проводить дополнительное управление процессом кэшированием данных с Tile-сервера – выполнять принудительное кэширование всех, или части графических данных, удалять отдельные слои данных, либо весь кэш. Управление кэшированием на удаленном сервере ZuluServer возможно только при наличии соответствующих прав.
Для открытия диалога работы с кэшем, выполните команду меню Zulu – Слой|Tile-сервер|Кэшировать.

Для выполнения принудительного кэширования данных Tile-сервера выполните следующие действия:

  • Нажмите кнопку  справа от поля Имя файла и выберите файл-описателя для доступа к требуемому Tile-серверу. В поле Название отобразится название сервера, а в поле Папка кэша путь к папке кэша;
  • В полях Диапазон уровней укажите минимальный и максимальный уровни диапазона кэшируемых тайлов;
  • В поле Область кэширования укажите, какую часть карты следует кэшировать – отображаемую в данный момент область карты, габариты карты полностью, в пределах габаритов какого-либо слоя карты, либо его объектов;
  • Если в качестве области кэширования были выбраны габариты слоя, или его объектов, в поле Слой требуется выбрать необходимый слой. Также можно установить флажок Только выделенные объекты, чтобы в слое учитывались только выделенные его объекты;
  • Нажмите кнопку Кэшировать чтобы выполнить кэширования. Процесс может занять значительное время, особенно если выбран большой диапазон уровней.

Для того чтобы удалить из кэша сервера часть уровней тайлов:

  • Нажмите кнопку  справа от поля Имя файла и выберите файл-описателя для доступа к требуемому Tile-серверу. В поле Название отобразится название сервера, а в поле Папка кэша путь к папке кэша;
  • В полях Диапазон уровней укажите минимальный и максимальный уровни диапазона удаляемых из кэша тайлов;
  • Нажмите кнопку Удалить уровни и подтвердите удаление указанного диапазона тайлов.

Чтобы полностью удалить кэш Tile-сервера:

  • Нажмите кнопку  справа от поля Имя файла и выберите файл-описателя для доступа к требуемому Tile-серверу. В поле Название отобразится название сервера, а в поле Папка кэша путь к папке кэша;
  • Нажмите кнопку Удалить весь кэш и подтвердите удаление.

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

Создание данных для Tile-сервера

Система Zulu позволяет нарезать растровые данные карты на плитки. Нарезаемые данные сохраняются в формате кэша программы SAS.Планета.

Нарезка растровых карт на плитки выполняется в диалоговом окне Создание данных для Tile-сервера . Нарезка производится для текущей карты в окне Zulu.  Для того чтобы открыть диалоговое окно выполните команду Слой|Tile-Сервер…|Создать…


Параметры нарезки карты хранятся в файле описателя zww (см. Параметры описателя Tile-сервера). Допускается создание новых нарезок и правка уже существующих.

Для создания новой нарезки карты на плитки:

  • Создайте новый файл описателя, нажав кнопку Новый, и указав путь и название файла в диалоге создания файла, причем путь можно указывать как на локальном компьютере, так и на сервере геоданных Zulu Server. Название файла описателя отобразится в поле Имя файла описателя;
  • В поле Название слоя задайте имя слоя, в котором будут отображаться нарезанные данные при их открытии в карте с помощью данного файла описателя.
  • Выберите каталог, в котором сохраняются нарезанные плитки. Если файл описателя создан на локальном компьютере, нажмите кнопку  справа от поля Папка для данных и выберите требуемый каталог. Если каталог уже занят кэшем SAS-планета действие запрещается.
    Если файл описателя был создан на сервер геоданных, кнопка    справа от поля Папка для данных будет неактивна, – введите в поле название подпапки, которая будет создана на сервере для хранения плиток;
  • В поле со списком Проекция выберите проекцию, в которой сохраняются нарезаемые данные;
  • В поле со списком Формат растра выберите тип графических файлов в которых сохраняются плитки;
  • При установке флажка Прозрачность при нарезке плиток будет сохраняться параметр прозрачности нарезаемых графических данных.
  • В полях Диапазон уровней укажите минимальный и максимальный уровни диапазона сохраняемых плиток;
  • В поле Область интересов укажите, какую часть карты следует нарезать – отображаемую в данный момент область карты, габариты карты полностью, в пределах габаритов какого-либо слоя карты, либо его объектов;
  • Если в качестве области интересов были выбраны габариты слоя, или его объектов, в поле Слой требуется выбрать необходимый слой. Также можно установить флажок Только выделенные объекты, чтобы в слое учитывались только выделенные его объекты;
  • Для выполнения процесса нарезки нажмите кнопку Сохранить.

Для редактирования параметров уже выполненной нарезки откройте существующий файл описателя, нажав кнопку Открыть и выбрав требуемый файл в диалоге выбора файлов (можно выбрать как локальный файл, так и файл на сервере геоданных ZuluServer). Название файла описателя отобразится в поле Имя файла описателя.
Если для данного описателя уже выполнялось создание плиток, изменение параметров нарезки и создания плиток недоступны и возможны только следующие действия:

  • Создание плиток для заданного диапазона уровней. Если требуется перезаписывать уже созданные для указанных уровней плитки, установите флажок Заменять существующие плитки. Для создания плиток укажите сохраняемую область карты в поле Область интересов (и, если требуется в полях Слой и Только выделенные объекты слоя), укажите диапазон уровней в полях Диапазон уровней и нажмите кнопку Создать ;
  • Удаление заданного диапазона плиток. Для удаления уровней укажите диапазон уровней в полях Диапазон уровней и нажмите кнопку Удалить уровни;
  • Удаление всех сохраненных данных кэша SAS.Планета. Для этого нажмите кнопку Удалить все данные. После удаления данных становится возможным изменить часть параметров нарезки карты в части:   проекцию, формат сохраняемых растров,  

Для закрытия диалога нажмите кнопку Выход.