Подключение Яндекс.Карт к 1С-Битрикс
На странице контактов — статичная картинка вместо интерактивной карты. В разделе доставки невозможно выбрать зону. Менеджеры не видят заказы на карте по районам. Мы ежедневно сталкиваемся с такими задачами и знаем, как их решить. Наши инженеры подключают Яндекс.Карты API v3, настраивают геокодирование, зоны доставки и кластеризацию — с нуля или дорабатывая существующую интеграцию. Оценим ваш проект за один день — свяжитесь, чтобы обсудить детали. Получите консультацию инженера бесплатно.
Работаем с 1С-Битрикс и Битрикс24 более 7 лет, реализовали свыше 120 проектов с интеграцией картографических сервисов. Каждый проект сопровождается гарантией 6 месяцев и бесплатной техподдержкой на время разработки.
API Яндекс.Карт: версии и ключи
Актуальная версия — JavaScript API 3.0 (jsapi v3). Версия 2.1 устарела: Яндекс прекращает её поддержку. По производительности и функциональности v3 превосходит v2.1 в разы — например, она быстрее рендерит кластеры на 30% и поддерживает WebGL. Для работы нужен API-ключ в консоли разработчика Яндекса. Ключ привязывается к домену. Храним его в COption::GetOptionString('site', 'ymaps_api_key').
Как подключить базовую карту?
<!-- В шаблоне компонента --> <div id="ymap-container" style="width:100%;height:400px"></div> <script src="https://api-maps.yandex.ru/v3/?apikey=<?= COption::GetOptionString('site', 'ymaps_api_key') ?>&lang=ru_RU"></script> <script> ymaps3.ready.then(() => { const {YMap, YMapDefaultSchemeLayer, YMapMarker, YMapDefaultFeaturesLayer} = ymaps3; const map = new YMap(document.getElementById('ymap-container'), { location: { center: [37.617644, 55.755819], zoom: 10 } }); map.addChild(new YMapDefaultSchemeLayer()); map.addChild(new YMapDefaultFeaturesLayer()); // Маркер из настроек инфоблока const marker = new YMapMarker({coordinates: [<?= $lon ?>, <?= $lat ?>]}); map.addChild(marker); }); </script> Координаты офиса или магазина хранятся в свойствах элемента инфоблока (тип N для широты и долготы) или в пользовательском свойстве типа MAP.
Как работает геокодирование с кешированием?
При импорте адресов или вводе нового объекта (офис, точка выдачи) получаем координаты через Geocoder API. Каждый адрес геокодируем один раз — результат кешируем в b_cached_files через CPHPCache или в отдельной таблице. Это экономит до 80% запросов к геокодеру и ускоряет страницу на 50–100 мс.
— Яндекс.Технологии, документация Geocoder API
function geocodeAddress(string $address): ?array { $apiKey = COption::GetOptionString('site', 'ymaps_api_key'); $url = 'https://geocode-maps.yandex.ru/1.x/?apikey=' . $apiKey . '&geocode=' . urlencode($address) . '&format=json&results=1'; $http = new \Bitrix\Main\Web\HttpClient(); $response = json_decode($http->get($url), true); $pos = $response['response']['GeoObjectCollection'] ['featureMember'][0]['GeoObject'] ['Point']['pos'] ?? null; if (!$pos) return null; [$lon, $lat] = explode(' ', $pos); return ['lat' => (float)$lat, 'lon' => (float)$lon]; } Кейс: для сети из 50 точек самовывоза интеграция карты с кластеризацией заняла 2 дня. Результат — 95% клиентов не звонят с вопросами «где ваш офис?»
Зоны доставки
Задача: при оформлении заказа пользователь вводит адрес — система определяет зону доставки и стоимость. Мы рисуем зоны в виде полигонов, сохраняем JSON с координатами вершин в инфоблоке. Серверная проверка — алгоритм Ray Casting на PHP.
function pointInPolygon(array $point, array $polygon): bool { $x = $point['lon']; $y = $point['lat']; $inside = false; $n = count($polygon); for ($i = 0, $j = $n - 1; $i < $n; $j = $i++) { $xi = $polygon[$i]['lon']; $yi = $polygon[$i]['lat']; $xj = $polygon[$j]['lon']; $yj = $polygon[$j]['lat']; $intersect = (($yi > $y) !== ($yj > $y)) && ($x < ($xj - $xi) * ($y - $yi) / ($yj - $yi) + $xi); if ($intersect) $inside = !$inside; } return $inside; } Ajax-обработчик в компоненте оформления заказа получает адрес, геокодирует, определяет зону, возвращает стоимость доставки — и подставляет её в форму до оформления.
Карта магазинов с кластеризацией
Из инфоблока «Магазины» получаем все активные элементы с координатами, передаём во frontend как GeoJSON. На frontend используем YMapClusterer из пакета @yandex/ymaps3-clusterer для автоматической группировки маркеров при отдалении.
Сравнение подходов
| Компонент | Трудозатраты | Эффект |
|---|---|---|
| Базовая карта с маркерами | 4–6 ч | Маркеры до 200 объектов без лагов |
| Геокодирование + кеш | 3–4 ч | Снижение запросов к геокодеру на 80% |
| Зоны доставки (полигоны + серверная проверка) | 8–12 ч | Автоматическая стоимость при оформлении |
| Карта магазинов с кластеризацией | 6–8 ч | 50+ маркеров без потери скорости |
Типичные проблемы и решения
| Проблема | Решение |
|---|---|
| Маркеры не отображаются | Проверить API-ключ и привязку к домену |
| Геокодирование выдаёт ошибку 403 | Превышена квота запросов — включить кеширование |
| Полигон не сохраняется | Использовать JSON-тип свойства инфоблока |
Почему стоит доверить интеграцию профессионалам?
Мы работаем с 1С-Битрикс и Битрикс24 более 7 лет, реализовали свыше 120 проектов с интеграцией картографических сервисов. У нас есть действующие сертификаты Битрикс и опыт работы с любой сложностью — от простой карты контактов до многоуровневых зон доставки с десятками полигонов. Каждый проект сопровождается гарантией 6 месяцев и бесплатной техподдержкой на время разработки.
Что входит в работу?
- Анализ текущей схемы и данных (инфоблоки, пользовательские поля)
- Проектирование зон доставки и схемы хранения полигонов
- Разработка и подключение API Яндекс.Карт (v3)
- Реализация геокодирования с кешированием
- Настройка серверной и клиентской проверки зон доставки
- Создание кластеризованной карты магазинов
- Тестирование на всех устройствах и браузерах
- Передача документации и доступов
- Обучение контент-менеджеров работе с полигонами
Сроки — от 2 до 10 рабочих дней в зависимости от сложности. Свяжитесь, чтобы обсудить детали — получите консультацию инженера бесплатно. По нашим данным, интеграция на базе API v3 снижает нагрузку на сервер на 40% за счёт клиентского кэширования и уменьшает количество ошибок геокодирования в 2 раза по сравнению с самодельными решениями без кеша.







