תמונות של המקום (חדש)

בחירת פלטפורמה: Android iOS שירות אינטרנט

אתם יכולים להשתמש ב-Places SDK ל-iOS (הגרסה החדשה) כדי לבקש להציג באפליקציה שלכם תמונות של מקומות. התמונות שמוחזרות על ידי שירות התמונות מגיעות ממגוון מקורות, כולל בעלי עסקים ותמונות שנוספו על ידי משתמשים.

תמונות הן תמונות בפורמט בייטמאפ שמיוצגות על ידי אובייקט UIImage. הגודל המקסימלי של תמונה בפורמט בייטמאפ הוא 4,800 על 4,800 פיקסלים.

שליחת בקשה לקבלת תמונה

אפשר לבקש עד 10 תמונות של מקום:

  1. קוראים ל-[GMSPlacesClient lookUpPhotosForPlaceID] ומעבירים מזהה מקום וקריאה חוזרת (callback) של GMSPlacePhotoMetadataResultCallback. הבקשה הזו מפעילה את הפונקציה הלא סטטית GMSPlacePhotoMetadataResultCallback עם אובייקט GMSPlacePhotoMetadataList.

  2. מהאובייקט GMSPlacePhotoMetadataList בקריאה החוזרת, מאפיין המערך results מכיל את התמונות, כאשר כל תמונה מיוצגת על ידי אובייקט GMSPlacePhotoMetadata.

  3. משתמשים באובייקט GMSPlacePhotoMetadata כדי ליצור GMSFetchPhotoRequest, כולל הגודל המקסימלי של התמונה המבוקשת.

  4. לכל אובייקט GMSPlacePhotoMetadata במערך, קוראים ל-[GMSPlacesClient fetchPhotoWithRequest:callback:] ומעבירים את האובייקט GMSFetchPhotoRequest. ה-method הזה קורא ל-callback‏ GMSFetchPhotoResultCallback עם קובץ אימג' בפורמט bitmap שאפשר להשתמש בו כ-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 (גרסת Preview)

// 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 של Foundation ב-NSURLCache המשותף.

כדי להגדיר את התנהגות האחסון במטמון, אפשר לשנות את המטמון המשותף של כתובות ה-URL באמצעות [NSURLCache setSharedURLCache:] ב-method‏ application:didFinishLaunchingWithOptions: של הנציג של האפליקציה.

אם אתם לא רוצים שהאפליקציה שלכם תשתף את NSURLCache עם Places SDK ל-iOS, תוכלו ליצור NSURLCache חדש ולהשתמש בו באופן בלעדי באפליקציה, בלי להגדיר אותו כמטמון המשותף.

שיוכים

ברוב המקרים, אפשר להשתמש בתמונות של מקומות ללא שיוך, או שהשיוך הנדרש ייכלל כחלק מהתמונה. עם זאת, אם המופע של GMSPlacePhotoMetadata שמוחזר כולל את הערכים attributions או authorAttribution, צריך לכלול את השיוך הזה באפליקציה בכל מקום שבו מוצגת התמונה. מידע נוסף זמין במאמר בנושא שיוך.