Foto del luogo (novità)

Seleziona la piattaforma: Android iOS Servizio web

Puoi utilizzare Places SDK for iOS (novità) per richiedere foto dei luoghi a 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.

Le foto sono immagini bitmap rappresentate da un UIImage. Un'immagine bitmap ha una dimensione massima di 4800 x 4800 pixel.

Richiedi un'immagine

Puoi richiedere fino a 10 foto per un luogo:

  1. Chiama [GMSPlacesClient lookUpPhotosForPlaceID], passando un ID luogo e un GMSPlacePhotoMetadataResultCallback. Questa richiesta chiama il callback GMSPlacePhotoMetadataResultCallback con un GMSPlacePhotoMetadataList .

  2. Dall'oggetto GMSPlacePhotoMetadataList nel callback, il valore results contiene le foto, dove ognuna è rappresentata da un GMSPlacePhotoMetadata .

  3. Utilizza l'oggetto GMSPlacePhotoMetadata per creare un'istanza GMSFetchPhotoRequest incluse le dimensioni massime dell'immagine richiesta.

  4. Per ogni oggetto GMSPlacePhotoMetadata nell'array, richiama [GMSPlacesClient fetchPhotoWithRequest:callback:] passando l'oggetto GMSFetchPhotoRequest. Questo metodo chiama GMSFetchPhotoResultCallback con un'immagine bitmap utilizzabile come UIImage.

Un altro modo per richiedere le foto di un luogo è creare una richiesta Place Details (novità), incluso GMSPlacePropertyPhotos nell'elenco dei campi. Il vantaggio di realizzare La chiamata Dettagli luogo indica che la risposta GMSPlace può contenere le foto e tutti gli altri campi dati che desideri in quel luogo.

Codice di esempio

Il seguente metodo di esempio utilizza un ID luogo e ottiene la prima foto nel elenco restituito. Puoi usare questo metodo come modello per il metodo che utilizzerai che puoi creare nella tua app.

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
}

Memorizzazione nella cache

Foto caricate con [GMSPlacesClient loadPlacePhoto:callback:] oppure [GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:] vengono memorizzati nella cache sia su disco sia in memoria dal sistema di caricamento dell'URL di base nell'elemento NSURLCache condiviso.

Per configurare il comportamento di memorizzazione nella cache, puoi modificare la cache dell'URL condiviso utilizzando [NSURLCache setSharedURLCache:] nel application:didFinishLaunchingWithOptions: del delegato della tua applicazione .

Se non vuoi che la tua applicazione condivida un NSURLCache con SDK Places per iOS, puoi creare un nuovo NSURLCache e utilizzarlo esclusivamente all'interno dell'app senza impostarla come cache condivisa.

Attribuzioni

Nella maggior parte dei casi, le foto dei luoghi possono essere utilizzate senza attribuzione o avranno la attribuzione obbligatoria inclusa nell'immagine. Tuttavia, se l'oggetto restituito GMSPlacePhotoMetadata include qualsiasi istanza attributions o authorAttribution, devi includere queste attribuzioni nell'applicazione ovunque mostri dell'immagine. Consulta la documentazione su attribuzioni.