Все готово!

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

Активация Google Maps Android API

Чтобы помочь вам освоиться, мы покажем, как выполнить некоторые необходимые действия в консоли разработчика Google:

  1. Создание или выбор проекта
  2. Активация Google Maps Android API
  3. Создание соответствующих ключей

Street View

Google Street View предоставляет круговые панорамы, снятые с указанных дорог в пределах области покрытия.

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

Google Maps Android API версии 2 имеет такую же область покрытия, что и приложение Google Maps на устройствах под управлением Android. Дополнительные сведения о службе Street View вместе с интерактивной картой поддерживаемых ею областей см. на странице О службе Street View.

Панорама Street View в вашем приложении моделируется классом StreetViewPanorama. В пользовательском интерфейсе вашего приложения панорама представлена с помощью либо объектаStreetViewPanoramaFragment, либо StreetViewPanoramaView.

Примеры кода

Репозиторий ApiDemos в GitHub содержит примеры, демонстрирующие использование Street View.

Обзор службы Street View в Google Maps Android API

Google Maps Android API предоставляет службу Street View для получения и работы с изображениями, используемыми в просмотре улиц. Изображения возвращаются в виде панорам.

Каждая панорама Street View представляет собой изображение или набор изображений, обеспечивающие полный круговой обзор из одной точки. Изображения соответствуют равнопромежуточной проекции (проекции Плате-Карре), содержащей 360-градусный горизонтальный обзор (полный оборот) и 180-градусный вертикальный обзор (от направления строго вверх до направления строго вниз). Полученная 360-градусная панорама определяет проекцию на сфере с помощью переноса изображения на двухмерную поверхность этой сферы.

StreetViewPanorama обеспечивает средство просмотра, которое представляет полученную панораму в виде сферы с камерой в центре. С помощью StreetViewPanoramaCamera вы можете выбирать масштаб и положение (наклон и направление) камеры.

Начало работы

Следуйте указаниям в руководстве по началу работы, чтобы настроить проект Google Maps Android API. Затем добавьте панораму Street View, выполнив описанные ниже действия.

Клиентская библиотека Google Play Services SDK включает в себя примеры панорам Street View, которые вы можете импортировать в собственный проект и использовать как основу для разработки. См. введение к указаниям по импорту примеров.

Использование API

Добавьте панораму Street View в фрагмент кода для Android, следуя приведенным ниже указаниям. Это наиболее простой способ добавить просмотр улиц в ваше приложение. Затем ознакомьтесь с дополнительной информацией о фрагментах, представлениях и настройке панорамы.

Добавление панорамы Street View

Сводные указания:

  1. Добавьте объект Fragment в операцию Activity, которая будет обрабатывать панораму Street View. Самый простой способ сделать это – добавить элемент<fragment> в файл макета для Activity.
  2. Реализуйте интерфейс OnStreetViewPanoramaReadyCallback и используйте метод обратного вызова onStreetViewPanoramaReady(StreetViewPanorama), чтобы получить дескриптор объекта StreetViewPanorama.
  3. Вызовите getStreetViewPanoramaAsync() для фрагмента, чтобы зарегистрировать обратный вызов.

Далее приведено более подробное описание каждого шага.

Добавление фрагмента

Добавьте элемент <fragment> в файл макета операции, чтобы определить объект Fragment. В этом элементе установите для атрибута class значение com.google.android.gms.maps.StreetViewPanoramaFragment (или SupportStreetViewPanoramaFragment).

Пример фрагмента в файле макета:

<fragment
    android:name="com.google.android.gms.maps.StreetViewPanoramaFragment"
    android:id="@+id/streetviewpanorama"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

Добавление кода панорамы Street View

Для работы с панорамой Street View внутри своего приложения вам потребуется реализовать интерфейс OnStreetViewPanoramaReadyCallback и установить экземпляр обратного вызова для объекта StreetViewPanoramaFragment или StreetViewPanoramaView. В этом руководстве используется StreetViewPanoramaFragment, поскольку это наиболее простой способ добавить панораму Street View в приложение. Первым шагом является реализация интерфейса обратного вызова:

public class MainActivity extends FragmentActivity
    implements OnStreetViewPanoramaReadyCallback {
...
}

В методе onCreate() операции Activity установите файл макета как представление контента. Например, если файл макета называется main.xml, используйте следующий код:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    ...
}

