Разработка store locator (карта магазинов) на 1С-Битрикс

Разработка store locator (карта магазинов/офисов) на 1С-Битрикс Мы часто сталкиваемся с задачей: клиент просит добавить на сайт карту с точками продаж, но стандартные инструменты Битрикс не позволяют реализовать поиск по геолокации, фильтрацию и кластеризацию. В итоге пользователь вводит город, а
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Разработка store locator (карта магазинов) на 1С-Битрикс
Средний
~1-2 недели

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1459
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    1019
  • 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
    761
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    882
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    808
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1163

Разработка store locator (карта магазинов/офисов) на 1С-Битрикс

Мы часто сталкиваемся с задачей: клиент просит добавить на сайт карту с точками продаж, но стандартные инструменты Битрикс не позволяют реализовать поиск по геолокации, фильтрацию и кластеризацию. В итоге пользователь вводит город, а видит список адресов без карты — плохой UX. Чтобы решить эту проблему, мы разрабатываем кастомный store locator на базе инфоблоков и картографического API. Наш опыт — более 10 лет в Битрикс-разработке, 100+ реализованных проектов.

Пользователь хочет быстро найти ближайший магазин и построить маршрут. Без карты это невозможно. Мы создаём компонент, который хранит координаты точек, выводит их на карту с кластеризацией, позволяет фильтровать по типу и городу, а также определяет местоположение пользователя.

Как работает store locator на Битрикс?

Каждая точка продаж — элемент инфоблока. Ключевые свойства — координаты (LAT/LNG), адрес, телефон, режим работы. Мы добавляем геокодирование: при создании точки координаты автоматически подставляются через API Яндекс.Геокодера. Это исключает ручной ввод и ошибки.

Почему важно хранить координаты в инфоблоке?

Хранение LAT/LNG в инфоблоке позволяет выполнять пространственные запросы на стороне PHP — например, поиск точек в радиусе от пользователя. Без этого пришлось бы генерировать координаты на лету, что медленно и ненадёжно. Инфоблоки v2.0 с числовыми свойствами дают точность до 6 знаков — этого достаточно для определения конкретного здания.

Хранение данных о точках продаж

Минимальный набор свойств элемента инфоблока:

Свойство Тип Пример
ADDRESS строка "Москва, ул. Тверская, 1"
LAT число (с точностью 6) 55.756123
LNG число (с точностью 6) 37.614567
PHONE строка или множественное "+7 (495) 123-45-67"
WORKING_HOURS строка или JSON {"mon-fri":"9:00-20:00"}
POINT_TYPE список "Магазин", "ПВЗ", "Сервис"
CITY_ID элемент инфоблока городов ID города
METRO строка "Тверская"
PHOTO файл путь к фото

Координаты получаем через геокодирование при сохранении элемента. Пример обработчика события OnBeforeIBlockElementAdd:

AddEventHandler('iblock', 'OnBeforeIBlockElementAdd', 'geocodeStoreAddress'); function geocodeStoreAddress(&$arFields) { if ($arFields['IBLOCK_ID'] !== IBLOCK_STORES_ID) return; $address = urlencode($arFields['PROPERTIES']['ADDRESS']['VALUE']); $http = new \Bitrix\Main\Web\HttpClient(); $response = $http->get("https://geocode-maps.yandex.ru/1.x/?apikey=KEY&format=json&geocode=$address"); $data = json_decode($response, true); $coords = $data['response']['GeoObjectCollection']['featureMember'][0]['GeoObject']['Point']['pos']; [$lng, $lat] = explode(' ', $coords); $arFields['PROPERTIES']['LAT']['VALUE'] = $lat; $arFields['PROPERTIES']['LNG']['VALUE'] = $lng; } 

Яндекс.Геокодер API используется бесплатно до 25 000 запросов в сутки.

Выбор картографического API

Сравнение популярных решений:

API Покрытие Бесплатный лимит Особенности
Яндекс.Карты Россия, СНГ 1 000 запросов/сутки пробки, маршруты, геолокация
2GIS Россия, СНГ до 100 000 загрузок/сутки поэтажные планы зданий
OpenStreetMap + Leaflet.js Весь мир без лимита нужен свой геокодер (Nominatim)

