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

Chọn nền tảng: Android iOS Dịch vụ web

Nhà phát triển ở Khu vực kinh tế Châu Âu (EEA)

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

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

Yêu cầu tạo hình ảnh

Bạn có thể yêu cầu tối đa 10 bức ả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 bằng một đố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 bức ảnh, trong đó mỗi bức ảnh được biểu thị bằng một đối tượng GMSPlacePhotoMetadata.

  3. Sử dụng đối tượng GMSPlacePhotoMetadata để tạo GMSFetchPhotoRequest, bao gồm cả kích thước tối đa của hình ảnh được yêu cầu.

  4. Đối với mỗi đối tượng GMSPlacePhotoMetadata trong mảng, hãy gọi [GMSPlacesClient fetchPhotoWithRequest:callback:] bằng cách truyền đối tượng GMSFetchPhotoRequest. Phương thức này gọi lệnh gọi lại GMSFetchPhotoResultCallback bằng hình ảnh bitmap có thể dùng được dưới dạng UIImage.

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

Mã mẫu

Phương thức ví dụ sau đây lấy mã địa điểm và nhận ảnh đầu tiên trong danh sách được 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.

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
}

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
    }
  }];
}];

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 trên cả đĩa và trong bộ nhớ bằng hệ thống tải URL Foundation 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 URL dùng chung bằng cách sử dụng [NSURLCache setSharedURLCache:] trong phương thức application:didFinishLaunchingWithOptions: của uỷ quyền ứng dụng.

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

Phân bổ

Trong hầu hết trường hợp, bạn có thể sử dụng ảnh về địa điểm mà không cần ghi nhận quyền tác giả hoặc sẽ có thông tin ghi nhận quyền tác giả bắt buộc trong ảnh. Tuy nhiên, nếu phiên bản GMSPlacePhotoMetadata được trả về có chứa attributions hoặc authorAttribution, bạn phải thêm thông tin ghi nhận quyền tác giả này vào ứng dụng của mình bất cứ khi nào bạn hiển thị hình ảnh. Xem tài liệu về phân bổ.