Street View

Выберите платформу: Android iOS JavaScript

Просмотр улиц в Google Картах позволяет исследовать мир с помощью панорамных снимков. Вы можете исследовать достопримечательности, любоваться чудесами природы, прокладывать маршруты или показывать, как выглядит ваша компания снаружи.

Обзор

Google Просмотр улиц – это сервис, предоставляющий доступ к круговым панорамам множества разных мест по всему миру. В SDK поддерживается та же область покрытия, что и в приложении Google Карты для iOS или https://maps.google.com/. Подробнее о функции "Просмотр улиц" и о поддерживаемых областях на интерактивной карте…

Maps SDK для iOS предоставляет сервис «Просмотр улиц» для получения изображений, используемых в Google Картах, и управления ими. Изображения Просмотра улиц возвращаются в виде панорам и отображаются в средстве просмотра – объекте типа GMSPanoramaView.

Панорамы в Просмотре улиц

Каждая панорама в Просмотре улиц представляет собой изображение или набор изображений, которые обеспечивают полный круговой обзор из одной точки. Используются изображения с равнопромежуточной проекцией (Plate Carrée), которая обеспечивает обзор в 360° по горизонтали и 180° по вертикали. Полученная круговая панорама представляется в виде проекции на сфере, то есть изображение накладывается на двухмерную поверхность сферы.

Панорамы в Просмотре улиц можно просматривать с помощью объекта GMSPanoramaView. Этот объект используется для отображения панорамы в качестве сферы, в центре которой находится камера. Вы можете программно управлять ориентацией камеры, а также несколькими свойствами, настраивающими окно просмотра.

Как получить доступ к данным Просмотра улиц

Панорамы в Просмотре улиц идентифицируются по одному из двух типов метаданных:

panoramaID
Уникальный идентификатор панорамы в Просмотре улиц. panoramaID может со временем измениться, поэтому не подходит для долгосрочного использования или в качестве жестко закодированной ссылки. Класс panoramaID лучше всего использовать для программного доступа к различным изображениям Просмотра улиц.
coordinate
Точное местоположение изображения, выраженное как CLLocationCoordinate2D. Используйте coordinate для постоянного хранения местоположения панорамы или для преобразования действий пользователя на карте в изображение Просмотра улиц.

И panoramaID, и coordinate хранятся как свойства объекта GMSPanorama. Вы можете запросить GMSPanorama у GMSPanoramaService с помощью coordinate или panoramaID. Результирующий объект будет содержать оба элемента метаданных, а также массив ссылок на соседние панорамы.

Как задать местоположение панорамы

Местоположение панорамы в Просмотре улиц можно задать на основе координат.

  • Метод moveNearCoordinate запрашивает панораму рядом с указанными координатами.

  • Метод moveNearCoordinate:radius работает аналогично, но позволяет указать радиус поиска в метрах вокруг координаты.

  • Метод moveNearCoordinate:source позволяет указать источник. Указать источник (параметр source) имеет смысл в случае, если вы хотите, чтобы Просмотр улиц искал панорамы только вне помещений. По умолчанию панорамы мест могут быть сняты как внутри, так и снаружи. Обратите внимание, что для указанного местоположения может не найтись панорамы, снятой вне помещений.

  • Метод moveNearCoordinate:radius:source позволяет указать и радиус, и источник.

Изображения просмотра улиц

Как добавить окно Просмотра улиц

Ниже приведены основные шаги для добавления средства просмотра.

  1. (Один раз) Следуйте инструкциям в разделе Начало работы, чтобы получить SDK, ключ и добавить необходимые фреймворки.
  2. Создайте или обновите ViewController. Если панорама должна отображаться, когда этот контроллер представления становится видимым, создайте ее в методе loadView.
  3. Создайте класс GMSPanoramaView и его экземпляр с помощью метода initWithFrame: класса GMSPanoramaView. Если это единственный вид контроллера, то в качестве фрейма карты можно использовать CGRectZero. Размер карты будет изменен автоматически.
  4. Задайте объект GMSPanoramaView в качестве представления контроллера представления. Пример: self.view = panoView;.
  5. Задайте местоположение изображения Просмотра улиц с помощью метода, например moveNearCoordinate:.

В показанном ниже коде на карту добавляется модуль просмотра улиц.

Swift

import GoogleMaps

class StreetView: UIViewController {

  override func loadView() {
    let panoView = GMSPanoramaView(frame: .zero)
    self.view = panoView

    panoView.moveNearCoordinate(CLLocationCoordinate2D(latitude: -33.732, longitude: 150.312))
  }
}
      

Objective-C

#import "StreetView.h"
@import GoogleMaps;

@interface StreetView ()

@end

@implementation StreetView

- (void)loadView {
  GMSPanoramaView *panoView = [[GMSPanoramaView alloc] initWithFrame:CGRectZero];
  self.view = panoView;

  [panoView moveNearCoordinate:CLLocationCoordinate2DMake(-33.732, 150.312)];
}

@end
      

Настройте окно просмотра

Параметры средства отображения можно изменить, ограничив жесты, доступные для использования. По умолчанию панорамирование, масштабирование и перемещение к соседним панорамам включены. Отдельные жесты управляются через свойства GMSPanoramaView. Эти свойства включают или отключают поддержку жестов. Если жесты отключены, остается возможность вносить изменения программно.

