Інтеграція 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 днів після запуску — ми допоможемо усунути будь-які питання та забезпечимо успішний запуск.







