Foto del luogo

Seleziona la piattaforma: Android iOS JavaScript Servizio web

Puoi utilizzare Places SDK per Android per richiedere una foto del luogo da visualizzato nella tua applicazione. Le foto restituite dal servizio fotografico provengono da un diverse fonti, tra cui proprietari di attività e foto fornite dagli utenti.

L'SDK Places per Android restituisce un'immagine bitmap con un valore massimo di 1600 x 1600 pixel.

Procedura di recupero delle foto

Per recuperare un'immagine di un luogo:

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

Ottieni una foto

L'esempio seguente mostra come ottenere la 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 obbligatoria inclusa nell'immagine. Tuttavia, l'oggetto 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 includi l'attribuzione nell'applicazione ovunque mostri l'immagine. Per ulteriori informazioni, consulta la sezione Visualizzazione delle attribuzioni.

Utilizzo e fatturazione

Per le chiamate a fetchPhoto() viene addebitato uno SKU di Foto di Places. Consulta la pagina Utilizzo e fatturazione per maggiori dettagli.