Place Photos (nuevo)

Selecciona la plataforma: En Android iOS Servicio web

Puedes usar el SDK de Places para iOS (nuevo) para solicitar fotos de lugares a mostrar en tu aplicación. Las fotos que devuelve el servicio de fotos provienen de un variedad de fuentes, como propietarios de empresas y fotos aportadas por los usuarios.

Las fotos son imágenes de mapas de bits representadas por un elemento UIImage. Una imagen de mapa de bits tiene un tamaño máximo de 4,800 por 4,800 píxeles.

Solicitar una imagen

Puedes solicitar hasta 10 fotos de un lugar:

  1. Llamada [GMSPlacesClient lookUpPhotosForPlaceID], pasar un ID de lugar y una GMSPlacePhotoMetadataResultCallback devolución de llamada. Esta solicitud llama a la devolución de llamada GMSPlacePhotoMetadataResultCallback con un GMSPlacePhotoMetadataList .

  2. Desde el objeto GMSPlacePhotoMetadataList de la devolución de llamada, el results array contiene las fotos, en las que cada foto está representada por un GMSPlacePhotoMetadata .

  3. Usa el objeto GMSPlacePhotoMetadata para crear un GMSFetchPhotoRequest: incluido el tamaño máximo de la imagen solicitada.

  4. Para cada objeto GMSPlacePhotoMetadata del array, llama a [GMSPlacesClient fetchPhotoWithRequest:callback:] pasando el objeto GMSFetchPhotoRequest. Este método llama a GMSFetchPhotoResultCallback con una imagen de mapa de bits utilizable como UIImage.

Otra forma de solicitar fotos de un lugar es crear una solicitud a Place Details (New), incluido GMSPlacePropertyPhotos en la lista de campos. La ventaja de hacer la llamada a Place Details es que la respuesta GMSPlace objeto puede contener las fotos y cualquier otro campo de datos que desees el lugar.

Código de muestra

En el siguiente método de ejemplo, se toma un ID de lugar y se obtiene la primera foto de la lista devuelta. Puedes usar este método como plantilla para el método que crear en tu propia aplicación.

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
}

Almacenamiento en caché

Las fotos se cargaron con [GMSPlacesClient loadPlacePhoto:callback:]. o [GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:] se almacenan en caché en el disco y en la memoria a través del sistema de carga de URLs de Foundation. en el NSURLCache compartido.

Para configurar el comportamiento de la caché, puedes cambiar la caché de la URL compartida con [NSURLCache setSharedURLCache:] en el application:didFinishLaunchingWithOptions: del delegado de la aplicación .

Si no quieres que tu aplicación comparta un NSURLCache con el Con el SDK de Places para iOS, puedes crear un NSURLCache nuevo y usarlo exclusivamente dentro de tu app sin configurarla como caché compartida.

Atribuciones

En la mayoría de los casos, las fotos de lugares se pueden utilizar sin atribución, o tendrán el elemento la atribución requerida incluida como parte de la imagen. Sin embargo, si los resultados GMSPlacePhotoMetadata incluye cualquier attributions o authorAttribution debes incluir estas atribuciones en tu aplicación siempre que muestres imagen. Consulta la documentación sobre atribuciones.