Обзор 2D Tiles

Разработчики из Европейской экономической зоны (ЕЭЗ)

Пример дорожной картыФрагменты карты – это просто деление мира на индексированную сетку. Она позволяет эффективно и динамически получать доступ к данным карт и использовать их в различных картографических масштабах. Map Tiles API предоставляет доступ к нескольким тематическим наборам геоданных, в том числе к следующим наборам, подготовленным Google:

  • Фрагменты изображений дорожной карты на основе векторных топографических данных с картографическим стилем Google.

  • Ортофотографии, сделанные спутниковыми и бортовыми камерами, которые обеспечивают съемку Земли сверху вниз (надир).

  • Контурные карты с отмывкой рельефа.

Все двумерные фрагменты карт имеют географическую привязку и выровнены относительно друг друга. Они выбираются на основе географического охвата области просмотра и уровня масштабирования. Уровни масштабирования варьируются от 0 (карта всего мира) до 22 (улицы и кварталы).

Темы карт

Вы можете получить фрагменты карт для следующих тем.

Тема карты Описание
План развития Дороги, здания, объекты инфраструктуры и политические границы
Спутник Фотографии, сделанные из космоса.
Рельеф Контурная карта, на которой показаны природные объекты, например растительность

Чтобы запросить фрагменты карты из Map Tiles API, сначала нужно запросить токен сеанса. Токен сеанса отслеживает текущее состояние карты и области просмотра. При настройке токена сеанса необходимо задать значение mapType, соответствующее нужной теме карты. Затем вы должны включать токен сеанса в каждый запрос к Map Tiles API.

Запросы информации об области просмотра

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

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

Запрос области просмотра – это HTTPS-запрос GET в следующем формате:

curl "https://tile.googleapis.com/tile/v1/viewport?session=YOUR_SESSION_TOKEN&key=YOUR_API_KEY&zoom=zoom&north=north&south=south&east=east&west=west"

Запрос содержит следующие поля:

zoom
Уровень масштабирования области просмотра.
north, south, east, west
Самые северные, южные, восточные и западные точки в области просмотра, выраженные в градусах. Значения для севера и юга должны находиться в диапазоне от -90 до 90, а для востока и запада – от -180 до 180. Чтобы указать границы, пересекающие антимеридиан, можно задать положительное значение для запада (например, 170) и отрицательное для востока (например, -170). Все параметры обязательны.

Ответы с информацией об области просмотра

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

{
  "copyright": "Map data ©2023",
  "maxZoomRects": [
    {
      "maxZoom": 19,
      "north": 90,
      "south": -90,
      "east": 180,
      "west": -180
    },
    {
      "maxZoom": 9,
      "north": 90,
      "south": -90,
      "east": 180,
      "west": -180
    },
    {
      "maxZoom": 14,
      "north": 84.375,
      "south": -84.375,
      "east": 180,
      "west": -180
    }, ...
  ]
}

Тело ответа содержит следующие поля.

copyright
Содержит строку с указанием авторства, которую необходимо показывать на карте вместе с фрагментами схемы и спутниковых снимков. Подробную информацию вы найдете в правилах Map Tiles API.
maxZoomRect
Содержит массив ограничивающих прямоугольников, которые перекрываются с текущей областью просмотра. Также содержит максимальный уровень масштабирования, доступный в каждом прямоугольнике.

Функции координат фрагмента

В большинстве языков программирования есть инструменты (простые функции) для преобразования пар широты и долготы в координаты фрагмента при определенном уровне масштабирования. Рассмотрим следующий пример кода JavaScript, который сначала преобразует latLng в точку, а затем точку – в координаты фрагмента.

var TILE_SIZE = 256;

function fromLatLngToPoint(latLng) {
  var mercator = -Math.log(Math.tan((0.25 + latLng.lat() / 360) * Math.PI));
  return {
    x: TILE_SIZE * (latLng.lng() / 360 + 0.5),
    y: TILE_SIZE / 2 * (1 +  mercator / Math.PI)
  };
}

function fromLatLngToTileCoord(latLng, zoom) {
  var point = fromLatLngToPoint(latLng);
  var scale = Math.pow(2, zoom);

  return {
    x: Math.floor(point.x * scale / TILE_SIZE),
    y: Math.floor(point.y * scale / TILE_SIZE),
    z: zoom
  };
}