Контрол Street View в Google Maps JavaScript API предоставляет встроенный интерфейс для перехода из режима карты в режим панорамного просмотра улиц. Пользователь может открыть панораму выбранной точки, исследовать окружающую местность и затем вернуться к обычному отображению карты.
Street View является частью инфраструктуры Google Maps и тесно интегрирован с объектом карты. Контрол позволяет:
По умолчанию контрол отображается в правой нижней части карты.
При создании карты контрол Street View обычно активирован автоматически.
const map = new google.maps.Map(
document.getElementById("map"),
{
center: {
lat: 40.7128,
lng: -74.0060
},
zoom: 14
}
);
В данном примере кнопка Street View будет присутствовать на карте без дополнительной настройки.
Для повышения читаемости конфигурации нередко используется явное
указание параметра streetViewControl.
const map = new google.maps.Map(
document.getElementById("map"),
{
center: {
lat: 40.7128,
lng: -74.0060
},
zoom: 14,
streetViewControl: true
}
);
Свойство принимает логическое значение:
| Значение | Описание |
|---|---|
true |
Контрол отображается |
false |
Контрол скрыт |
Во многих интерфейсах режим панорам не требуется. Например:
В таких случаях контрол можно отключить.
const map = new google.maps.Map(
document.getElementById("map"),
{
center: {
lat: 55.7558,
lng: 37.6176
},
zoom: 12,
streetViewControl: false
}
);
После отключения кнопка Street View исчезает из интерфейса.
Google Maps позволяет разместить контрол практически в любой области карты.
Для этого используется свойство
streetViewControlOptions.
const map = new google.maps.Map(
document.getElementById("map"),
{
center: {
lat: 48.8566,
lng: 2.3522
},
zoom: 13,
streetViewControl: true,
streetViewControlOptions: {
position: google.maps.ControlPosition.TOP_RIGHT
}
}
);
Позиция определяется перечислением
google.maps.ControlPosition.
Наиболее востребованные варианты:
google.maps.ControlPosition.TOP_LEFT
google.maps.ControlPosition.TOP_CENTER
google.maps.ControlPosition.TOP_RIGHT
google.maps.ControlPosition.LEFT_TOP
google.maps.ControlPosition.RIGHT_TOP
google.maps.ControlPosition.LEFT_CENTER
google.maps.ControlPosition.RIGHT_CENTER
google.maps.ControlPosition.BOTTOM_LEFT
google.maps.ControlPosition.BOTTOM_CENTER
google.maps.ControlPosition.BOTTOM_RIGHT
Пример размещения в левом верхнем углу:
streetViewControlOptions: {
position: google.maps.ControlPosition.TOP_LEFT
}
Каждая карта содержит связанный объект панорамы.
Получение осуществляется через метод
getStreetView().
const panorama = map.getStreetView();
Полученный объект относится к классу
google.maps.StreetViewPanorama.
Через него выполняется всё программное управление режимом Street View.
Street View может быть открыт без использования встроенного контрола.
const panorama = map.getStreetView();
panorama.setPosition({
lat: 40.7580,
lng: -73.9855
});
panorama.setVisible(true);
После выполнения кода карта переключится в режим панорамы.
Для возврата к обычной карте используется метод:
panorama.setVisible(false);
Полный пример:
const panorama = map.getStreetView();
document
.getElementById("closeStreetView")
.addEventListener("click", () => {
panorama.setVisible(false);
});
Определить, отображается ли Street View в данный момент, позволяет
метод getVisible().
if (panorama.getVisible()) {
console.log("Панорама открыта");
}
Либо:
const isVisible = panorama.getVisible();
console.log(isVisible);
Событие visible_changed вызывается при изменении
видимости панорамы.
panorama.addListener(
"visible_changed",
() => {
if (panorama.getVisible()) {
console.log("Street View открыт");
} else {
console.log("Street View закрыт");
}
}
);
Такой подход часто используется для:
Панорама может быть перемещена на другую географическую позицию.
panorama.setPosition({
lat: 51.5007,
lng: -0.1246
});
Получение текущей позиции:
const position = panorama.getPosition();
console.log(position.lat());
console.log(position.lng());
После открытия Street View можно задать направление камеры.
Используется метод setPov().
panorama.setPov({
heading: 90,
pitch: 0
});
Параметры:
| Свойство | Назначение |
|---|---|
heading |
Горизонтальный угол |
pitch |
Вертикальный угол |
panorama.setPov({
heading: 90,
pitch: 0
});
panorama.setPov({
heading: 180,
pitch: 30
});
panorama.setPov({
heading: 180,
pitch: -30
});
const pov = panorama.getPov();
console.log(pov.heading);
console.log(pov.pitch);
Это полезно при сохранении пользовательского положения камеры.
Когда пользователь вращает панораму, возникает событие
pov_changed.
panorama.addListener(
"pov_changed",
() => {
const pov = panorama.getPov();
console.log(pov.heading);
console.log(pov.pitch);
}
);
При переходе по улицам Street View генерирует событие
position_changed.
panorama.addListener(
"position_changed",
() => {
const position = panorama.getPosition();
console.log(
position.lat(),
position.lng()
);
}
);
Это позволяет:
Каждая панорама обладает собственным идентификатором.
Получение:
const panoId = panorama.getPano();
console.log(panoId);
Установка:
panorama.setPano(
"F:1234567890"
);
Использование идентификаторов особенно полезно при сохранении конкретных панорам в базе данных.
Для панорамы доступны собственные элементы управления.
const panorama = map.getStreetView();
panorama.setOptions({
zoomControl: true,
panControl: true,
addressControl: true
});
panorama.setOptions({
zoomControl: false
});
Отключает кнопки изменения масштаба внутри панорамы.
panorama.setOptions({
addressControl: false
});
Скрывает отображаемый адрес текущего местоположения.
panorama.setOptions({
enableCloseButton: false
});
При такой конфигурации закрытие панорамы должно выполняться собственными средствами приложения.
const panorama = map.getStreetView();
panorama.setOptions({
addressControl: true,
linksControl: true,
panControl: true,
zoomControl: true,
enableCloseButton: true
});
Параметры:
| Параметр | Назначение |
|---|---|
addressControl |
Отображение адреса |
linksControl |
Стрелки навигации |
panControl |
Управление обзором |
zoomControl |
Масштабирование |
enableCloseButton |
Кнопка закрытия |
Street View необязательно открывать поверх карты. Панорама может отображаться в отдельном HTML-блоке.
<div id="map"></div>
<div id="street-view"></div>
const panorama =
new google.maps.StreetViewPanorama(
document.getElementById("street-view"),
{
position: {
lat: 40.7580,
lng: -73.9855
},
pov: {
heading: 0,
pitch: 0
}
}
);
Такой подход используется в профессиональных картографических системах, где карта и панорама отображаются одновременно.
const map = new google.maps.Map(
document.getElementById("map"),
{
center: {
lat: 40.7580,
lng: -73.9855
},
zoom: 15
}
);
const panorama =
new google.maps.StreetViewPanorama(
document.getElementById("street-view"),
{
position: {
lat: 40.7580,
lng: -73.9855
}
}
);
map.setStreetView(panorama);
Теперь карта и панорама будут работать как единая система.
const map = new google.maps.Map(
document.getElementById("map"),
{
center: {
lat: 40.7580,
lng: -73.9855
},
zoom: 15,
streetViewControl: true
}
);
const panorama = map.getStreetView();
document
.getElementById("open")
.addEventListener("click", () => {
panorama.setPosition({
lat: 40.7580,
lng: -73.9855
});
panorama.setPov({
heading: 100,
pitch: 5
});
panorama.setVisible(true);
});
document
.getElementById("close")
.addEventListener("click", () => {
panorama.setVisible(false);
});
Данный сценарий демонстрирует полный цикл работы с контролом Street View: отображение кнопки на карте, программное открытие панорамы, настройку направления обзора и последующее закрытие режима панорамного просмотра.