Place Details запрос используется для получения расширенной информации об объекте, найденном через Places API. В отличие от поиска, который возвращает ограниченный набор данных (имя, координаты, place_id), Place Details формирует полную карточку объекта: контактные данные, часы работы, рейтинг, фотографии, отзывы, типы места и множество дополнительных полей.
Place Details является частью Places Library и работает через сервис
PlacesService, встроенный в JavaScript API.
Ключевым параметром любого запроса Place Details выступает
place_id.
place_id — стабильный идентификатор, который:
Пример использования place_id:
const placeId = "ChIJN1t_tDeuEmsRUsoyG83frY4";
Для выполнения Place Details запроса используется объект
PlacesService, который привязывается к карте или
DOM-элементу.
const map = new google.maps.Map(document.getElementById("map"), {
center: { lat: 48.8566, lng: 2.3522 },
zoom: 13,
});
const service = new google.maps.places.PlacesService(map);
PlacesService может работать даже без отображения карты,
если передать пустой div, однако наличие карты обычно
используется для контекста и корректной инициализации API.
Основной метод для Place Details запросов:
service.getDetails(request, callback);
Структура request:
const request = {
placeId: "PLACE_ID",
fields: ["name", "formatted_address", "geometry", "rating", "formatted_phone_number"],
};
Параметр fields критически важен, так как определяет
объем возвращаемых данных и стоимость запроса.
Доступные категории полей:
Базовые данные:
nameplace_idtypesКонтактная информация:
formatted_addressinternational_phone_numberwebsiteГеометрия:
geometry.locationgeometry.viewportОценки и отзывы:
ratinguser_ratings_totalreviewsМедиа:
photosНеправильное использование fields приводит к:
const request = {
placeId: "ChIJN1t_tDeuEmsRUsoyG83frY4",
fields: [
"name",
"formatted_address",
"geometry",
"rating",
"user_ratings_total",
"website",
"formatted_phone_number",
"opening_hours"
],
};
service.getDetails(request, (place, status) => {
if (status === google.maps.places.PlacesServiceStatus.OK) {
console.log(place.name);
console.log(place.formatted_address);
console.log(place.rating);
}
});
Объект place может содержать:
{
name: "Название места",
formatted_address: "Полный адрес",
geometry: {
location: LatLng,
viewport: LatLngBounds
},
rating: 4.5,
user_ratings_total: 1200,
international_phone_number: "+33 ...",
website: "https://...",
opening_hours: {
open_now: true,
weekday_text: []
},
photos: [],
reviews: []
}
Отзывы возвращаются как массив объектов:
place.reviews.forEach(review => {
console.log(review.author_name);
console.log(review.rating);
console.log(review.text);
});
Каждый отзыв включает:
Важно учитывать, что Google возвращает ограниченное число отзывов, а не полный список.
Массив photos содержит объекты Photo,
требующие отдельного запроса URL.
const photoUrl = place.photos[0].getUrl({
maxWidth: 400,
maxHeight: 400,
});
Фотографии не передаются напрямую, только через генерацию URL с ограничениями размеров.
Структура данных:
place.opening_hours.weekday_text
place.opening_hours.open_now
Пример:
if (place.opening_hours?.open_now) {
console.log("Открыто");
}
Каждый Place Details запрос возвращает статус:
OK — успешный ответNOT_FOUND — место не найденоINVALID_REQUEST — ошибка параметровOVER_QUERY_LIMIT — превышение лимитаREQUEST_DENIED — отказ в доступеUNKNOWN_ERROR — временная ошибка сервераОбработка статусов:
if (status !== google.maps.places.PlacesServiceStatus.OK) {
console.error("Ошибка запроса:", status);
}
Хотя getDetails использует callback-стиль, его часто
оборачивают в Promise:
function getPlaceDetails(service, request) {
return new Promise((resolve, reject) => {
service.getDetails(request, (place, status) => {
if (status === google.maps.places.PlacesServiceStatus.OK) {
resolve(place);
} else {
reject(status);
}
});
});
}
Использование:
const place = await getPlaceDetails(service, request);
Для повышения качества биллинга и группировки запросов используется
AutocompleteSessionToken, который связывает Autocomplete и
Place Details.
const sessionToken = new google.maps.places.AutocompleteSessionToken();
Он позволяет:
Place Details подчиняется следующим ограничениям:
fields;Неправильная организация запросов приводит к:
Place Details применяется в системах:
Place Details часто используется вместе с:
Типичный поток:
place_idДанные Place Details не нормализованы как в классических БД. Они:
Поэтому обработка всегда требует проверки существования полей:
if (place.website) {
console.log(place.website);
}