Map Tiles — это просто разделение мира на индексированную сетку. Это позволяет вам получать доступ к данным карты и использовать их эффективно и динамично в нескольких картографических масштабах. API Map Tiles дает вам доступ к нескольким тематическим геоданным, включая курируемые Google:
Фрагменты изображений дорожной карты на основе векторных топографических данных с картографическим стилем Google.
Ортофотосъемка, выполненная с помощью спутниковых и воздушных камер, которые обеспечивают получение изображений Земли сверху вниз (в надире).
Контурные карты отмывки рельефа.
Все 2D-плитки карты имеют географическую привязку и выровнены друг с другом. Они выбираются на основе географического охвата области просмотра и уровня масштабирования. Уровни масштабирования варьируются от нуля (для просмотра мира целиком) до 22 (для просмотра улиц и кварталов).
Темы карты
Вы можете получить фрагменты карт для следующих тем.
Тема карты | Описание |
---|---|
Дорожная карта | Дороги, здания, достопримечательности и политические границы |
Спутник | Фотоснимки, сделанные из космоса |
Местность | Контурная карта, на которой показаны природные особенности, такие как растительность. |
Чтобы запросить фрагменты карты из API Map Tiles, сначала необходимо запросить токен сеанса . Токен сеанса отслеживает текущее состояние вашей карты и области просмотра. При настройке токена сеанса необходимо задать значение mapType
, соответствующее желаемой теме карты. Затем необходимо включить токен сеанса в каждый из ваших запросов к API Map Tiles.
Запросы информации о просмотре
Область просмотра определяет размер поля, обрамляющего мировую сцену. Запросы информации об области просмотра возвращают сведения о фрагментах карты, которые составляют текущую область просмотра. Причина, по которой вы запрашиваете информацию об области просмотра, заключается в том, чтобы избежать запроса изображений на уровнях масштабирования, которых не существует.
Например, для большинства городов доступны изображения с коэффициентом масштабирования 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). Все параметры обязательны.
Информация об ответах в области просмотра
Ответ viewport сообщает вам, какие области имеют изображения и на каких уровнях масштабирования. Ответ viewport information имеет следующую форму.
{
"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 Policies .
-
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
};
}