orientationGestures
Определяет, может ли пользователь изменять ориентацию камеры нажатием или перетаскиванием. Чтобы запретить изменение ориентации камеры, задайте значение NO.
zoomGestures
Определяет, может ли пользователь изменять масштаб жестом сведения или разведения пальцев. Чтобы отключить масштабирование, задайте значение NO.
navigationGestures
Определяет, может ли пользователь изменить видимую панораму. Пользователи могут нажать на ссылку навигации или дважды нажать на панораму, чтобы перейти к другой панораме. Чтобы отключить навигацию, задайте значение NO.

Вы можете включить или отключить все жесты одновременно с помощью метода setAllGesturesEnabled:.

Swift

panoView.setAllGesturesEnabled(false)
      

Objective-C

[panoView setAllGesturesEnabled:NO];
      

Как запустить Просмотр улиц с помощью схемы URL

Изображения Просмотра улиц можно увидеть в приложении "Google Карты" для iOS. Вы можете запустить приложение "Google Карты" для iOS в режиме просмотра улиц, используя схему URL comgooglemaps и задав для параметра mapmode значение streetview. Ниже приведен пример URL, который запускает Просмотр улиц. Дополнительную информацию можно найти в документации по схеме URL.

comgooglemaps://?center=46.414382,10.013988&mapmode=streetview

Местоположение и точка обзора в Просмотре улиц

Объект GMSPanoramaCamera позволяет задать точку обзора камеры Просмотра улиц, используя сочетание направления, наклона и масштаба.

В приведенном ниже фрагменте показана ориентация камеры на юг с небольшим наклоном вниз.

Swift

panoView.camera = GMSPanoramaCamera(heading: 180, pitch: -10, zoom: 1)
      

Objective-C

panoView.camera = [GMSPanoramaCamera cameraWithHeading:180
                                                 pitch:-10
                                                  zoom:1];
      

Ориентация

Местоположение Просмотра улиц определяет фокус камеры для изображения, но не определяет ориентацию камеры для этого изображения. для нее предусмотрены два свойства объекта GMSOrientation.

  • heading определяет угол поворота вокруг позиции камеры в градусах относительно истинного севера. Направление измеряется по часовой стрелке: географическому северу соответствует значение 0, востоку – 90, югу – 180, а западу – 270.
  • pitch (по умолчанию 0) – определяет отклонение угла вверх или вниз от исходного угла наклона камеры по умолчанию, который часто (но не всегда) совершенно горизонтален. Например, при съемке панорамы на холме угол наклона по умолчанию не будет горизонтальным. Положительное значение угла наклона означает направление вверх (до +90° вверх перпендикулярно углу наклона по умолчанию), а отрицательное – вниз (до -90° вниз перпендикулярно углу наклона по умолчанию).

Zoom

Street View также поддерживает разные уровни детализации изображений с помощью масштабирования. Вы можете задать уровень масштабирования программно, или пользователи могут изменить его в средстве просмотра, сведя или разведя пальцы.

Перемещение камеры

После того как вы создали объект GMSPanoramaView и настроили для него камеру или оставили настройки по умолчанию, вы можете изменить их несколькими способами. Перемещения камеры можно анимировать, Текущие и новые значения атрибутов камеры интерполируются.

Вы можете изменить объект GMSPanoramaCamera и задать его в свойстве camera объекта GMSPanoramaView. Камера сразу же переместится на новое место без анимации. Объект GMSCameraPosition можно создать для настройки любого сочетания ориентации и масштаба.

Swift

panoView.camera = GMSPanoramaCamera(heading: 180, pitch: -10, zoom: 1)
      

Objective-C

panoView.camera = [GMSPanoramaCamera cameraWithHeading:180
                                                 pitch:-10
                                                  zoom:1];
      

Вы можете анимировать переход, вызвав метод animateToCamera:animationDuration: объекта GMSPanoramaView. Кроме того, для управления камерой можно использовать базовую анимацию. Это возможно благодаря специальному CALayer в GMSPanoramaView, GMSPanoramaLayer.

Маркеры в просмотре улиц

Объект GMSPanoramaView может показывать маркеры на карте. Один и тот же объект GMSMarker можно использовать как в объекте GMSMapView, так и в объекте GMSPanoramaView, задав соответствующие свойства:

Swift

// Create a marker at the Eiffel Tower
let position = CLLocationCoordinate2D(latitude: 48.858, longitude: 2.294)
let marker = GMSMarker(position: position)

// Add the marker to a GMSPanoramaView object named panoView
marker.panoramaView = panoView

// Add the marker to a GMSMapView object named mapView
marker.map = mapView
      

Objective-C

// Create a marker at the Eiffel Tower
CLLocationCoordinate2D position = CLLocationCoordinate2DMake(48.858,2.294);
GMSMarker *marker = [GMSMarker markerWithPosition:position];

// Add the marker to a GMSPanoramaView object named panoView
marker.panoramaView = panoView;

// Add the marker to a GMSMapView object named mapView
marker.map = mapView;
      

Размер маркеров будет изменяться в зависимости от расстояния между маркером и местоположением GMSCameraView. Если это расстояние станет слишком большим, маркер будет слишком маленьким для отображения и будет скрыт.

Чтобы удалить маркер с карты GMSPanoramaView, установите для свойства panoramaView значение nil.

Swift

marker.panoramaView = nil
      

Objective-C

marker.panoramaView = nil;
      

События

Вы можете отслеживать события, происходящие на панораме в Просмотре улиц, например когда пользователь нажимает на нее. Чтобы отслеживать события, необходимо реализовать протокол GMSPanoramaViewDelegate. Ознакомьтесь с руководством по событиям и списком методов в GMSPanoramaViewDelegate.