Вы можете использовать Places SDK для iOS (новый) для запроса фотографий мест для отображения в вашем приложении. Фотографии, возвращаемые сервисом, поступают из различных источников, включая фотографии владельцев компаний и фотографии пользователей.
Фотографии — это растровые изображения, представленные объектом UIImage . Максимальный размер растрового изображения — 4800 на 4800 пикселей.
Запросить изображение
Вы можете запросить до 10 фотографий места:
Вызовите
[GMSPlacesClient lookUpPhotosForPlaceID], передав идентификатор места и функцию обратного вызоваGMSPlacePhotoMetadataResultCallback. Этот запрос вызывает функцию обратного вызоваGMSPlacePhotoMetadataResultCallbackс объектомGMSPlacePhotoMetadataList.Из объекта
GMSPlacePhotoMetadataListв обратном вызове свойство массиваresultsсодержит фотографии, где каждая фотография представлена объектомGMSPlacePhotoMetadata.Используйте объект
GMSPlacePhotoMetadataдля созданияGMSFetchPhotoRequest, включая максимальный размер запрашиваемого изображения.Для каждого объекта
GMSPlacePhotoMetadataв массиве вызовите метод[GMSPlacesClient fetchPhotoWithRequest:callback:]передав объектGMSFetchPhotoRequest. Этот метод вызывает функцию обратного вызоваGMSFetchPhotoResultCallbackс готовым к использованию растровым изображением в качестве UIImage.
Другой способ запросить фотографии места — сделать запрос Place Details (New) , включив GMSPlacePropertyPhotos в список полей. Преимущество запроса Place Details заключается в том, что объект GMSPlace отвечающий за запрос, может содержать фотографии и любые другие поля данных, которые вам нужны для этого места.
Пример кода
В следующем примере метод принимает идентификатор места и получает первую фотографию из возвращаемого списка. Вы можете использовать этот метод в качестве шаблона для метода, который вы создадите в своём приложении.
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 }
Быстрый
// 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 } }]; }];
Кэширование
Фотографии, загруженные с помощью [GMSPlacesClient loadPlacePhoto:callback:] или [GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:] кэшируются как на диске, так и в памяти системой загрузки URL-адресов Foundation в общем NSURLCache .
Чтобы настроить поведение кэширования, вы можете изменить общий кэш URL, используя [NSURLCache setSharedURLCache:] в методе application application:didFinishLaunchingWithOptions: вашего делегата приложения.
Если вы не хотите, чтобы ваше приложение использовало общий кэш NSURLCache с Places SDK для iOS, вы можете создать новый NSURLCache и использовать его исключительно в своем приложении, не настраивая его как общий кэш.
Атрибуции
В большинстве случаев фотографии мест можно использовать без указания авторства или они будут включены в изображение как его часть. Однако, если возвращаемый экземпляр GMSPlacePhotoMetadata содержит какие-либо attributions или атрибут authorAttribution , необходимо включить эти указания в приложение при каждом отображении изображения. См. документацию по указанию авторства .