Обзор | Экспорт тайлов | 2GIS Documentation
Экспорт тайлов
Личный кабинет

Обзор

Экспорт векторных тайлов 2ГИС в формате MVT (Mapbox Vector Tiles) — это альтернативный способ получения карты 2ГИС для использования в вашей ГИС-системе. В данном документе описывается процесс получения тайлов для интеграции в целевую систему.

Mapbox Vector Tiles (MVT) — публичный стандарт представления векторных географических данных. Это распространённый стандарт, с которым умеют работать большинство современных ГИС-систем.

Воспользуйтесь экспортом векторных тайлов 2ГИС в формате MVT, если верны оба утверждения ниже:

  • Целевая ГИС-система не поддерживает формат векторных тайлов 2ГИС или использование MapGL JS API.
  • Целевая ГИС-система может работать с векторными тайлами в формате MVT.

Экспортируемые тайлы 2ГИС в формате MVT содержат следующие типы данных:

  • Полигоны (одноцветные плоские области: районы, озера, 2D-здания и т.д.);
  • Линии (дороги, тонкие реки);
  • Точки (иконки, надписи);
  • Полигоны с высотой (3D-здания);
  • Пунктирные линии («зебры», железные дороги);
  • Надписи вдоль линий (подписи улиц).

Типы данных, которые не поддерживаются при экспорте тайлов, но доступны в MapGL JS API:

  • Линии с высотой (3D-заборы);
  • Линии из стрелок (показывают направление движения на дорогах);
  • 3D-модели (деревья, реалистичные здания);
  • Точки с физическим размером (разметка на дорогах);
  • 3D-полигоны (развязки, насыпи).

Пример использования тайлов 2ГИС в формате MVT с использованием библиотеки mapbox-gl-js.

<!doctype html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>2GIS style</title>
        <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" />
        <link href="https://api.mapbox.com/mapbox-gl-js/v3.5.1/mapbox-gl.css" rel="stylesheet" />
        <script src="https://api.mapbox.com/mapbox-gl-js/v3.5.1/mapbox-gl.js"></script>
        <style>
            body {
                margin: 0;
                padding: 0;
            }

            #map {
                position: absolute;
                top: 0;
                bottom: 0;
                width: 100%;
            }

            #zoom-level {
                position: absolute;
                padding: 5px;
                z-index: 1;
                text-shadow: -1px -1px 2px #fff;
            }
        </style>
    </head>

    <body>
        <div id="zoom-level"></div>
        <div id="map"></div>
        <script>
            mapboxgl.accessToken =
                'pk.eyJ1IjoidGFydGlrb3YiLCJhIjoiY2p1NGI0dGQzMGZ6YzN5czdrdTYwaGlvcyJ9.-JqYeHH6iwTYDuD_AfTulg';

            const map = new mapboxgl.Map({
                container: 'map',
                style: 'https://docs.2gis.com/mapbox/style/style.json',
                zoom: 14,
                center: [37.630448, 55.753282],
                transformRequest: (url, resourceType) => {
                    const styleProtocol = 'style://';
                    if (url.startsWith(styleProtocol)) {
                        url = 'https://docs.2gis.com/mapbox/style/' + url.substr(styleProtocol.length);
                        url = new URL(url).href;
                    }
                    return {
                        url
                    };
                }
            });

            const zoomLevelDisplay = document.getElementById('zoom-level');
            function updateZoomLevel() {
                const zoom = map.getZoom().toFixed(2);
                zoomLevelDisplay.textContent = `Zoom: ${zoom}`;
            }
            map.on('zoom', updateZoomLevel);
            updateZoomLevel();
        </script>
    </body>
</html>