Place Photos (nuevo) te permite agregar contenido fotográfico de alta calidad a tu aplicación. Place Photos te brinda acceso a los millones de fotos almacenadas en la base de datos de Places. Place Photos devuelve un URI a una imagen de mapa de bits. La imagen de mapa de bits tiene un tamaño máximo de 4,800 por 4,800 píxeles.
Solicitudes de Place Photos
Para recuperar una imagen de un lugar, haz lo siguiente:
- Usa Place Details (nuevo) para recuperar un objeto
Place
confetchPlace()
. Asegúrate de incluir el campoPlace.Field PHOTO_METADATAS
en la lista de campos que se incluirán en el objeto de respuestaPlace
. - En el objeto
OnSuccessListener
de tu objetoFetchPlaceResponse
, llama aPlace.getPhotoMetadas()
para obtener el objeto de metadatos de la foto de tipoPhotoMetadata
del objeto de respuestaPlace
. - Crea un objeto
FetchResolvedPhotoUriRequest
para realizar la solicitud y pasar el objeto de metadatos de la foto, así como los valores de altura máxima, ancho máximo o ambos. - Usa
PlacesClient.fetchResolvedPhotoUri()
para solicitar el URI de la foto. - Agrega un
OnSuccessListener
y obtén el URI de la foto del objetoFetchResolvedPhotoUriResponse
.
Parámetros obligatorios
Los parámetros obligatorios para FetchResolvedPhotoUriRequest
son los siguientes:
-
Metadatos de las fotos
Es el objeto de metadatos de la foto que se devolverá.
-
Altura máxima o ancho máximo
Especifica la altura y el ancho máximos, en píxeles, de la imagen que se devolverá. Si la imagen es más pequeña que los valores especificados, se devolverá la imagen original. Si la imagen es más grande en cualquiera de las dimensiones, se ajustará su escala para que coincida con la más pequeña de las dos dimensiones, restringida a su relación de aspecto original. Las propiedades de altura máxima y ancho máximo aceptan un número entero entre 1 y 4,800. Debes especificar la altura máxima, el ancho máximo o ambos.
- Para establecer el parámetro de altura máxima, llama al método
setMaxHeight()
cuando compiles el objetoFetchResolvedPhotoUriRequest
. - Para establecer el parámetro de ancho máximo, llama al método
setMaxWidth()
cuando compiles el objetoFetchResolvedPhotoUriRequest
.
- Para establecer el parámetro de altura máxima, llama al método
Ejemplos de Place Photos
En el siguiente ejemplo, se muestra cómo obtener el URI de una foto de lugar.
// 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 (this example uses fetchPlace(), but you can also use findCurrentPlace()) 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. } }); });
Atribuciones
En la mayoría de los casos, las fotos de lugares se pueden usar sin atribución o incluirán la atribución requerida como parte de la imagen. Sin embargo, el objeto de metadatos de la foto, del tipo PhotoMetadata
, puede contener cualquiera de los dos tipos de atribuciones adicionales:
- Attributions, una cadena de atribución a la que se accede con
PhotoMetadata.getAttributions()
. - AuthorAttributions, un objeto
AuthorAttributions
al que se accede conPhotoMetadata.getAuthorAttributions()
.
Si el objeto PhotoMetadata
que se muestra incluye cualquiera de los tipos de atribución, debes incluir la atribución en tu aplicación en cualquier lugar donde muestres la imagen. Para obtener más información, consulta Cómo mostrar atribuciones.