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

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

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

Часті запитання

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1460
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1019
  • Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    764
  • Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    882
  • Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    810
  • Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1166

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

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

Користувач хоче швидко знайти найближчий магазин та побудувати маршрут. Без карти це неможливо. Ми створюємо компонент, який зберігає координати точок, виводить їх на карту з кластеризацією, дозволяє фільтрувати за типом та містом, а також визначає місцезнаходження користувача.

Як працює store locator на Бітрікс?

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

Чому важливо зберігати координати в інфоблоці?

Зберігання LAT/LNG в інфоблоці дозволяє виконувати просторові запити на стороні PHP — наприклад, пошук точок в радіусі від користувача. Без цього довелося б генерувати координати на льоту, що повільно та ненадійно. Інфоблоки v2.0 з числовими властивостями дають точність до 6 знаків — цього достатньо для визначення конкретної будівлі.

Зберігання даних про точки продажу

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

Властивість Тип Приклад
ADDRESS рядок "Київ, вул. Хрещатик, 1"
LAT число (з точністю 6) 50.450001
LNG число (з точністю 6) 30.523333
PHONE рядок або множинне "+380 (44) 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 тижнів

Вартість розраховується індивідуально та залежить від складності.

Що входить у роботу

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

Наш досвід та гарантії

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