Place Photos (nuevo)

Place Photos (nuevo) te permite agregar contenido fotográfico de alta calidad a tu aplicación. Place Photos te brinda acceso a las millones de fotos almacenadas en la base de datos de Places. Place Photos devuelve un URI para 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, sigue estos pasos:

  1. Usa Place Details (nuevo) para recuperar un objeto Place con fetchPlace(). Asegúrate de incluir el campo Place.Field PHOTO_METADATAS en la lista de campos que se incluirán en el objeto Place de respuesta.
  2. En el OnSuccessListener de tu FetchPlaceResponse, llama a Place.getPhotoMetadas() para obtener el objeto de metadatos de fotos de tipo PhotoMetadata del objeto Place de respuesta.
  3. Crea un objeto FetchResolvedPhotoUriRequest para realizar la solicitud y pasa el objeto de metadatos de la foto, así como valores para la altura máxima, el ancho máximo o ambos.
  4. Usa PlacesClient.fetchResolvedPhotoUri() para solicitar el URI de la foto.
  5. Agrega un OnSuccessListener y obtén el URI de la foto del objeto FetchResolvedPhotoUriResponse.

Parámetros obligatorios

Los parámetros obligatorios para FetchResolvedPhotoUriRequest son los siguientes:

  • Metadatos de fotos

    El objeto de metadatos de la foto que se mostrará.

  • Altura o ancho máximos

    Especifica la altura y el ancho máximos, en píxeles, de la imagen que se mostrará. Si la imagen es más pequeña que los valores especificados, se mostrará la imagen original. Si la imagen es más grande en cualquiera de las dimensiones, se ajustará para coincidir con la más pequeña de las dos dimensiones, restringida a su relación de aspecto original. Las propiedades de altura 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 objeto FetchResolvedPhotoUriRequest.
    • Para establecer el parámetro de ancho máximo, llama al método setMaxWidth() cuando compiles el objeto FetchResolvedPhotoUriRequest.

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 tendrán la atribución requerida incluida 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:

Si el objeto PhotoMetadata que se muestra incluye cualquier tipo de atribución, debes incluirla en tu aplicación en cualquier lugar donde muestres la imagen. Para obtener más información, consulta Muestra las atribuciones.