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

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

Bạn có thể sử dụng SDK địa điểm 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 được dịch vụ ảnh trả về đến từ từ nhiều nguồn khác nhau, bao gồm cả chủ doanh nghiệp và ảnh do người dùng đóng góp.

Ảnh là hình ảnh bitmap được biểu thị bằ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 điện [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 GMSPlacePhotoMetadataList .

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

  3. Sử dụng đối tượng GMSPlacePhotoMetadata để tạo một GMSFetchPhotoRequest thân mến! bao gồm 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:] truyền đối tượng GMSFetchPhotoRequest. Phương thức này gọi phương thức GMSFetchPhotoResultCallback 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 hình ảnh cho một địa điểm là tạo Yêu cầu Chi tiết địa điểm (mới), bao gồm GMSPlacePropertyPhotos trong danh sách trường. Lợi thế của việc tạo Cuộc gọi Thông tin chi tiết về địa điểm là 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 địa điểm đó.

Mã mẫu

Phương thức ví dụ sau đây lấy một mã địa điểm và lấy ả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 pháp mà bạn sẽ tạo trong ứng dụng của riêng bạ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
}

Lưu vào bộ nhớ đệm

Ảnh được tải bằng [GMSPlacesClient loadPlacePhoto:callback:] hoặc [GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:] đượ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 được chia sẻ.

Để đị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 được chia sẻ bằng cách sử dụng [NSURLCache setSharedURLCache:] trong application:didFinishLaunchingWithOptions: của ứng dụng uỷ quyền .

Nếu bạn 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 NSURLCache mới và sử dụng điều này chỉ trong ứng dụng của bạn mà không đặ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 được thêm vào dưới dạng một phần của hình ảnh. Tuy nhiên, nếu giá trị trả về GMSPlacePhotoMetadata thực thể bao gồm bất kỳ attributions hoặc authorAttribution! bạn phải bao gồm các thông tin ghi nhận này trong ứng dụng của mình ở bất kỳ nơi nào bạn hiển thị hình ảnh. Xem tài liệu về phân bổ.