Place Photos (heredado)

Desarrolladores del Espacio Económico Europeo (EEE)

Puedes usar el SDK de Places para Android (heredado) para solicitar una foto de un lugar y mostrarla en tu aplicación. Las fotos que muestra el servicio Photos provienen de una variedad de fuentes, incluidas las fotos proporcionadas por los propietarios de las empresas y los aportes de los usuarios.

El SDK de Places para Android (heredado) devuelve una imagen de mapa de bits con un tamaño máximo de 1,600 x 1,600 píxeles.

Proceso de recuperación de fotos

Para recuperar una imagen de un lugar, sigue estos pasos:

  1. Usa Place Details (heredado) 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 para su FetchPlaceResponse, use Place.getPhotoMetadas() para obtener el objeto de metadatos de la foto, de tipo PhotoMetadata del objeto de respuesta Place.
  3. Crea un objeto FetchPhotoRequest y, de manera opcional, especifica la altura y el ancho máximos (en píxeles). Las fotos pueden tener un ancho o una altura máximos de 1,600 px.
  4. Usa PlacesClient.fetchPhoto() para solicitar el mapa de bits de la foto.
  5. Agrega un OnSuccessListener y obtén la foto de FetchPhotoResponse.

Cómo tomar una foto

En el siguiente ejemplo, se muestra cómo obtener una foto de un lugar:

Kotlin

// Define a Place ID.
val placeId = PlaceIdProvider.getRandomPlaceId()

// Specify fields. Requests for photos must always have the PHOTO_METADATAS field.
val fields = listOf(Place.Field.PHOTO_METADATAS)

// Get a Place object (this example uses fetchPlace(), but you can also use findCurrentPlace())
val placeRequest = FetchPlaceRequest.newInstance(placeId, fields)

placesClient.fetchPlace(placeRequest)
    .addOnSuccessListener { response: FetchPlaceResponse ->
        val place = response.place

        // Get the photo metadata.
        val metadata = place.photoMetadatas
        if (metadata == null || metadata.isEmpty()) {
            Log.w(TAG, "No photo metadata.")
            return@addOnSuccessListener
        }
        val photoMetadata = metadata.first()

        // Get the attribution text.
        val attributions = photoMetadata?.attributions

        binding.placePhotosAttributions.text = attributions

        // Create a FetchResolvedPhotoUriRequest.
        val photoRequest = FetchResolvedPhotoUriRequest.builder(photoMetadata)
            .setMaxWidth(500) // Optional.
            .setMaxHeight(300) // Optional.
            .build()
        placesClient.fetchResolvedPhotoUri(photoRequest)
            .addOnSuccessListener { fetchPhotoResponse ->
                val photoUri = fetchPhotoResponse.uri
                Glide.with(this)
                    .load(photoUri)
                    .into(binding.placePhotosResult)
            }.addOnFailureListener { exception: Exception ->
                if (exception is ApiException) {
                    Log.e(TAG, "Place not found: " + exception.message)
                    val statusCode = exception.statusCode
                    // TODO: Handle error with given status code.
                }
            }
    }

      

Java

// Define a Place ID.
final String placeId = PlaceIdProvider.getRandomPlaceId();

// 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.
                    final String attributions = photoMetadata.getAttributions();
                    binding.placePhotosAttributions.setText(attributions);

                    // Create a FetchResolvedPhotoUriRequest.
                    final FetchResolvedPhotoUriRequest photoRequest =
                            FetchResolvedPhotoUriRequest.builder(photoMetadata)
                                    .setMaxWidth(500) // Optional.
                                    .setMaxHeight(300) // Optional.
                                    .build();
                    placesClient
                            .fetchResolvedPhotoUri(photoRequest)
                            .addOnSuccessListener(
                                    (fetchPhotoResponse) -> {
                                        Glide.with(this)
                                                .load(fetchPhotoResponse.getUri())
                                                .into(binding.placePhotosResult);
                                    })
                            .addOnFailureListener(
                                    (exception) -> {
                                        if (exception instanceof ApiException) {
                                            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 utilizar sin atribución; de lo contrario, 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:

Si el objeto PhotoMetadata que se devuelve 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.

Uso y facturación

Se cobra un SKU Place Photos (heredado) por las llamadas a fetchPhoto(). Consulta la página Uso y facturación para obtener más detalles.