Получите дескриптор фрагмента, вызвав метод FragmentManager.findFragmentById() и передав ему идентификатор ресурса своего элемента <fragment>. Обратите внимание, что идентификатор ресурса R.id.streetviewpanorama автоматически добавляется в проект Android при создании файла макета.

Затем используйте getStreetViewPanoramaAsync(), чтобы установить обратный вызов для фрагмента.

StreetViewPanoramaFragment streetViewPanoramaFragment =
    (StreetViewPanoramaFragment) getFragmentManager()
        .findFragmentById(R.id.streetviewpanorama);
streetViewPanoramaFragment.getStreetViewPanoramaAsync(this);

Примечание. getStreetViewPanoramaAsync() необходимо вызывать из основного потока, обратный вызов также будет выполнен в основном потоке. Если на устройстве пользователя службы Google Play не установлены, обратный вызов не будет выполнен до тех пор, пока пользователь их не установит.

Используйте метод обратного вызова onStreetViewPanoramaReady(StreetViewPanorama), чтобы получить экземпляр StreetViewPanorama, отличный от null и готовый к использованию.

@Override
public void onStreetViewPanoramaReady(StreetViewPanorama panorama) {
    panorama.setPosition(new LatLng(-33.87365, 151.20689));
}

Дополнительная информация о настройке начального состояния

В отличие от карт, начальное состояние панорамы Street View нельзя настроить с помощью файла XML. Тем не менее, вы можете настроить панораму программным способом, передав объект StreetViewPanoramaOptions с указанными вами параметрами.

mSvpView = new StreetViewPanoramaView(this,
    new StreetViewPanoramaOptions().position(SAN_FRAN));

Дополнительная информация о StreetViewPanoramaFragment

StreetViewPanoramaFragment – это подкласс класса Fragment в Android, который позволяет помещать панораму Street View в фрагмент Android. Объекты StreetViewPanoramaFragment выступают в роли контейнеров для панорамы и обеспечивают доступ к объекту StreetViewPanorama.

Примечание. Для поддержки объектов StreetViewPanoramaFragment Google Maps Android API требуется уровень API 12 или выше. Если вы разрабатываете приложение для уровня API ниже 12, то для доступа к этим же функциональным возможностям можно использовать класс SupportStreetViewPanoramaFragment. Вам также необходимо включить вспомогательную библиотекуAndroid.

Примечание. Google Maps Android API не поддерживает несколько объектов StreetViewPanoramaFragment в одной операции.

StreetViewPanoramaView

StreetViewPanoramaView, подкласс класса View в Android, позволяет помещать панораму Street View в представление View. View представляет собой прямоугольную область на экране и является основным структурным элементом для приложений и виджетов Android. Подобно StreetViewPanoramaFragment, StreetViewPanoramaView выступает как контейнер для панорамы, обеспечивая ее основные функциональные возможности с помощью объекта StreetViewPanorama. Пользователи этого класса должны передавать все методы жизненного цикла операций (такие как onCreate(), onDestroy(), onResume() и onPause())) в соответствующие методы класса StreetViewPanoramaView.

Примечание. Google Maps Android API не поддерживает несколько объектов StreetViewPanoramaView в одной операции.

Настройка функций, доступных пользователям

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

setPanningGesturesEnabled()
Определяет, может ли пользователь изменять ориентацию камеры перетаскиванием.
      mSvp.setPanningGesturesEnabled(false);
setUserNavigationEnabled()
Определяет, может ли пользователь перемещаться к другой панораме. Для перехода к новой панораме пользователи могут однократно нажать ссылку навигации или дважды нажать представление панорамы.
      mSvp.setUserNavigationEnabled(false);
setZoomGesturesEnabled()
Определяет, может ли пользователь изменять масштаб сведением или разведением пальцев.
      mSvp.setZoomGesturesEnabled(false);

Кроме того, вы можете определить, будут ли видны пользователям названия улиц:

setStreetNamesEnabled()
Определяет, может ли пользователь видеть названия улиц, отображаемые на поверхности.
      mSvp.setStreetNamesEnabled(false);

Установка местоположения панорамы

Чтобы установить местоположение панорамы Street View, вызовите метод StreetViewPanorama.setPosition(), передав координаты LatLng. Кроме того, в качестве дополнительного параметра можно передать radius. Радиус применяется тогда, когда вы хотите расширить или сузить область, в пределах которой Street View будет выполнять поиск соответствующей панорамы. Значение радиуса 0 означает, что панорама должна быть связана с точно указанными координатами LatLng. По умолчанию для радиуса установлено значение 50. Если в соответствующей области обнаружены несколько панорам, API предоставит наиболее подходящий вариант.

