Интеграция 1С-Битрикс с 2ГИС

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Интеграция 1С-Битрикс с 2ГИС
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1175
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Интеграция 1С-Битрикс с 2ГИС

Яндекс.Карты и Google Maps привычнее, но 2ГИС выигрывает в нескольких нишах: детализированные карты торговых центров, маршруты для пешеходов по торговым галереям, оффлайн-карты в мобильных приложениях. Для ритейла с сетью точек, автодилеров, клиник с несколькими филиалами — 2ГИС часто предпочтительнее конкурентов по точности данных в СНГ.

Интеграция 1С-Битрикс с 2ГИС

API 2ГИС: что доступно

2ГИС предоставляет несколько API-продуктов:

  • Maps API (MapGL) — JavaScript-библиотека для отображения карт, маркеров, маршрутов
  • Places API — поиск организаций, получение информации о них
  • Geocoder API — геокодирование адресов (адрес → координаты и обратно)
  • Routing API — построение маршрутов
  • Tiles API — тайловые карты для собственного рендеринга

Для интеграции с Битрикс чаще всего используется Maps API для вывода карты на странице и Geocoder API для автоматического определения координат при добавлении адресов в административной части.

Подключение MapGL на страницах Битрикс

Добавление карты в шаблон компонента:

// result_modifier.php или template.php
\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'];
// template.js
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:

// /local/php_interface/init.php
\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'],
    ]);
}

Класс Dgis\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']];
    }
}

Карта сети филиалов: кластеризация маркеров

Для сетей с большим количеством точек (50+) одиночные маркеры на карте превращаются в нечитаемую кашу. MapGL поддерживает кластеризацию через mapgl.ClusterLayer:

// Загружаем все точки через AJAX из REST Битрикс
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, // каждые 24 часа
);

Использование Places API для поиска организаций

Если на сайте есть поиск по базе партнёров, дилеров, точек выдачи — Places API позволяет получить официальные данные 2ГИС об организации по её ID в базе 2ГИС:

$client = new \Bitrix\Main\Web\HttpClient();
$client->query('GET',
    'https://catalog.api.2gis.com/3.0/items?id=' . $dgisOrgId .
    '&fields=items.contact_groups,items.schedule,items.rubrics' .
    '&key=' . DGIS_API_KEY
);
$orgData = json_decode($client->getResult(), true);

Данные сохраняются в свойства инфоблока и выводятся в карточке партнёра.

Работа с 2ГИС без серверного ключа

В режиме разработки или для некоммерческих проектов можно использовать MapGL без ключа с ограничениями по числу запросов. Коммерческое использование — по договору, стоимость зависит от количества загрузок карты в месяц.

Сроки

Задача Сроки
Вставка карты с маркером на страницу (филиал, контакты) 4–8 часов
Карта сети с кластеризацией маркеров + AJAX-загрузка 1–2 дня
Геокодирование при сохранении адресов в админке 1 день
Синхронизация данных с 2ГИС Business API 2–4 дня