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 и его экземпляр с помощью метода GMSPanoramaView initWithFrame:. Если это единственное представление контроллера, то 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.