private static final LatLng SAN_FRAN = new LatLng(37.765927, -122.449972);
mSvp.setPosition(SAN_FRAN);

Вы также можете установить местоположение с помощью идентификатора панорамы, передав panoId в метод StreetViewPanorama.setPosition().

Чтобы получить идентификатор для соседних панорам, сначала используйте getLocation() для получения объекта StreetViewPanoramaLocation. Этот объект содержит идентификатор текущей панорамы и массив объектов StreetViewPanoramaLink, каждый из которых содержит идентификатор панорамы, связанной с текущей.

StreetViewPanoramaLocation location = mSvp.getLocation();
if (location != null && location.links != null) {
    mSvp.setPosition(location.links[0].panoId);
}

Увеличение и уменьшение масштаба

Вы можете изменить уровень масштабирования программными средствами, установив StreetViewPanoramaCamera.zoom. Если для масштаба установлено значение 1,0, коэффициент увеличения изображения будет равен 2.

В следующем фрагменте кода используется StreetViewPanoramaCamera.Builder() для создания новой камеры с наклоном и направлением существующей камеры при увеличении масштаба на 50 процентов.

private static final float ZOOM_BY = 0.5f;
StreetViewPanoramaCamera camera = new StreetViewPanoramaCamera.Builder()
    .zoom(mSvp.getPanoramaCamera().zoom + ZOOM_BY)
    .tilt(mSvp.getPanoramaCamera().tilt)
    .bearing(mSvp.getPanoramaCamera().bearing)
    .build();

Установка ориентации камеры (точка обзора)

Вы можете определить ориентацию камеры Street View, установив параметры направления и наклона для StreetViewPanoramaCamera.

bearing
Направление камеры, указанное в градусах по часовой стрелке от истинного севера. Строго на север – 0, на восток – 90, на юг – 180, на запад – 270.
tilt
Наклон вверх или вниз по оси Y. Диапазон значений – от -90 до 90, где -90 указывает направление вертикально вниз, 0 – направление на горизонт, 90 – направление вертикально вверх. Изменение измеряется от начального угла наклона камеры, используемого по умолчанию. В большинстве случаев (но не всегда) этот угол является строго горизонтальным. Например, при съемке панорамы на холме угол наклона по умолчанию, скорее всего, не будет горизонтальным.

В следующем фрагменте кода используется StreetViewPanoramaCamera.Builder() для создания новой камеры с масштабированием и наклоном существующей камеры при изменении направления на 30 градусов влево.

private static final int PAN_BY = 30;
StreetViewPanoramaCamera camera = new StreetViewPanoramaCamera.Builder()
    .zoom(mSvp.getPanoramaCamera().zoom)
    .tilt(mSvp.getPanoramaCamera().tilt)
    .bearing(mSvp.getPanoramaCamera().bearing - PAN_BY)
    .build();

В следующем примере камера наклоняется вверх на 30 градусов.

float tilt = mSvp.getPanoramaCamera().tilt + 30;
tilt = (tilt > 90) ? 90 : tilt;

StreetViewPanoramaCamera previous = mSvp.getPanoramaCamera();

StreetViewPanoramaCamera camera = new StreetViewPanoramaCamera.Builder(previous)
    .tilt(tilt)
    .build();

Анимация перемещений камеры

Чтобы добавить анимацию к перемещениям камеры, вызовите StreetViewPanorama.animateTo(). Анимация интерполирует изображение между текущими и новыми атрибутами камеры. Если вы хотите перейти непосредственно к новому изображению без анимации, установите для ее длительности значение 0.

// Set the tilt to zero, keeping the zoom and bearing at current values.
// Animate over a duration of 500 milliseconds.
long duration = 500;
float tilt = 0;
StreetViewPanoramaCamera camera = new StreetViewPanoramaCamera.Builder()
    .zoom(mSvp.getPanoramaCamera().zoom)
    .bearing(mSvp.getPanoramaCamera().bearing)
    .tilt(tilt)
    .build();

mSvp.animateTo(camera, duration);

Оставить отзыв о...

Текущей странице
Google Maps Android API
Google Maps Android API
Нужна помощь? Обратитесь в службу поддержки.