Спецификация

Название тайловый слой (от англ. tile - плитка) обусловлено тем, что получаемое такими слоями изображение некоторой карты составляется из набора заранее подготовленных картинок фиксированного размера т.н. тайлов, которые размещаются на плотной сетке рядом друг с другом (как плитка в ванной, только без зазоров).

Тайлы подготавливаются таким образом, что при максимальном масштабе вся карта покрывается одним единственным тайлом, который изображает всю площадь карты, но делает это наименее детализировано, как бы “с высоты птичьего полёта”. При минимальном же масштабе карта покрывается достаточно большим количеством тайлов, каждый из которых максимально детализировано изображает соответствующий ему участок карты. Множество доступных масштабов карты от максимального до минимального равномерно разбивается на конечное число, каждому из которых ставится в соответствие целочисенное обозначение, это так называемый зум (от англ. zoom level - уровень увеличения/уровень масштабирования), который принимает значение 0 для максимального масштаба, и некоторое n для минимального, как правило n = 18, но может быть как меньше так и больше.

Любой тайловый слой запрашивает подготовленные таким образом изображения у специализированных тайловых сервисов, сообщая им зум и координаты изображений, соответствующих просматриваемой области карты. Однако т.к. для любого значения зума сетка состоит из конечного числа тайлов, а именно 2^(zoom*2) (т.е. 1, 4, 16, 64, …), то географические координаты просматриваемой области карты, перед обращением к сервису, преобразуются в целочисленные координаты тайловой сетки для указанного зума. И вот по способу “маркировки” тайлов этими целочисленными координатами, и способу преобразования географических координат в целочисленные координаты сетки, тайловые сервисы делятся на два типа:

  • TMS (Tile Map Service) - разновидность тайловых сервисов, реализующих спецификацию TMS, разработанную организацией The Open Source Geospatial Foundation;
  • И так называемые Slippy map - разновидность тайловых сервисов в свое время разработанная и популяризованная сообществом Open Street Map, а затем перенятая Google-картами, и прочими подобными сервисами, также сделавшими свой вклад в популяризацию этой разновидности;

Вторые более популярны, но никаких преимуществ перед использованием TMS они не дают, так же как TMS не дают никаких преимуществ перед Slippy map. Как уже было сказано основная раница в том как тайлы “маркируются” целыми числами и как при обращнии к сервису нужно преобразовывать географические координаты в целочисленный координаты сетки.

В сервисах TMS координатные оси сетки направлены традиционным образом, а координаты начала отсчёта тайловой сетки (minx, miny):

В Slippy map сервисах ось Y инвертирована, а координаты начала отсчёта тайловой сетки (minx, maxy):

Для общего понимания разницы этого достаточно, формулы приведения координат здесь рассматривать не будем.

В обоих вариантах сервисов каждый тайл однозначно идентифицируется URL-ом, по которому будет осуществляться запрос на получение изображения. И в общем случае этот URL-имеет вид http://{s}.somedomain.com/{z}/{x}/{y}.png где {s} это имя одного из доменов верхнего уровня, этот параметр опционален и при его наличии позволяет клиенту равномерно нагружать запросами все предоставляемые сервисом мощности, {z}, {x}, {y} соответственно зум и координаты запрашиваемого изображения в тайловой сетке, а в конце указан желаемый формат результирующего изображения, и если сервис поддерживает несколько форматов, то можно указывать любой из них.

Ember-компонент слоя и его свойства

Ember-компонент реализующий работу с тайловыми слоями располагается по пути ember-flexberry-gis/addon/components/layers/tile-layer и поддерживает следующий набор свойств, которые соответствуют одноименным с ними настройкам в объекте settings в модели слоя:

Наименование свойства Тип свойства Описание
url String Шаблон URL-а, для осуществления запросов на получение тайлов

Примеры использования

Пример добавления на карту тайлового слоя Open Street Map (OSM):

Пример добавления на карту тайлового слоя Google карты:

Пример добавления на карту тайлового слоя Google карты со спутниковыми снимками:

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

Обратите внимание, что при добавлении любого тайлового слоя обязательно указывается система координат, для OSM это EPSG:3857, для Google EPSG:4326 (хотя поддерживаются и другие системы координат), другими сервисами могут использоваться еще какие-то системы координат. Если, при добавлении тайлового слоя, указать систему координат, которая не поддерживается сервисом, тогда тайлы будут визуально смещены, или даже перепутаны.