Google Maps JavaScript API предоставляет специализированный набор инструментов для работы со Street View через объектную модель Street View Service. Эта часть API отвечает за получение панорамных изображений улиц, управление виртуальной камерой и интеграцию панорам в пользовательские интерфейсы веб-приложений.
Street View в JavaScript API построен вокруг трёх ключевых компонентов:
Каждый компонент решает отдельную задачу: сервис ищет данные, панорама отображает их, события синхронизируют поведение интерфейса.
StreetViewService используется для запроса ближайших панорамных изображений по координатам или параметрам поиска.
const service = new google.maps.StreetViewService();
service.getPanorama(
{
location: { lat: 43.238949, lng: 76.889709 },
radius: 50
},
(data, status) => {
if (status === "OK") {
console.log("Pano ID:", data.location.pano);
}
}
);
OK — панорама найденаZERO_RESULTS — нет доступных панорамUNKNOWN_ERROR — ошибка сервераINVALID_REQUEST — некорректные параметрыStreetViewPanorama отвечает за отображение 360° изображения и управление камерой.
const panorama = new google.maps.StreetViewPanorama(
document.getElementById("street-view"),
{
position: { lat: 43.238949, lng: 76.889709 },
pov: {
heading: 165,
pitch: 0
},
zoom: 1
}
);
Определяет координаты текущей точки обзора.
POV управляет виртуальной камерой:
pov: {
heading: 90,
pitch: 10
}
Масштаб приближения панорамы.
Управляет отображением Street View слоя.
StreetViewPanorama предоставляет методы для динамического управления состоянием:
panorama.setPosition({ lat: 43.238949, lng: 76.889709 });
panorama.setPov({
heading: 200,
pitch: 5
});
panorama.setVisible(true);
Возвращает идентификатор текущей панорамы:
const panoId = panorama.getPano();
Система событий позволяет отслеживать изменения состояния панорамы.
Срабатывает при изменении координат.
panorama.addListener("position_changed", () => {
console.log(panorama.getPosition());
});
Срабатывает при изменении угла обзора.
panorama.addListener("pov_changed", () => {
console.log(panorama.getPov());
});
Смена идентификатора панорамы.
panorama.addListener("pano_changed", () => {
console.log(panorama.getPano());
});
Обновление доступных переходов между панорамами.
Изменение статуса загрузки данных Street View.
Street View поддерживает перемещение между связанными панорамами через links.
panorama.addListener("links_changed", () => {
const links = panorama.getLinks();
links.forEach(link => {
console.log(link.description, link.heading);
});
});
Каждый link содержит:
Street View может быть встроен в карту через Map instance.
const map = new google.maps.Map(document.getElementById("map"), {
center: { lat: 43.238949, lng: 76.889709 },
zoom: 14,
streetViewControl: true
});
const panorama = map.getStreetView();
panorama.setPosition({ lat: 43.238949, lng: 76.889709 });
panorama.setPov({ heading: 100, pitch: 0 });
panorama.setVisible(true);
Street View автоматически синхронизируется с картой при включённом контроле.
Часто используется сценарий «найти ближайшую доступную панораму»:
const service = new google.maps.StreetViewService();
service.getPanorama(
{
location: { lat: 43.238949, lng: 76.889709 },
radius: 100
},
(result, status) => {
if (status === "OK") {
panorama.setPano(result.location.pano);
panorama.setPov({ heading: 0, pitch: 0 });
}
}
);
Результат запроса содержит структурированную информацию:
{
location: {
pano: "abc123",
description: "Street name",
latLng: { lat: 43.238, lng: 76.889 }
},
copyright: "© Google",
links: []
}
Эта структура используется для точной идентификации панорамы и её связей.
StreetViewPanoramaOptions включает расширенные параметры:
Отключает стандартные элементы управления.
Управляет отображением подписей дорог.
Разрешает переход по клику на карту.
const panorama = new google.maps.StreetViewPanorama(
container,
{
clickToGo: true,
disableDefaultUI: false,
showRoadLabels: true
}
);
Street View может использоваться как backend для собственной визуализации:
panorama.addListener("pov_changed", () => {
const pov = panorama.getPov();
updateCompass(pov.heading);
});
или
panorama.addListener("position_changed", () => {
syncMarker(panorama.getPosition());
});
Каждая панорама имеет уникальный идентификатор:
panorama.setPano("unique_pano_id");
Street View Service зависит от покрытия:
При отсутствии данных сервис возвращает ZERO_RESULTS,
даже если координаты корректны.
Street View не является просто слоем карты, а отдельной системой рендеринга. Однако он синхронизируется с Map API через:
Это позволяет создавать комбинированные интерфейсы «карта + панорама» с динамической связью движения и ориентации.