Общие сведения
Пространство имён
Все компоненты JS API попадают в единое пространство имен ymaps3
и доступны только в нём.
Имена компонентов
Имя любого компонента JS API удовлетворяет двум условиям:
- начинается с префикса
YMap
; - написано в стиле CamelCase.
Примеры: YMap
, YMapMarker
, YMapListener
.
Объекты карты
Название |
Описание |
Представление в API |
Корневой объект, который координирует свои составляющие. |
Класс |
|
Объект для отображения данных. |
Классы с постфиксом |
|
Объект для загрузки данных, передает их для отображения в слои. |
Классы с постфиксом |
|
Полигон, линия, маркер. |
Класс |
|
Элемент карты с DOM-содержимым, обертка над |
Класс |
|
Объекты, которые используются для управления состоянием карты: кнопка изменения масштаба, кнопка геолокации и т.п. |
Классы с постфиксом |
|
Утилиты |
Вспомогательные объекты для работы с API. Например, |
Класс |
Иерархия объектов
Некоторые объекты могут содержать внутренние узлы-потомки, а некоторые не могут. Например, YMap
может содержать YMapTileDataSource
, а последний уже не может.
Карта
YMap
— корневой элемент в иерархии. Чтобы его инициализировать, в конструктор объекта нужно передать:
- ссылку на
HTMLElement
контейнера, в нём отобразится карта; - параметры инициализации карты.
<!-- Создайте контейнер для карты -->
<div id="root"></div>
const {YMap} = ymaps3;
// Инициализируйте карту
const map = new YMap(
// Передайте ссылку на HTMLElement контейнера
document.getElementById('root'),
// Передайте параметры инициализации карты
{
location: {
zoom: 10,
center: [25.229762, 55.289311]
}
}
);
Все объекты JS API инициализируются по своим правилам, но на карту добавляются с помощью метода addChild()
, вызванного у экземпляра карты. Удалить объекты можно симметричным методом removeChild()
:
const {YMap, YMapLayer} = ymaps3;
// Инициализируйте карту
const map = new YMap(...);
// Инициализируйте слой
const layer = new YMapLayer(...);
// Добавьте этот слой на карту
map.addChild(layer);
Слой
Слой — это визуальный компонент, который отвечает за отрисовку на карте каких-то объектов. Например, слой маркеров отображает точки на карте, а слой тайлов — саму географическую карту.
Карта может содержать произвольное количество слоев, API вас не ограничивает. Например, вы можете добавить слой, на котором будут отображены картинки с облаками, разместить под ним тайловый слой, а между ними добавить слой пробок.
Внимание
По умолчанию карта отображает слои в порядке добавления.
Вы можете управлять порядком слоёв с помощью параметра zIndex
.
Источник данных
Для отображения слоя необходим источник данных. В JS API источниками данных являются объекты с постфиксом DataSource
. Например, YMapTileDataSource
— объект для загрузки тайлов растровой или векторной карты.
К примеру, вы хотите отобразить на карте тайлы, полученные с сайта https://sitename.com
:
const {YMap, YMapTileDataSource, YMapLayer} = ymaps3;
// Инициализируйте карту
const map = new YMap({...});
// Инициализируйте источник данных
const tileDataSource = new YMapTileDataSource({
id: 'someSource',
raster: {
type: 'someType',
fetchTile: 'https://sitename.com/?x={{x}}&y={{y}}&z={{z}}&scale={{scale}}'
}
});
// Добавьте источник данных на карту
map.addChild(tileDataSource);
// Создайте слой с полученными данными
const layer = new YMapLayer({
zIndex: 1,
source: 'someSource',
type: 'someType'
});
// Добавьте этот слой на карту
map.addChild(layer);
Примечание
Для связи источника данных и слоя используется текстовый идентификатор. Будьте внимательны, идентификатор для источника данных задается в поле id
, а при передаче в слой используется поле source
.
Слой с источником данных
В JS API есть несколько слоёв, для которых источники данных уже настроены.
YMapDefaultFeaturesLayer
— добавляет на карту источник данных и слой геообъектов (полигоны, линии, точки, метки);YMapDefaultSchemeLayer
— добавляет на карту источник данных и слой схемы карт:type: 'ground'
— вся схема в растровой версии, слой земли в векторной версии;type: 'buildings'
— слой строений в векторной версии;type: 'icons'
— слой иконок в векторной версии;type: 'labels'
— слой подписей в векторной версии.
Например, этот код добавит на карту все слои типа "схема" со всеми источниками данных:
map.addChild(new YMapDefaultSchemeLayer({theme: 'light'}));
Примечание
В этом примере конструктор слоя получает на вход только цветовую тему, остальные параметры используются по умолчанию из YMapDefaultSchemeLayer.defaultProps
Вы можете сделать всё то же самое, что в примере выше, только вручную:
// Сначала добавьте на карту невидимый слой.
// Он скрыт, потому что используется только для загрузки данных.
map.addChild(new YMapDefaultSchemeLayer({theme: 'light', visible: false, source: 'scheme'}));
// Затем добавьте на карту несколько слоёв, указав для каждого из них,
// какие данные из YMapDefaultSchemeLayer отображать.
map.addChild(new YMapLayer({zIndex: 1, source: 'scheme', type: 'ground'}))
map.addChild(new YMapLayer({zIndex: 2, source: 'scheme', type: 'labels'}))
map.addChild(new YMapLayer({zIndex: 3, source: 'scheme', type: 'buildings'}))
map.addChild(new YMapLayer({zIndex: 4, source: 'scheme', type: 'icons'}))
Маркер
Маркер — DOM
-элемент с привязкой к координатам. Маркеры можно перетаскивать и настраивать их внешний вид с помощью HTML
-верстки.
const {YMap, YMapDefaultSchemeLayer, YMapDefaultFeaturesLayer, YMapMarker} = ymaps3;
// Инициализируйте карту
const map = new YMap({...});
// Добавьте слой с дорогами и зданиями
map.addChild(new YMapDefaultSchemeLayer());
// Добавьте слой для маркеров
map.addChild(new YMapDefaultFeaturesLayer());
// Создайте DOM-элемент для содержимого маркера.
// Важно это сделать до инициализации маркера!
// Элемент можно создавать пустым. Добавить HTML-разметку внутрь можно после инициализации маркера.
const content = document.createElement('section');
// Инициализируйте маркер
const marker = new YMapMarker(
{
coordinates: [25.229762, 55.289311],
draggable: true
},
content
);
// Добавьте маркер на карту
map.addChild(marker);
// Добавьте произвольную HTML-разметку внутрь содержимого маркера
content.innerHTML = '<h1>Этот заголовок можно перетаскивать</h1>';
Параметры инициализации
Параметры, передаваемые объектам при инициализации, могут быть обязательными и опциональными. Например, у компонента YMap
поле location
обязательное, а behaviors
— нет.
const {YMap} = ymaps3;
const map = new YMap(document.getElementById('root'), {
location: {
zoom: 10,
center: [25.229762, 55.289311]
},
behaviors: ['drag', 'scrollZoom', 'pinchZoom', 'dblClick']
});
Подробнее о параметрах инициализации каждого компонента.
Строгий режим
В JS API можно включить строгий режим для отслеживания ошибок в коде. Используйте глобальную опцию strictMode
:
ymaps3.strictMode = true;
В строгом режиме JS API проверяет входные данные. Например, если на карту вы добавите объект, не являющийся наследником YMapEntity
, JS API вам об этом сообщит. С выключенным строгим режимом JS API такую проверку не сделает, и ваш код может работать неправильно.
React
Для каждого объекта в JS API есть React-аналог. Чтобы воспользоваться React-версией API, подключите модуль @yandex/ymaps3-reactify
:
const ymaps3Reactify = await ymaps3.import('@yandex/ymaps3-reactify');
const reactify = ymaps3Reactify.reactify.bindTo(React, ReactDOM);
const {YMap, YMapDefaultSchemeLayer, YMapDefaultFeaturesLayer, YMapMarker} = reactify.module(ymaps3);
Примечание
Модуль @yandex/ymaps3-reactify
предоставляет набор методов для обращения в React как отдельных объектов, так и модулей/пакетов целиком. Иерархия объектов и параметры инициализации те же самые.
Подключив модуль, используйте любые объекты JS API как React-компоненты:
<YMap location={{center: [25.229762, 55.289311], zoom: 9}} mode="vector">
<YMapDefaultSchemeLayer />
<YMapDefaultFeaturesLayer />
<YMapMarker coordinates={[25.229762, 55.289311]} draggable={true}>
<section>
<h1>You can drag this header</h1>
</section>
</YMapMarker>
</YMap>
Примечание
Более подробную информацию про интеграцию с React и другими фреймворками смотрите в разделе Интеграции