Ortsfotos (neu)

Plattform auswählen:Android iOS Webdienst

Entwickler im Europäischen Wirtschaftsraum (EWR)

Mit dem Places SDK for iOS (New) können Sie Ortsfotos anfordern, die in Ihrer Anwendung angezeigt werden sollen. Die vom Fotodienst bereitgestellten Fotos stammen aus unterschiedlichen Quellen, z. B. von Geschäftsinhabern oder Nutzern.

Fotos sind Bitmap-Bilder, die durch ein UIImage-Objekt dargestellt werden. Ein Bitmap-Bild kann maximal 4.800 × 4.800 Pixel groß sein.

Bild anfordern

Sie können bis zu 10 Fotos für einen Ort anfordern:

  1. Rufen Sie [GMSPlacesClient lookUpPhotosForPlaceID] auf und übergeben Sie eine Orts-ID und einen GMSPlacePhotoMetadataResultCallback-Callback. Bei dieser Anfrage wird der GMSPlacePhotoMetadataResultCallback-Callback mit einem GMSPlacePhotoMetadataList-Objekt aufgerufen.

  2. Im GMSPlacePhotoMetadataList-Objekt im Callback enthält das Array-Attribut results die Fotos, wobei jedes Foto durch ein GMSPlacePhotoMetadata-Objekt dargestellt wird.

  3. Verwenden Sie das GMSPlacePhotoMetadata-Objekt, um ein GMSFetchPhotoRequest zu erstellen, einschließlich der maximalen Größe des angeforderten Bildes.

  4. Rufen Sie für jedes GMSPlacePhotoMetadata-Objekt im Array [GMSPlacesClient fetchPhotoWithRequest:callback:] auf und übergeben Sie das GMSFetchPhotoRequest-Objekt. Diese Methode ruft den GMSFetchPhotoResultCallback-Callback mit einem nutzbaren Bitmap-Bild als UIImage auf.

Eine weitere Möglichkeit, Fotos für einen Ort anzufordern, besteht darin, eine Place Details (New)-Anfrage zu stellen und GMSPlacePropertyPhotos in die Feldliste aufzunehmen. Der Vorteil eines „Place Details“-Aufrufs besteht darin, dass das Antwortobjekt GMSPlace die Fotos und alle anderen Datenfelder enthalten kann, die Sie für den Ort benötigen.

Beispielcode

Die folgende Beispielmethode verwendet eine Orts-ID und ruft das erste Foto in der zurückgegebenen Liste ab. Sie können diese Methode als Vorlage für die Methode verwenden, die Sie in Ihrer eigenen App erstellen.

Places Swift SDK

// First fetch place details
// A hotel in Saigon with an attribution.
let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs"
let fetchPlaceRequest = FetchPlaceRequest(
  placeID: placeID,
  placeProperties: [ . name, .website ]
)
var fetchedPlace: Place
switch await placesClient.fetchPlace(with: fetchPlaceRequest) {
case .success(let place):
  fetchedPlace = place
case .failure(let placesError):
  // Handle error
}

// Use the place details to fetch a photo's image.
guard let photo = fetchedPlace.photos?.first else {
  // Handle place without photos.
}
let fetchPhotoRequest =
  FetchPhotoRequest(photo: photo, maxSize: CGSizeMake(4800, 4800))
switch await placesClient.fetchPhoto(with: fetchPhotoRequest) {
case .success(let uiImage):
  // Handle image.
case .failure(let placesError):
  // Handle error
}

Swift

// A hotel in Saigon with an attribution.
let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs"

// Request list of photos for a place
placesClient.lookUpPhotos(forPlaceID: placeID) { (photos, error) in

  guard let photoMetadata: GMSPlacePhotoMetadata = photos?.results[0] else {
    return }

  // Request individual photos in the response list
  let fetchPhotoRequest = GMSFetchPhotoRequest(photoMetadata: photoMetadata, maxSize: CGSizeMake(4800, 4800))
  self.client.fetchPhoto(with: fetchPhotoRequest, callback: {
    (photoImage: UIImage?, error: Error?) in
      guard let photoImage, error == nil else {
        print("Handle photo error: ")
        return }
      print("Display photo Image: ")
    }
  )
}

Objective-C

// A hotel in Saigon with an attribution.
NSString *placeID = @"ChIJV4k8_9UodTERU5KXbkYpSYs";

[placesClient lookUpPhotosForPlaceID:placeID callback: ^(GMSPlacePhotoMetadataList *list, NSError *error) {
  GMSPlacePhotoMetadata *photoMetadata = [list results][0];

  // Request individual photos in the response list
  GMSFetchPhotoRequest *fetchPhotoRequest = [[GMSFetchPhotoRequest alloc] initWithPhotoMetadata:photoMetadata maxSize:CGSizeMake(4800, 4800)];
  [placesClient fetchPhotoWithRequest:fetchPhotoRequest callback: ^(UIImage *_Nullable photoImage, NSError *_Nullable error) {
    if (error == nil) {
      // Display photo
    }
  }];
}];

Caching

Fotos, die mit [GMSPlacesClient loadPlacePhoto:callback:] oder [GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:] geladen werden, werden sowohl auf der Festplatte als auch im Arbeitsspeicher vom Foundation URL-Ladesystem im freigegebenen NSURLCache zwischengespeichert.

Wenn Sie das Caching-Verhalten konfigurieren möchten, können Sie den freigegebenen URL-Cache mit [NSURLCache setSharedURLCache:] in der Methode application:didFinishLaunchingWithOptions: des Anwendungsdelegaten ändern.

Wenn Sie nicht möchten, dass Ihre Anwendung einen NSURLCache mit dem Places SDK for iOS teilt, können Sie einen neuen NSURLCache erstellen und ihn ausschließlich in Ihrer App verwenden, ohne ihn als freigegebenen Cache festzulegen.

Attribution

In den meisten Fällen dürfen diese Fotos ohne Quellenangabe verwendet werden bzw. sind die erforderlichen Zuordnungen bereits im Bild eingebunden. Wenn die zurückgegebene GMSPlacePhotoMetadata-Instanz jedoch attributions- oder authorAttribution-Elemente enthält, müssen Sie diese Quellenangaben immer dann in Ihre Anwendung einbinden, wenn das Bild zu sehen ist. Weitere Informationen finden Sie in der Dokumentation zu Attributionen.