Foto del luogo (novità)

Seleziona la piattaforma: Android iOS Web Service

La funzionalità Foto dei luoghi (nuova) ti consente di aggiungere contenuti fotografici di alta qualità alla tua applicazione. Place Photos ti consente di accedere ai milioni di foto archiviate nel database di Places. Place Photos restituisce un URI a un'immagine bitmap. L'immagine bitmap ha una dimensione massima di 4800 x 4800 pixel.

Richieste di Place Photo

Per recuperare un'immagine di un luogo:

  1. Utilizza Dettagli dei luoghi (nuova funzionalità) per recuperare un oggetto Place utilizzando fetchPlace(). Assicurati di includere il campo Place.Field PHOTO_METADATAS nell'elenco dei campi da includere nell'oggetto Place della risposta.
  2. In OnSuccessListener per FetchPlaceResponse, chiama Place.getPhotoMetadas() per ottenere l'oggetto dei metadati della foto di tipo PhotoMetadata dall'oggetto di risposta Place.
  3. Crea un oggetto FetchResolvedPhotoUriRequest per effettuare la richiesta e passare l'oggetto dei metadati della foto, nonché i valori per l'altezza massima, la larghezza massima o entrambi.
  4. Utilizza PlacesClient.fetchResolvedPhotoUri() per richiedere l'URI della foto.
  5. Aggiungi un OnSuccessListener e recupera l'URI della foto dall'oggetto FetchResolvedPhotoUriResponse.

Parametri obbligatori

I parametri obbligatori per FetchResolvedPhotoUriRequest sono:

  • Metadati delle foto

    L'oggetto dei metadati della foto da restituire.

  • Altezza massima o larghezza massima

    Specifica l'altezza e la larghezza massime, in pixel, dell'immagine da restituire. Se l'immagine è più piccola dei valori specificati, verrà restituita l'immagine originale. Se l'immagine è più grande in una delle due dimensioni, verrà ridimensionata in base alla dimensione più piccola, rispettando le proporzioni originali. Sia l'altezza massima che la larghezza massima accettano un numero intero compreso tra 1 e 4800. Devi specificare l'altezza massima, la larghezza massima o entrambe.

    • Per impostare il parametro di altezza massima, chiama il metodo setMaxHeight() durante la creazione dell'oggetto FetchResolvedPhotoUriRequest.
    • Per impostare il parametro di larghezza massima, chiama il metodo setMaxWidth() durante la creazione dell'oggetto FetchResolvedPhotoUriRequest.

Esempi di foto dei luoghi

L'esempio seguente mostra come ottenere l'URI di una foto di un luogo.

// 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.
        }
    });
});

Attribuzioni

Nella maggior parte dei casi, le foto dei luoghi possono essere utilizzate senza attribuzione o l'attribuzione richiesta sarà inclusa nell'immagine. Tuttavia, l'oggetto dei metadati della 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 nella tua applicazione ovunque venga visualizzata l'immagine. Per ulteriori informazioni, consulta Visualizzazione delle attribuzioni.