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

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Интеграция 1С-Битрикс с Google Maps
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • 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С-Битрикс с Google Maps

Google Maps Platform — выбор для международных проектов и сайтов, которым важна корректная отрисовка за пределами России. В отличие от Яндекс.Карт, Google Maps требует привязки платёжного метода даже для бесплатного использования в рамках лимита ($200/месяц бесплатно ≈ 28 000 загрузок карты).

Подключение и ключ API

В Google Cloud Console создаём проект, включаем три API:

  • Maps JavaScript API — отрисовка карты во frontend.
  • Geocoding API — геокодирование адресов на сервере.
  • Places API — автодополнение адреса при вводе.

Ключ ограничиваем: HTTP-реферер для JavaScript API (только домен сайта), IP-адрес сервера для Geocoding/Places API. Это предотвращает утечку квоты при краже ключа.

Ключ храним в .env или COption::GetOptionString('site', 'gmaps_api_key'), не вставляем напрямую в шаблоны.

Инициализация карты

<div id="gmap" style="width:100%;height:400px"></div>
<script>
function initMap() {
    const coords = { lat: <?= $lat ?>, lng: <?= $lon ?> };
    const map = new google.maps.Map(document.getElementById('gmap'), {
        center: coords, zoom: 14,
        styles: googleMapStyles, // кастомные стили для бренда
    });
    new google.maps.Marker({ position: coords, map: map, title: '<?= htmlspecialchars($title) ?>' });
}
</script>
<script async defer
    src="https://maps.googleapis.com/maps/api/js?key=<?= $apiKey ?>&callback=initMap&language=ru&region=RU">
</script>

Параметры language=ru&region=RU обеспечивают русскоязычные названия улиц и правильный формат адресов.

Серверное геокодирование

function geocodeAddressGoogle(string $address): ?array {
    $apiKey = COption::GetOptionString('site', 'gmaps_server_key');
    $url = 'https://maps.googleapis.com/maps/api/geocode/json?'
         . 'address=' . urlencode($address)
         . '&key=' . $apiKey . '&language=ru&region=RU';

    $http = new \Bitrix\Main\Web\HttpClient();
    $data = json_decode($http->get($url), true);

    if ($data['status'] !== 'OK') return null;

    $loc = $data['results'][0]['geometry']['location'];
    return ['lat' => $loc['lat'], 'lon' => $loc['lng']];
}

Лимиты: Geocoding API — 40 000 запросов/месяц бесплатно. При импорте большого справочника адресов добавляем задержку 50 мс между запросами и кешируем результаты в b_cached_files на 30 дней.

Автодополнение адреса через Places API

На странице оформления заказа пользователь начинает вводить адрес — выпадает список подсказок от Google Places. После выбора координаты подставляются в скрытые поля и передаются в обработчик доставки.

const input = document.getElementById('delivery-address');
const autocomplete = new google.maps.places.Autocomplete(input, {
    types: ['address'],
    componentRestrictions: { country: ['ru', 'by', 'kz'] },
    fields: ['geometry', 'formatted_address', 'address_components'],
});

autocomplete.addListener('place_changed', () => {
    const place = autocomplete.getPlace();
    document.getElementById('lat').value = place.geometry.location.lat();
    document.getElementById('lon').value = place.geometry.location.lng();
    // Парсим address_components для отдельных полей (город, улица, дом)
    parseAddressComponents(place.address_components);
});

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

Для карты с десятками точек (магазины, дилеры) используем библиотеку @googlemaps/markerclusterer:

import { MarkerClusterer } from '@googlemaps/markerclusterer';

const markers = storesData.map(store => new google.maps.Marker({
    position: { lat: store.lat, lng: store.lon },
    title: store.name,
}));
new MarkerClusterer({ map, markers });

Данные магазинов передаём из PHP в JS через json_encode() на странице или через Ajax-запрос к компоненту при первой загрузке карты.

Стоимость и мониторинг

В Google Cloud Console настраиваем оповещения о бюджете. Превышение лимита $200 — API начнёт возвращать ошибки OVER_QUERY_LIMIT. Для контроля добавляем логирование всех серверных запросов к Geocoding API с подсчётом дневной квоты.

Задача Трудозатраты
Настройка ключей и ограничений 1–2 ч
Базовая карта с маркерами 3–5 ч
Geocoding + кеширование 3–4 ч
Places Autocomplete в форме доставки 4–6 ч
Карта с кластеризацией 5–7 ч