Foto del luogo

Seleziona la piattaforma: Android iOS JavaScript Servizio web

Puoi utilizzare l'SDK Places per Android per richiedere la visualizzazione di una foto di un luogo nella tua applicazione. Le foto restituite dal servizio di foto provengono da svariate fonti, tra cui i proprietari di attività e le foto fornite dagli utenti. Per recuperare un'immagine di un luogo, devi seguire questi passaggi:

  1. Utilizza Place Details (Dettagli posizione) per recuperare un oggetto Place (utilizza fetchPlace() o findCurrentPlace()). Assicurati di includere il campo Place.Field PHOTO_METADATAS nell'elenco dei campi da includere nell'oggetto Place di risposta.
  2. Nella OnSuccessListener per FetchPlaceResponse o FindCurrentPlaceResponse:
    1. Utilizza Place.getPhotoMetadas() per ottenere l'oggetto metadati foto, di tipo PhotoMetadata, dall'oggetto Place risposta.
    2. Crea un oggetto FetchPhotoRequest, specificando facoltativamente l'altezza e la larghezza massime (in pixel). Le foto possono avere una larghezza o un'altezza massima di 1600 px.
    3. Utilizza PlacesClient.fetchPhoto() per richiedere la foto.
    4. Aggiungi un OnSuccessListener e ottieni la foto da FetchPhotoResponse.

Accedere ai dati PhotoMetadata aggiunti nella versione 3.3.0

L'SDK Places per Android (nuovo) aggiunge il campo AuthorAttributions alla classe PhotoMetadata. Se la tua app attiva il nuovo SDK, l'oggetto PhotoMetadata restituito da Place.getPhotoMetadas() può contenere una o più attribuzioni dell'autore.

Quando l'oggetto PhotoMetadata contiene attribuzioni, sia le nuove attribuzioni dell'autore aggiunte nella versione 3.3.0 o le attribuzioni esistenti disponibili nella versione 3.2.0 e precedenti, è necessario mostrarle con la foto. Per ulteriori informazioni sulla gestione di tutti i tipi di attribuzioni, consulta la sezione Attribuzioni.

Per completare l'oggetto PhotoMetadata con le attribuzioni dell'autore, devi:

  1. Abilita il nuovo SDK quando configuri il tuo progetto Google Cloud.
  2. Inizializza il nuovo SDK all'interno di un'attività o di un frammento.
  3. Includi Place.Field.PHOTO_METADATAS nell'elenco dei campi della richiesta relativa ai dettagli del luogo.
  4. Richiama PlacesClient.fetchPlace() per ottenere l'oggetto Place e Place.getPhotoMetadas() per ottenere l'oggetto PhotoMetadata. Il campo attribuzioni degli autori non è supportato da PlacesClient.findCurrentPlace().
  5. Utilizza PhotoMetadata.getAuthorAttributions() per ottenere le attribuzioni degli autori.

Ottieni una foto di un luogo

Il seguente esempio mostra come ottenere una foto di un luogo.

Kotlin



// Define a Place ID.
val placeId = "INSERT_PLACE_ID_HERE"

// 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 metada = place.photoMetadatas
        if (metada == null || metada.isEmpty()) {
            Log.w(TAG, "No photo metadata.")
            return@addOnSuccessListener
        }
        val photoMetadata = metada.first()

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

        // Create a FetchPhotoRequest.
        val photoRequest = FetchPhotoRequest.builder(photoMetadata)
            .setMaxWidth(500) // Optional.
            .setMaxHeight(300) // Optional.
            .build()
        placesClient.fetchPhoto(photoRequest)
            .addOnSuccessListener { fetchPhotoResponse: FetchPhotoResponse ->
                val bitmap = fetchPhotoResponse.bitmap
                imageView.setImageBitmap(bitmap)
            }.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 = "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.
    final String attributions = photoMetadata.getAttributions();

    // Create a FetchPhotoRequest.
    final FetchPhotoRequest photoRequest = FetchPhotoRequest.builder(photoMetadata)
        .setMaxWidth(500) // Optional.
        .setMaxHeight(300) // Optional.
        .build();
    placesClient.fetchPhoto(photoRequest).addOnSuccessListener((fetchPhotoResponse) -> {
        Bitmap bitmap = fetchPhotoResponse.getBitmap();
        imageView.setImageBitmap(bitmap);
    }).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.
        }
    });
});

      

Attribuzioni

Nella maggior parte dei casi, le foto dei luoghi possono essere utilizzate senza attribuzione o avranno l'attribuzione richiesta inclusa nell'immagine. Tuttavia, l'oggetto dei metadati delle foto, di tipo PhotoMetadata, può contenere uno dei due tipi di attribuzioni aggiuntive:

Se l'oggetto PhotoMetadata restituito include uno dei due tipi di attribuzione, devi includere l'attribuzione nell'applicazione ovunque venga visualizzata l'immagine. Per ulteriori informazioni, consulta la sezione Visualizzazione delle attribuzioni.

Utilizzo e fatturazione

Per le chiamate verso fetchPhoto() viene addebitato uno SKU di Foto di Places. Per informazioni dettagliate, consulta la pagina Utilizzo e fatturazione.