Place Photos

Plattform auswählen: Android iOS JavaScript Webdienst

Mit dem Places SDK for Android können Sie ein Ortsfoto anfordern, das in Ihrer App angezeigt wird. Vom Fotodienst zurückgegebene Fotos stammen aus verschiedenen Quellen, z. B. von Geschäftsinhabern und von Nutzern beigesteuerten Fotos. So rufen Sie ein Bild für einen Ort ab:

  1. Verwende Place Details, um ein Place-Objekt abzurufen (verwenden Sie entweder fetchPlace() oder findCurrentPlace()). Nehmen Sie das Feld Place.Field PHOTO_METADATAS in die Liste der Felder auf, die in das Place-Antwortobjekt aufgenommen werden sollen.
  2. In der OnSuccessListener für FetchPlaceResponse oder FindCurrentPlaceResponse:
    1. Verwende Place.getPhotoMetadas(), um das Fotometadatenobjekt vom Typ PhotoMetadata aus dem Antwortobjekt Place abzurufen.
    2. Erstellen Sie ein FetchPhotoRequest-Objekt und geben Sie optional die maximale Höhe und Breite (in Pixeln) an. Fotos dürfen eine maximale Breite oder Höhe von 1.600 Pixeln haben.
    3. Verwenden Sie PlacesClient.fetchPhoto(), um das Foto anzufordern.
    4. Füge einen OnSuccessListener hinzu und rufe das Foto aus der FetchPhotoResponse ab.

Auf PhotoMetadata-Daten zugreifen, die in Version 3.3.0 hinzugefügt wurden

Im Places SDK for Android (New) wird der Klasse PhotoMetadata das Feld AuthorAttributions hinzugefügt. Wenn deine App das neue SDK aktiviert, kann das von Place.getPhotoMetadas() zurückgegebene PhotoMetadata-Objekt eine oder mehrere Autorenzuordnungen enthalten.

Wenn das PhotoMetadata-Objekt Quellenangaben enthält, also entweder die neuen Quellenangaben, die in Version 3.3.0 hinzugefügt wurden, oder die in Version 3.2.0 und früheren Versionen verfügbaren Quellenangaben, müssen diese zusammen mit dem Foto angezeigt werden. Weitere Informationen zur Handhabung aller Arten von Zuordnungen finden Sie unter Quellenangaben.

Wenn Sie Quellenangaben für den Autor in das PhotoMetadata-Objekt einfügen möchten, müssen Sie Folgendes tun:

  1. Aktivieren Sie das neue SDK, wenn Sie Ihr Google Cloud-Projekt einrichten.
  2. Initialisieren Sie das neue SDK innerhalb einer Aktivität oder eines Fragments.
  3. Fügen Sie Place.Field.PHOTO_METADATAS in die Feldliste der „Place Details“-Anfrage ein.
  4. Rufen Sie PlacesClient.fetchPlace() auf, um das Place-Objekt abzurufen, und Place.getPhotoMetadas(), um das PhotoMetadata-Objekt abzurufen. Das Feld für Quellenangaben des Autors wird von PlacesClient.findCurrentPlace() nicht unterstützt.
  5. Verwenden Sie PhotoMetadata.getAuthorAttributions(), um Quellenangaben für Autoren abzurufen.

Foto von Ort aufnehmen

Das folgende Beispiel zeigt, wie ein Ortsfoto abgerufen wird.

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

      

Attribution

In den meisten Fällen dürfen Ortsfotos ohne Quellenangabe verwendet werden oder die erforderlichen Quellenangaben sind im Bild enthalten. Das Fotometadatenobjekt vom Typ PhotoMetadata kann jedoch zwei Arten von zusätzlichen Quellenangaben enthalten:

Wenn das zurückgegebene PhotoMetadata-Objekt einen der beiden Attributionstypen enthält, müssen Sie die Quellenangabe überall dort einfügen, wo das Bild angezeigt wird. Weitere Informationen finden Sie unter Zuordnungen anzeigen.

Nutzung und Abrechnung

Für Aufrufe an fetchPhoto() wird die SKU Places Photo berechnet. Weitere Informationen finden Sie auf der Seite Nutzung und Abrechnung.