Ảnh địa điểm (Mới)

Bạn có thể sử dụng Places SDK dành cho iOS (Mới) để yêu cầu ảnh địa điểm hiển thị trong ứng dụng của mình. Ảnh mà dịch vụ ảnh trả về đến từ nhiều nguồn, bao gồm cả ảnh do người dùng đóng góp và chủ doanh nghiệp.

Ảnh là hình ảnh bitmap được biểu thị bằng đối tượng UIImage. Hình ảnh bitmap có kích thước tối đa là 4800 x 4800 pixel.

Yêu cầu hình ảnh

Bạn có thể yêu cầu tối đa 10 ảnh cho một địa điểm:

  1. Gọi [GMSPlacesClient lookUpPhotosForPlaceID], truyền mã địa điểm và lệnh gọi lại GMSPlacePhotoMetadataResultCallback. Yêu cầu này gọi lệnh gọi lại GMSPlacePhotoMetadataResultCallback với đối tượng GMSPlacePhotoMetadataList.

  2. Từ đối tượng GMSPlacePhotoMetadataList trong lệnh gọi lại, thuộc tính mảng results chứa các ảnh, trong đó mỗi ảnh được biểu thị bằng một đối tượng GMSPlacePhotoMetadata.

  3. Đối với mỗi đối tượng GMSPlacePhotoMetadata trong mảng, hãy gọi [GMSPlacesClient loadPlacePhoto:callback:] hoặc [GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:]. Các phương thức này gọi lệnh gọi lại với hình ảnh bitmap có thể sử dụng dưới dạng UIImage.

Một cách khác để yêu cầu cung cấp ảnh cho một địa điểm là yêu cầu Thông tin chi tiết về địa điểm (Mới), bao gồm GMSPlacePropertyPhotos trong danh sách trường. Ưu điểm của việc thực hiện lệnh gọi Thông tin chi tiết về địa điểm là đối tượng phản hồi GMSPlace có thể chứa ảnh và bất kỳ trường dữ liệu nào khác mà bạn muốn cho địa điểm.

Mã mẫu

Phương thức ví dụ sau đây sẽ lấy một mã địa điểm và tải ảnh đầu tiên trong danh sách trả về. Bạn có thể sử dụng phương thức này làm mẫu cho phương thức mà bạn sẽ tạo trong ứng dụng của riêng mình.

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 = photos.first else { return }

  // Request individual photos in the response list
  let fetchPhotoRequest = GMSFetchPhotoRequest(metadata: photoMetadata, maxSize: CGSizeMake(4800, 4800)
  placesClient.fetchPhoto(fetchPhotoRequest: fetchPhotoRequest, callback: {
    (photoURL: URL?, error: Error?) in
      guard let photoURL, error == nil else { return }
      print("Photo URL: \(photoURL)")
  })
};

Objective-C

// A hotel in Saigon with an attribution.
NSString *placeID = @"ChIJV4k8_9UodTERU5KXbkYpSYs";

[placesClient lookUpPhotosForPlaceID:placeID callback: (GMSPlacePhotoMetadataList *list, NSError *error) {
  GMSPlacePhotoMetadata *photoMetadata = [list firstObject];

  if (photoMetadata == nil) { return }

  // Request individual photos in the response list
  GMSFetchPhotoRequest *fetchPhotoRequest = [[GMSFetchPhotoRequest alloc] initWithPhotoMetadata:photoMetadata maxSize:CGSizeMake(4800, 4800)];
  [placesClient fetchPhoto:fetchPhotoRequest, callback: ^(NSURL *_Nullable photoURL, NSError *_Nullable error) {
    if (error == null) {
      NSLog(@"Photo URL: %@", photoURL)
    }
  }];
}];

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
}

Chức năng lưu vào bộ nhớ đệm

Ảnh được tải bằng [GMSPlacesClient loadPlacePhoto:callback:] hoặc [GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:] sẽ được lưu vào bộ nhớ đệm cả trên đĩa và trong bộ nhớ bằng Hệ thống tải URL nền tảng trong NSURLCache dùng chung.

Để định cấu hình hành vi lưu vào bộ nhớ đệm, bạn có thể thay đổi bộ nhớ đệm của URL dùng chung bằng cách sử dụng [NSURLCache setSharedURLCache:] trong phương thức application:didFinishLaunchingWithOptions: của bên uỷ quyền ứng dụng.

Nếu không muốn ứng dụng của mình chia sẻ NSURLCache với SDK Địa điểm dành cho iOS, bạn có thể tạo một NSURLCache mới và sử dụng độc quyền này trong ứng dụng của mình mà không cần đặt nó làm bộ nhớ đệm dùng chung.

Phân bổ

Trong hầu hết các trường hợp, bạn có thể sử dụng ảnh địa điểm mà không cần ghi nguồn, hoặc sẽ có thuộc tính bắt buộc trong hình ảnh. Tuy nhiên, nếu thực thể GMSPlacePhotoMetadata được trả về bao gồm bất kỳ attributions hoặc authorAttribution nào, bạn phải đưa các thuộc tính này vào ứng dụng của mình ở bất cứ nơi nào hiển thị hình ảnh. Vui lòng xem tài liệu về mô hình phân bổ.