Для российских проектов мы используем Яндекс.Карты — детальное покрытие и встроенная кластеризация. Кластеризация улучшает производительность в 5 раз при 200+ точках.

Архитектура компонента

Компонент состоит из PHP-бэкенда и JS-фронтенда. Бэкенд получает список точек из инфоблока, опционально фильтрует по городу или радиусу. Данные передаются в JS через JSON в скрипте или через AJAX-endpoint.

$res = CIBlockElement::GetList( [], ['IBLOCK_ID' => IBLOCK_STORES_ID, 'ACTIVE' => 'Y'], false, false, ['ID', 'NAME', 'PROPERTY_LAT', 'PROPERTY_LNG', 'PROPERTY_ADDRESS', 'PROPERTY_PHONE', 'PROPERTY_WORKING_HOURS', 'PROPERTY_POINT_TYPE'] ); $points = []; while ($el = $res->GetNext()) { $points[] = [ 'id' => $el['ID'], 'name' => $el['NAME'], 'lat' => (float)$el['PROPERTY_LAT_VALUE'], 'lng' => (float)$el['PROPERTY_LNG_VALUE'], 'address' => $el['PROPERTY_ADDRESS_VALUE'], 'phone' => $el['PROPERTY_PHONE_VALUE'], 'hours' => $el['PROPERTY_WORKING_HOURS_VALUE'], 'type' => $el['PROPERTY_POINT_TYPE_VALUE'], ]; } 

Фронтенд инициализирует карту, добавляет маркеры с кластеризацией, реализует поиск и фильтрацию. Кластеризация обязательна при 50+ точках — без неё карта тормозит.

// Яндекс.Карты API 3.0 const map = new ymaps3.YMap(document.getElementById('map'), { location: { center: [37.617, 55.755], zoom: 10 } }); const clusterer = new ymaps3.YMapClusterer({ ... }); 

Производительность при 500+ точках

При большом числе точек весь массив в JS передавать неэффективно. Решение:

  • Пагинированный AJAX: загружаем точки в границах видимой области карты, подгружаем при перемещении.
  • Серверный поиск по радиусу: фильтрация в SQL через формулу гаверсинуса или PostGIS (если PostgreSQL).
  • Кеширование: список точек редко меняется, кешируем на 1 час в b_cache.
Формула гаверсинуса для SQL (MySQL)
SELECT *, (6371 * acos(cos(radians(:lat)) * cos(radians(lat)) * cos(radians(lng) - radians(:lng)) + sin(radians(:lat)) * sin(radians(lat)))) AS distance FROM b_iblock_element_prop_... HAVING distance < :radius ORDER BY distance 

Это работает для каталогов до 5000 точек без PostGIS.

Сроки и стоимость

Масштаб Что входит Срок
До 50 точек Карта + список + фильтр по городу 1–2 недели
50–300 точек + кластеры, геолокация, поиск рядом 2–4 недели
300+ точек + серверный поиск по радиусу, PostGIS 4–6 недель

Стоимость рассчитывается индивидуально и зависит от сложности. Экономия от внедрения: снижение звонков в колл-центр на 30% — до $1.4k–1.9k. в месяц.

Что входит в работу

  • Разработка компонента и шаблона
  • Интеграция с картографическим API (Яндекс.Карты, 2GIS или OpenStreetMap)
  • Геокодирование адресов при добавлении точек
  • Настройка поиска по геолокации и фильтрации
  • Кластеризация маркеров
  • Боковая панель со списком точек (синхронизация с картой)
  • Тестирование и оптимизация производительности
  • Передача документации и доступов
  • Обучение администраторов
  • Гарантийная поддержка 1 месяц

Наш опыт и гарантии

Мы сертифицированные специалисты 1С-Битрикс с опытом более 10 лет. Реализовали 100+ проектов, включая store locator для федеральных сетей. Гарантируем работу по договору и соблюдение сроков. Свяжитесь с нами для консультации по вашему проекту.