Ortsfotos (neu)

Plattform auswählen: Android-Gerät iOS Webdienst

Sie können das Places SDK for iOS (New) verwenden, um Fotos von Orten anzufordern, in Ihrer Anwendung anzuzeigen. Vom Fotodienst zurückgegebene Fotos stammen aus einem aus verschiedenen Quellen, einschließlich Geschäftsinhabern und Fotos, die von Nutzern beigesteuert wurden.

Fotos sind Bitmapbilder, die durch eine UIImage-Objekts. Ein Bitmapbild darf maximal 4.800 x 4.800 Pixel groß sein.

Bild anfordern

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

  1. Anruf [GMSPlacesClient lookUpPhotosForPlaceID], übergeben eine Orts-ID und eine GMSPlacePhotoMetadataResultCallback-Rückruf. Diese Anfrage ruft den GMSPlacePhotoMetadataResultCallback-Callback mit einer GMSPlacePhotoMetadataList -Objekt enthält.

  2. Aus dem GMSPlacePhotoMetadataList-Objekt im Callback results Array-Eigenschaft enthält die Fotos, wobei jedes Foto durch ein GMSPlacePhotoMetadata -Objekt enthält.

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

  4. Rufe für jedes GMSPlacePhotoMetadata-Objekt im Array [GMSPlacesClient fetchPhotoWithRequest:callback:] mit dem GMSFetchPhotoRequest-Objekt auf. Diese Methode ruft die Methode GMSFetchPhotoResultCallback mit einem nutzbaren Bitmapbild als UIImage zurück.

Sie können auch Fotos für einen Ort anfordern, indem Sie Place Details (New)-Anfrage, einschließlich GMSPlacePropertyPhotos in der Feldliste. Der Vorteil einer „Place Details“-Aufruf ist, dass die Antwort GMSPlace kann die Fotos und andere Datenfelder enthalten, die Sie für auf den Ort.

Beispielcode

In der folgenden Beispielmethode wird eine Orts-ID übergeben, um das erste Foto in der zurückgegebenen Liste abzurufen. Sie können diese Methode als Vorlage für die Methode verwenden, in Ihrer eigenen App erstellen können.

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
    }
  }];
}];

Places Swift SDK for iOS (Vorabversion)

// 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
}

Caching

Fotos von [GMSPlacesClient loadPlacePhoto:callback:] geladen oder [GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:] werden vom Foundation URL-Ladesystem sowohl auf dem Laufwerk als auch im Arbeitsspeicher im Cache gespeichert. in der geteilten NSURLCache.

Um das Caching-Verhalten zu konfigurieren, können Sie den gemeinsamen URL-Cache mit folgendem Befehl ändern: [NSURLCache setSharedURLCache:] in der application:didFinishLaunchingWithOptions: des Anwendungsdelegierten .

Wenn Sie nicht möchten, dass Ihre Anwendung ein NSURLCache mit dem Places SDK for iOS können Sie ein neues NSURLCache erstellen und dieses ausschließlich in Ihrer App, ohne ihn als gemeinsamen Cache festzulegen.

Attribution

In den meisten Fällen können Ortsfotos ohne Namensnennung verwendet werden oder sind die erforderliche Quellenangabe im Bild enthalten. Wenn die zurückgegebene GMSPlacePhotoMetadata-Instanz jedoch attributions oder authorAttribution enthält, müssen Sie diese Quellenangaben in Ihre Anwendung einbinden, wo immer das Bild zu sehen ist. Weitere Informationen finden Sie in der Dokumentation zu Attributionen.