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 Objekt GMSPlacePhotoMetadata, um ein GMSFetchPhotoRequest einschließlich der maximalen Größe des angeforderten Bildes.

  4. Rufen Sie für jedes GMSPlacePhotoMetadata-Objekt im Array den folgenden Befehl auf: [GMSPlacesClient fetchPhotoWithRequest:callback:] und übergeben das GMSFetchPhotoRequest-Objekt. Diese Methode ruft die Methode GMSFetchPhotoResultCallback mit einem verwendbaren 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

Mit der folgenden Beispielmethode wird das erste Foto im Liste zurückgegeben. 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
    }
  }];
}];

GooglePlacesSwift

// 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 enthält beliebige attributions oder authorAttribution müssen Sie diese Quellenangaben überall dort in Ihre Anwendung aufnehmen, wo das Bild. Weitere Informationen finden Sie in der Dokumentation zu Quellenangaben.