Карты на сайте — это не просто красивая картинка. Это возможность показать клиентам, где вы находитесь, построить маршрут или визуализировать данные. Если вы пишете на PHP и хотите добавить интерактивную карту, Google Maps API — один из самых популярных вариантов. В этой статье разберём, как подружить PHP с Google Maps, какие есть подводные камни и как сделать всё правильно с первого раза.
Что такое Google Maps API и зачем он нужен PHP-разработчику
Google Maps API — это набор интерфейсов, которые позволяют встраивать карты Google на свой сайт и управлять ими программно. Вы можете ставить маркеры, рисовать линии, вычислять расстояния и даже строить маршруты. Для PHP-разработчика это означает, что большую часть работы можно делать на сервере: готовить данные, кэшировать ответы, а клиентской части останется только отрисовать карту.
Основные сценарии, где PHP + Google Maps API работают вместе:
- Отображение списка магазинов или офисов с координатами из базы данных.
- Расчёт расстояния между двумя точками для калькулятора доставки.
- Кластеризация маркеров, когда точек много.
- Построение маршрутов для логистики.
Важно понимать: Google Maps API — платный сервис с бесплатным лимитом. Поэтому нужно следить за расходом запросов и по возможности кэшировать результаты на стороне PHP.
Получаем ключ и настраиваем проект
Первым делом нужно получить API-ключ в Google Cloud Console. Заходите в консоль, создаёте проект, включаете нужные API (Maps JavaScript API, Geocoding API, Directions API и т.д.) и генерируете ключ. Не забудьте ограничить ключ по HTTP-реферреру или IP, чтобы его не украли.
Для работы с картами на клиенте (JavaScript) ключ вставляется в URL скрипта. Для серверных запросов (например, геокодирование) ключ передаётся в параметрах запроса. В PHP удобно хранить ключ в переменной окружения или конфиге, а не хардкодить в файлах.
getenv('GOOGLE_MAPS_API_KEY') ?: 'ваш_ключ',
];
Теперь можно приступать к интеграции.
Выводим карту на страницу с помощью JavaScript
Самый простой способ показать карту — использовать Maps JavaScript API. Подключаем скрипт с ключом и инициализируем карту. Вот минимальный пример:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Моя карта</title>
<style>
#map { height: 400px; width: 100%; }
</style>
</head>
<body>
<div id="map"></div>
<script src="https://maps.googleapis.com/maps/api/js?key=ВАШ_КЛЮЧ&callback=initMap" async defer></script>
<script>
function initMap() {
const map = new google.maps.Map(document.getElementById('map'), {
center: { lat: 55.7558, lng: 37.6173 }, // Москва
zoom: 10
});
}
</script>
</body>
</html>
Обратите внимание на параметр callback=initMap — он говорит, какую функцию вызвать после загрузки API. Это удобно, чтобы не гадать, когда скрипт загрузится.
async defer при подключении скрипта Google Maps. Иначе он может заблокировать загрузку остальной страницы.
Работа с геокодированием на PHP: адрес в координаты и обратно
Часто нужно преобразовать адрес в координаты (геокодирование) или наоборот. Это можно делать как на клиенте, так и на сервере. Серверный вариант предпочтительнее, если вы хотите кэшировать результаты или скрыть ключ от пользователя.
Для запросов к Google Geocoding API из PHP используем cURL. Пример функции, которая получает координаты по адресу:
$address,
'key' => $apiKey,
'language' => 'ru',
]);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
if ($data['status'] !== 'OK') {
return null;
}
return $data['results'][0]['geometry']['location'];
}
// Использование
$apiKey = require 'config.php';
$coords = geocodeAddress('Москва, Красная площадь', $apiKey['google_maps_api_key']);
if ($coords) {
echo "Широта: {$coords['lat']}, Долгота: {$coords['lng']}";
} else {
echo 'Не удалось определить координаты';
}
Обратное геокодирование (координаты в адрес) делается аналогично, только вместо address передаётся latlng.
Важно помнить о лимитах: бесплатно можно делать 40 000 запросов в месяц (на момент написания). Если превысите — Google начнёт брать деньги. Поэтому кэшируйте результаты в базе или файлах.
Добавляем маркеры и кластеризацию
Маркеры — это те самые «булавки» на карте. Чтобы добавить их, нужно создать объект google.maps.Marker и передать ему позицию и карту. Если маркеров много, они начинают накладываться друг на друга. Тогда используют кластеризацию — библиотеку MarkerClusterer.
Пример с маркерами на чистом JavaScript:
function initMap() {
const map = new google.maps.Map(document.getElementById('map'), {
center: { lat: 55.7558, lng: 37.6173 },
zoom: 10
});
const locations = [
{ lat: 55.7601, lng: 37.6186, title: 'Красная площадь' },
{ lat: 55.7520, lng: 37.5920, title: 'Арбат' },
{ lat: 55.7100, lng: 37.6300, title: 'Парк Горького' }
];
locations.forEach(loc => {
new google.maps.Marker({
position: { lat: loc.lat, lng: loc.lng },
map: map,
title: loc.title
});
});
}
Чтобы подключить кластеризацию, добавьте скрипт библиотеки и оберните маркеры в MarkerClusterer. Это особенно актуально для интернет-магазинов с сотнями пунктов выдачи.
Строим маршруты с помощью Directions API
Directions API позволяет проложить маршрут между точками. Запрос можно делать как с клиента, так и с сервера. Серверный вариант удобен для расчёта стоимости доставки: вы получаете расстояние и время в пути, а потом используете в своих формулах.
Пример на PHP:
$origin,
'destination' => $destination,
'key' => $apiKey,
'language' => 'ru',
'mode' => 'driving',
]);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
if ($data['status'] !== 'OK') {
return null;
}
$route = $data['routes'][0];
return [
'distance' => $route['legs'][0]['distance']['text'],
'duration' => $route['legs'][0]['duration']['text'],
'polyline' => $route['overview_polyline']['points'],
];
}
// Использование
$apiKey = require 'config.php';
$route = getRoute('Москва, Красная площадь', 'Санкт-Петербург, Невский проспект', $apiKey['google_maps_api_key']);
if ($route) {
echo "Расстояние: {$route['distance']}, Время: {$route['duration']}";
}
Обратите внимание на параметр mode — он может быть driving, walking, bicycling или transit. Выбирайте подходящий.
Сравниваем популярные API Google Maps
Вот краткая таблица основных API, которые могут пригодиться:
| API | Назначение | Лимит (бесплатно) |
|---|---|---|
| Maps JavaScript API | Отображение интерактивной карты | 28 000 загрузок карт в месяц |
| Geocoding API | Преобразование адресов в координаты и обратно | 40 000 запросов в месяц |
| Directions API | Построение маршрутов | 40 000 запросов в месяц |
| Places API | Поиск мест и автодополнение | Зависит от типа запроса |
Всегда проверяйте актуальные лимиты на официальном сайте Google — они периодически меняются.
Что в итоге
Интеграция Google Maps с PHP — задача вполне решаемая. Главное — правильно получить ключ, не забывать про ограничения и кэширование, а также выбирать подходящий API для каждой задачи. На клиенте карту рисуем через JavaScript, а на сервере обрабатываем данные: геокодируем, строим маршруты, кэшируем результаты. Такой подход даёт гибкость и контроль над расходами.
Надеюсь, статья была полезной. Пробуйте, экспериментируйте и не бойтесь карт — они открывают много возможностей для вашего проекта.



