รูปภาพสถานที่ (ใหม่)

คุณสามารถใช้ Places SDK สำหรับ iOS (ใหม่) เพื่อขอรูปภาพสถานที่ไปยัง แสดงในแอปพลิเคชัน รูปภาพที่บริการรูปภาพแสดงผลมาจากแหล่งที่มาที่หลากหลาย ซึ่งรวมถึงเจ้าของธุรกิจและรูปภาพที่ผู้ใช้ส่งเข้ามา

รูปภาพคือรูปภาพบิตแมปที่แสดงโดยออบเจ็กต์ UIImage รูปภาพบิตแมปมีขนาดสูงสุด 4,800 x 4800 พิกเซล

ขอรูปภาพ

คุณสามารถขอรูปภาพสถานที่ได้สูงสุด 10 ภาพ

  1. โทร [GMSPlacesClient lookUpPhotosForPlaceID] การส่งรหัสสถานที่และ การติดต่อกลับ GMSPlacePhotoMetadataResultCallback คำขอนี้เรียก Callback GMSPlacePhotoMetadataResultCallback ที่มี GMSPlacePhotoMetadataList ออบเจ็กต์

  2. จากออบเจ็กต์ GMSPlacePhotoMetadataList ใน Callback แอตทริบิวต์ results พร็อพเพอร์ตี้อาร์เรย์ประกอบด้วยรูปภาพ ซึ่งแต่ละรูปจะแสดงด้วย GMSPlacePhotoMetadata ออบเจ็กต์

  3. ใช้ออบเจ็กต์ GMSPlacePhotoMetadata เพื่อสร้าง GMSFetchPhotoRequest รวมถึงระบุขนาดสูงสุดของรูปภาพที่ขอ

  4. สำหรับออบเจ็กต์ GMSPlacePhotoMetadata แต่ละรายการในอาร์เรย์ ให้เรียก [GMSPlacesClient fetchPhotoWithRequest:callback:] กำลังส่งออบเจ็กต์ GMSFetchPhotoRequest เมธอดนี้เรียกเมธอด GMSFetchPhotoResultCallback Callback ที่มีรูปภาพบิตแมปที่ใช้ได้เป็น UIImage

อีกวิธีในการขอรูปภาพสำหรับสถานที่หนึ่งๆ คือการส่งคำขอรายละเอียดสถานที่ (ใหม่) โดยระบุ GMSPlacePropertyPhotos ในรายการช่อง ข้อดีของการสร้าง การตอบกลับว่า "รายละเอียดสถานที่" GMSPlace สามารถมีรูปภาพและฟิลด์ข้อมูลอื่นๆ ที่คุณต้องการ สถานที่นั้น

โค้ดตัวอย่าง

วิธีการตัวอย่างต่อไปนี้จะใช้รหัสสถานที่และได้รับรูปภาพแรกใน รายการที่ส่งคืน คุณสามารถใช้เมธอดนี้เป็นเทมเพลตสำหรับเมธอดที่คุณจะ สร้างในแอปของคุณเอง

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

Places Swift SDK สำหรับ iOS (เวอร์ชันตัวอย่าง)

// 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
}

การแคช

รูปภาพโหลดโดยใช้ [GMSPlacesClient loadPlacePhoto:callback:] หรือ [GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:] มีการแคชทั้งบนดิสก์และในหน่วยความจำโดยระบบการโหลด URL พื้นฐาน ใน NSURLCache ที่แชร์

หากต้องการกำหนดค่าลักษณะการแคช คุณสามารถเปลี่ยนแคชของ URL ที่แชร์ได้โดยใช้ [NSURLCache setSharedURLCache:] ใน application:didFinishLaunchingWithOptions: ของตัวแทนแอปพลิเคชัน

หากไม่ต้องการให้แอปพลิเคชันแชร์ NSURLCache กับ Places SDK สำหรับ iOS คุณสามารถสร้าง NSURLCache ใหม่และใช้ ภายในแอปของคุณเท่านั้นโดยไม่ตั้งค่าเป็นแคชที่แชร์

การระบุแหล่งที่มา

ในกรณีส่วนใหญ่ รูปภาพสถานที่สามารถใช้ได้โดยไม่ต้องมีที่มา หรือจะมี จำเป็นต้องมีการแสดงที่มาไว้เป็นส่วนหนึ่งของรูปภาพ อย่างไรก็ตาม หากอินสแตนซ์GMSPlacePhotoMetadataที่แสดงผลมีattributionsหรือauthorAttribution คุณต้องใส่การระบุแหล่งที่มาเหล่านี้ในแอปพลิเคชันทุกที่ที่คุณแสดงรูปภาพ ดูเอกสารใน การระบุแหล่งที่มา