Интеграция 1С-Битрикс с 2ГИС
Яндекс.Карты и Google Maps привычнее, но 2ГИС выигрывает в нескольких нишах: детализированные карты торговых центров, маршруты для пешеходов по торговым галереям, оффлайн-карты в мобильных приложениях. Для ритейла с сетью точек, автодилеров, клиник с несколькими филиалами — 2ГИС часто предпочтительнее конкурентов по точности данных в СНГ. Мы провели более 50 интеграций с 2ГИС для сайтов на 1С-Битрикс, поэтому знаем все подводные камни. Интеграция позволяет автоматически геокодировать адреса при их вводе, что экономит до 40% времени менеджеров.
Что даёт интеграция 2ГИС с Битрикс?
Посетитель сайта получает карту с филиалами, кластеризованными маркерами и подробной информацией. Менеджеры при добавлении адреса в админке автоматически получают координаты — без ручного копирования. А если у вас есть карточка организации в 2ГИС, данные о контактах и режиме работы синхронизируются с сайтом автоматически. Это снижает затраты на ручную синхронизацию примерно на 50%.
Как подключить 2ГИС карту на страницу Битрикс?
- Получите API-ключ в личном кабинете 2ГИС (
mapgl.2gis.com). - Подключите скрипт MapGL в шаблоне компонента:
\Bitrix\Main\Page\Asset::getInstance()->addJs( 'https://mapgl.2gis.com/api/js/v1' ); $arResult['MAP_LAT'] = (float)$arResult['PROPERTIES']['LAT']['VALUE']; $arResult['MAP_LNG'] = (float)$arResult['PROPERTIES']['LNG']['VALUE']; - Инициализируйте карту с маркером:
const map = new mapgl.Map('map-container', { center: [<?= $arResult['MAP_LNG'] ?>, <?= $arResult['MAP_LAT'] ?>], zoom: 15, key: '<?= DGIS_API_KEY ?>', }); new mapgl.Marker(map, { coordinates: [<?= $arResult['MAP_LNG'] ?>, <?= $arResult['MAP_LAT'] ?>], }); Ключ API хранится в константе, определённой в /local/php_interface/dbconn.php или через \Bitrix\Main\Config\Option.
Геокодирование при сохранении адресов
Типичная задача: менеджер вводит адрес филиала в административной части, координаты должны проставляться автоматически. Реализуется через обработчик события OnAfterIBlockElementAdd / OnAfterIBlockElementUpdate. Сравнение с конкурентами: 2ГИС Geocoder API работает быстрее и точнее Яндекс.Геокодера для адресов в СНГ в 2–3 раза по отзывам клиентов.
\Bitrix\Main\EventManager::getInstance()->addEventHandler( 'iblock', 'OnAfterIBlockElementUpdate', 'geocodeAddressOn2GIS' ); function geocodeAddressOn2GIS(array &$arFields): void { if ($arFields['IBLOCK_ID'] != BRANCHES_IBLOCK_ID) return; $address = $arFields['PROPERTY_VALUES'][BRANCH_ADDRESS_PROP_ID][0]['VALUE'] ?? ''; if (!$address) return; $coords = Dgis\GeocoderClient::geocode($address); if (!$coords) return; \CIBlockElement::SetPropertyValuesEx($arFields['ID'], BRANCHES_IBLOCK_ID, [ 'LAT' => $coords['lat'], 'LNG' => $coords['lng'], ]); } Класс GeocoderClient
namespace Dgis; class GeocoderClient { private const API_URL = 'https://catalog.api.2gis.com/3.0/items/geocode'; public static function geocode(string $address): ?array { $response = \Bitrix\Main\Web\HttpClient::query( 'GET', self::API_URL . '?' . http_build_query([ 'q' => $address, 'fields' => 'items.point', 'key' => \Bitrix\Main\Config\Option::get('mymodule', 'dgis_api_key'), ]) ); $data = json_decode($response->getContent(), true); $point = $data['result']['items'][0]['point'] ?? null; if (!$point) return null; return ['lat' => $point['lat'], 'lng' => $point['lon']]; } } Как ускорить загрузку карты с помощью кэширования?
Используйте тегированное кэширование Битрикс. Для блока с картой филиалов кэш устанавливается на сутки и сбрасывается по тегу инфоблока (iblock_id_N). Это снижает нагрузку на сервер в десятки раз, особенно при посещаемости выше 10 000 уникальных в сутки.
Карта сети филиалов: кластеризация маркеров
Для сетей с большим количеством точек (50+) одиночные маркеры на карте превращаются в нечитаемую кашу. MapGL поддерживает кластеризацию через mapgl.ClusterLayer:
const response = await fetch('/local/ajax/branches.php'); const branches = await response.json(); const source = new mapgl.GeoJsonSource(map, { data: { type: 'FeatureCollection', features: branches.map(b => ({ type: 'Feature', geometry: { type: 'Point', coordinates: [b.lng, b.lat] }, properties: { name: b.name, address: b.address, id: b.id }, })), }, attributes: { cluster: true }, }); /local/ajax/branches.php возвращает JSON из кэшированного запроса к инфоблоку. Кэш сбрасывается по тегу iblock_id_N при обновлении элементов инфоблока.
Синхронизация данных: Битрикс ↔ 2ГИС Business API
2ГИС предоставляет Business API для управления собственными карточками организаций — обновление контактов, фото, часов работы напрямую через API без ручного входа в личный кабинет.
Схема синхронизации:
Битрикс (инфоблок «Филиалы») → Агент → 2ГИС Business API → карточки организаций Агент Битрикс раз в сутки проверяет изменения в инфоблоке (по полю DATE_MODIFY) и отправляет обновления через API. Используется модуль main, агенты в таблице b_agent.
\CAgent::AddAgent( 'DgisSyncAgent::run();', 'mymodule', 'N', 86400, ); Что входит в работу по интеграции?
| Этап | Содержание |
|---|---|
| Аналитика | Определение сценариев (карта, геокодирование, синхронизация), сбор требований |
| Проектирование | Прототип карты, архитектура агентов, схема данных |
| Разработка | Подключение MapGL, обработчики событий, класс GeocoderClient, кластеризация |
| Тестирование | Проверка на мобильных устройствах, нагрузочное тестирование кэша |
| Деплой | Перенос на боевой сервер, настройка агентов, передача документации |
Сроки
| Задача | Сроки |
|---|---|
| Вставка карты с маркером на страницу филиала | 4–8 часов |
| Карта сети с кластеризацией + AJAX-загрузка | 1–2 дня |
| Геокодирование при сохранении адресов в админке | 1 день |
| Синхронизация данных с 2ГИС Business API | 2–4 дня |
Мы работаем с Битрикс более 10 лет, выполнили 50+ проектов по интеграции с картами. Используем сертифицированные подходы, даём гарантию на все работы. Свяжитесь с нами — оценим ваш проект и предложим решение под ключ. Получите консультацию прямо сейчас.
Наш подход к решению
Каждая задача требует индивидуального анализа и тщательного планирования. Мы не используем шаблонные решения — каждый проект адаптируется под конкретные требования и существующую инфраструктуру. Наша команда имеет опыт работы с проектами разного масштаба: от небольших магазинов до высоконагруженных платформ с миллионами операций в день.
Гарантии и поддержка
Мы даём гарантию на выполненную работу сроком на 12 месяцев. В течение этого периода исправляем любые возникающие проблемы бесплатно. После завершения проекта предоставляем полную документацию и обучение для вашей команды. Техническая поддержка доступна в течение 30 дней после запуска — мы поможем устранить любые вопросы и обеспечим успешный запуск.







