Place Photos (Новое) позволяет добавлять в приложение высококачественный фотоконтент. Place Photos открывает доступ к миллионам фотографий, которые хранятся в базе данных Places. Place Photos возвращает URI растрового изображения. Максимальный размер растрового изображения – 4800 x 4800 пикселей.
Запросы Place Photos
Чтобы получить изображение места, выполните следующие действия:
- Используйте информацию о местах (New), чтобы получить объект
Placeс помощьюfetchPlace(). Убедитесь, что полеPlace.Field PHOTO_METADATASвключено в список полей, которые должны быть в объекте ответаPlace. - В методе
OnSuccessListenerдляFetchPlaceResponseвызовитеPlace.getPhotoMetadas(), чтобы получить объект метаданных фотографии типаPhotoMetadataиз объекта ответаPlace. - Создайте объект
FetchResolvedPhotoUriRequest, чтобы выполнить запрос и передать объект метаданных фотографии, а также значения максимальной высоты, максимальной ширины или того и другого. - Используйте
PlacesClient.fetchResolvedPhotoUri(), чтобы запросить URI фотографии. - Добавьте
OnSuccessListenerи получите URI фотографии из объектаFetchResolvedPhotoUriResponse.
Обязательные параметры
Обязательные параметры для FetchResolvedPhotoUriRequest:
-
Метаданные фотографий
Объект метаданных фотографии, который нужно вернуть.
-
Максимальная высота или максимальная ширина
Определяет максимальную высоту и ширину возвращаемого изображения в пикселях. Если изображение меньше указанных значений, будет возвращено исходное изображение. Если изображение больше по какому-либо из параметров, оно будет масштабировано в соответствии с меньшим из двух параметров с сохранением исходного соотношения сторон. В качестве максимальной высоты и ширины можно указать целое число от 1 до 4800. Необходимо указать максимальную высоту, максимальную ширину или оба значения.
- Чтобы задать параметр максимальной высоты, вызовите метод
setMaxHeight()при создании объектаFetchResolvedPhotoUriRequest. - Чтобы задать параметр максимальной ширины, вызовите метод
setMaxWidth()при создании объектаFetchResolvedPhotoUriRequest.
- Чтобы задать параметр максимальной высоты, вызовите метод
Примеры использования Place Photos
В примере ниже показано, как получить URI фотографии места.
// Define a Place ID. final String placeId = "INSERT_PLACE_ID_HERE"; // Specify fields. Requests for photos must always have the PHOTO_METADATAS field. final List<Place.Field> fields = Collections.singletonList(Place.Field.PHOTO_METADATAS); // Get a Place object final FetchPlaceRequest placeRequest = FetchPlaceRequest.newInstance(placeId, fields); placesClient.fetchPlace(placeRequest).addOnSuccessListener((response) -> { final Place place = response.getPlace(); // Get the photo metadata. final List<PhotoMetadata> metadata = place.getPhotoMetadatas(); if (metadata == null || metadata.isEmpty()) { Log.w(TAG, "No photo metadata."); return; } final PhotoMetadata photoMetadata = metadata.get(0); // Get the attribution text and author attributions. final String attributions = photoMetadata.getAttributions(); final AuthorAttributions authorAttributions = photoMetadata.getAuthorAttributions(); // Create a FetchResolvedPhotoUriRequest. final FetchResolvedPhotoUriRequest photoRequest = FetchResolvedPhotoUriRequest.builder(photoMetadata) .setMaxWidth(500) .setMaxHeight(300) .build(); // Request the photo URI placesClient.fetchResolvedPhotoUri(photoRequest).addOnSuccessListener((fetchResolvedPhotoUriResponse) -> { Uri uri = fetchResolvedPhotoUriResponse.getUri(); RequestOptions requestOptions = new RequestOptions().override(Target.SIZE_ORIGINAL); Glide.with(this).load(uri).apply(requestOptions).into(imageView); }).addOnFailureListener((exception) -> { if (exception instanceof ApiException) { final ApiException apiException = (ApiException) exception; Log.e(TAG, "Place not found: " + exception.getMessage()); final int statusCode = apiException.getStatusCode(); // TODO: Handle error with given status code. } }); });
Атрибуции
Как правило, такие фотографии можно использовать без упоминания авторства, или оно будет указано непосредственно на снимке. Однако объект метаданных фотографии типа PhotoMetadata может содержать один из двух типов дополнительных атрибуций:
- Attributions – строка атрибуции, доступ к которой можно получить с помощью
PhotoMetadata.getAttributions(). - AuthorAttributions – объект
AuthorAttributions, доступ к которому осуществляется с помощьюPhotoMetadata.getAuthorAttributions().
Если возвращенный объект PhotoMetadata содержит любой из типов атрибуции, вы должны указать авторство в приложении везде, где показываете изображение. Подробнее об атрибуции…