Підключення Яндекс.Карт до 1С-Бітрікс
На сторінці контактів — статична картинка замість інтерактивної карти. У розділі доставки неможливо вибрати зону. Менеджери не бачать замовлення на карті за районами. Ми щодня стикаємося з такими задачами і знаємо, як їх вирішити. Наші інженери підключають Яндекс.Карти API v3, налаштовують геокодування, зони доставки та кластеризацію — з нуля або доопрацьовуючи існуючу інтеграцію. Оцінимо ваш проєкт за один день — зв'яжіться, щоб обговорити деталі. Отримайте консультацію інженера безплатно.
Працюємо з 1С-Бітрікс та Бітрікс24 понад 7 років, реалізували понад 120 проєктів з інтеграцією картографічних сервісів. Кожен проєкт супроводжується гарантією 6 місяців та безплатною техпідтримкою на час розробки.
API Яндекс.Карт: версії та ключі
Актуальна версія — JavaScript API 3.0 (jsapi v3). Версія 2.1 застаріла: Яндекс припиняє її підтримку. За продуктивністю та функціональністю v3 перевершує v2.1 у рази — наприклад, вона швидше рендерить кластери на 30% і підтримує WebGL. Для роботи потрібен API-ключ у консолі розробника Яндекса. Ключ прив'язується до домену. Зберігаємо його в COption::GetOptionString('site', 'ymaps_api_key').
Як підключити базову карту?
<!-- У шаблоні компонента -->
<div id="ymap-container" style="width:100%;height:400px"></div>
<script src="https://api-maps.yandex.ru/v3/?apikey=<?= COption::GetOptionString('site', 'ymaps_api_key') ?>&lang=ru_RU"></script>
<script>
ymaps3.ready.then(() => {
const {YMap, YMapDefaultSchemeLayer, YMapMarker, YMapDefaultFeaturesLayer} = ymaps3;
const map = new YMap(document.getElementById('ymap-container'), {
location: {
center: [37.617644, 55.755819],
zoom: 10
}
});
map.addChild(new YMapDefaultSchemeLayer());
map.addChild(new YMapDefaultFeaturesLayer());
// Маркер з налаштувань інфоблоку
const marker = new YMapMarker({coordinates: [<?= $lon ?>, <?= $lat ?>]});
map.addChild(marker);
});
</script>Координати офісу або магазину зберігаються у властивостях елемента інфоблоку (тип N для широти та довготи) або в користувацькій властивості типу MAP.
Як працює геокодування з кешуванням?
При імпорті адрес або введенні нового об'єкта (офіс, точка видачі) отримуємо координати через Geocoder API. Кожну адресу геокодуємо один раз — результат кешуємо в b_cached_files через CPHPCache або в окремій таблиці. Це економить до 80% запитів до геокодера та прискорює сторінку на 50–100 мс.
— Яндекс.Технології, документація Geocoder API
function geocodeAddress(string $address): ?array {
$apiKey = COption::GetOptionString('site', 'ymaps_api_key');
$url = 'https://geocode-maps.yandex.ru/1.x/?apikey=' . $apiKey . '&geocode=' . urlencode($address) . '&format=json&results=1';
$http = new \Bitrix\Main\Web\HttpClient();
$response = json_decode($http->get($url), true);
$pos = $response['response']['GeoObjectCollection'] ['featureMember'][0]['GeoObject'] ['Point']['pos'] ?? null;
if (!$pos) return null;
[$lon, $lat] = explode(' ', $pos);
return ['lat' => (float)$lat, 'lon' => (float)$lon];
}Кейс: для мережі з 50 точок самовивозу інтеграція карти з кластеризацією зайняла 2 дні. Результат — 95% клієнтів не телефонують із запитаннями «де ваш офіс?»
Зони доставки
Задача: при оформленні замовлення користувач вводить адресу — система визначає зону доставки та вартість. Ми малюємо зони у вигляді полігонів, зберігаємо JSON з координатами вершин в інфоблоці. Серверна перевірка — алгоритм Ray Casting на PHP.
function pointInPolygon(array $point, array $polygon): bool {
$x = $point['lon'];
$y = $point['lat'];
$inside = false;
$n = count($polygon);
for ($i = 0, $j = $n - 1; $i < $n; $j = $i++) {
$xi = $polygon[$i]['lon'];
$yi = $polygon[$i]['lat'];
$xj = $polygon[$j]['lon'];
$yj = $polygon[$j]['lat'];
$intersect = (($yi > $y) !== ($yj > $y)) && ($x < ($xj - $xi) * ($y - $yi) / ($yj - $yi) + $xi);
if ($intersect) $inside = !$inside;
}
return $inside;
}Ajax-обробник у компоненті оформлення замовлення отримує адресу, геокодує, визначає зону, повертає вартість доставки — і підставляє її у форму до оформлення.
Карта магазинів з кластеризацією
З інфоблоку «Магазини» отримуємо всі активні елементи з координатами, передаємо у фронтенд як GeoJSON. На фронтенді використовуємо YMapClusterer з пакета @yandex/ymaps3-clusterer для автоматичного групування маркерів при віддаленні.
Порівняння підходів
| Компонент | Трудозатрати | Ефект |
|---|---|---|
| Базова карта з маркерами | 4–6 год | Маркери до 200 об'єктів без лагів |
| Геокодування + кеш | 3–4 год | Зниження запитів до геокодера на 80% |
| Зони доставки (полігони + серверна перевірка) | 8–12 год | Автоматична вартість при оформленні |
| Карта магазинів з кластеризацією | 6–8 год | 50+ маркерів без втрати швидкості |
Типові проблеми та рішення
| Проблема | Рішення |
|---|---|
| Маркери не відображаються | Перевірити API-ключ і прив'язку до домену |
| Геокодування видає помилку 403 | Перевищено квоту запитів — увімкнути кешування |
| Полігон не зберігається | Використовувати JSON-тип властивості інфоблоку |
Чому варто довірити інтеграцію професіоналам?
Ми працюємо з 1С-Бітрікс та Бітрікс24 понад 7 років, реалізували понад 120 проєктів з інтеграцією картографічних сервісів. У нас є діючі сертифікати Бітрікс та досвід роботи з будь-якою складністю — від простої карти контактів до багаторівневих зон доставки з десятками полігонів. Кожен проєкт супроводжується гарантією 6 місяців та безплатною техпідтримкою на час розробки.
Що входить в роботу?
- Аналіз поточної схеми та даних (інфоблоки, користувацькі поля)
- Проєктування зон доставки та схеми зберігання полігонів
- Розробка та підключення API Яндекс.Карт (v3)
- Реалізація геокодування з кешуванням
- Налаштування серверної та клієнтської перевірки зон доставки
- Створення кластеризованої карти магазинів
- Тестування на всіх пристроях і браузерах
- Передача документації та доступів
- Навчання контент-менеджерів роботі з полігонами
Терміни — від 2 до 10 робочих днів залежно від складності. Зв'яжіться, щоб обговорити деталі — отримайте консультацію інженера безплатно. За нашими даними, інтеграція на базі API v3 знижує навантаження на сервер на 40% за рахунок клієнтського кешування та зменшує кількість помилок геокодування в 2 рази порівняно з саморобними рішеннями без кешу.







