Yer Ayrıntıları

iOS için Yerler SDK'sı, uygulamanıza yerlerle ilgili zengin bilgiler sağlar. Bu bilgiler arasında yerin adı ve adresi, enlem/boylam koordinatları olarak belirtilen coğrafi konum, yerin türü (ör. gece kulübü, evcil hayvan mağazası, müze) ve daha fazlası yer alır. Belirli bir yerle ilgili bu bilgilere erişmek için yer kimliğini kullanabilirsiniz. Yer kimliği, bir yeri benzersiz şekilde tanımlayan sabit bir tanımlayıcıdır.

Yer ayrıntıları

GMSPlace sınıfı, belirli bir yer hakkında bilgi sağlar. GMSPlace nesnesini aşağıdaki yöntemlerle alabilirsiniz:

Bir yer istediğinizde, döndürülecek yer verisi türlerini belirtmeniz gerekir. Bunu yapmak için döndürülecek veri türlerini belirten bir GMSPlaceField iletin. Bu, her isteğin maliyetini etkileyeceğinden önemli bir husustur.

Yer verisi sonuçları boş olamayacağından yalnızca veri içeren yer sonuçları döndürülür (örneğin, istenen bir yerin fotoğrafı yoksa sonuçta photos alanı bulunmaz).

Aşağıdaki örnekte, bir istek tarafından döndürülen verileri belirtmek için iki alan değerinden oluşan bir liste iletilmektedir:

Swift

      // A hotel in Saigon with an attribution.
      let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs"

      // Specify the place data types to return.
      let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.name.rawValue) |
      UInt(GMSPlaceField.placeID.rawValue))
  

Objective-C

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

      // Specify the place data types to return.
      GMSPlaceField fields = (GMSPlaceFieldName | GMSPlaceFieldPlaceID);
  

Yer alanları hakkında daha fazla bilgi edinin. Yer verisi isteklerinin nasıl faturalandırıldığı hakkında daha fazla bilgi için Kullanım ve Faturalandırma başlıklı makaleyi inceleyin.

GMSPlace sınıfı aşağıdaki yer verilerini içerebilir:

  • name: Yerin adı.
  • editorialSummary: Bir yerin açıklamasını sağlar.
  • placeID: Yerin metin tanımlayıcısı. Bu sayfanın geri kalanında yer kimlikleri hakkında daha fazla bilgi edinebilirsiniz.
  • coordinate: Enlem ve boylam koordinatları olarak belirtilen, yerin coğrafi konumu.
  • phoneNumber: Yerin uluslararası standarttaki telefon numarası.
  • formattedAddress: Bu konumun kullanıcılar tarafından okunabilen adresi.

    Bu adres genellikle posta adresiyle aynıdır. Birleşik Krallık gibi bazı ülkelerde, lisans kısıtlamaları nedeniyle gerçek posta adreslerinin dağıtımına izin verilmediğini unutmayın.

    Biçimlendirilmiş adres, mantıksal olarak bir veya daha fazla adres bileşeninden oluşur. Örneğin, "111 8th Avenue, New York, NY" adresi şu bileşenlerden oluşur: "111" (sokak numarası), "8th Avenue" (rota), "New York" (şehir) ve "NY" (ABD eyaleti).

    Biçimlendirilmiş adresi programatik olarak ayrıştırmayın. Bunun yerine, API yanıtının biçimlendirilmiş adres alanına ek olarak içerdiği ayrı adres bileşenlerini kullanmanız gerekir.

  • openingHours: Yerin çalışma saatleri (GMSOpeningHours ile temsil edilir). Haftanın her günü için yerelleştirilmiş çalışma saatleri listesini almak üzere GMSOpeningHours.weekdayText yöntemini çağırın. weekdayText tarafından sağlanan verilere eşdeğer daha ayrıntılı bilgiler içeren GMSPeriod listesini döndürmek için GMSOpeningHours.Periods yöntemini çağırın. Not: Bir yer her zaman açıksa dönem, pazar günü gece yarısı olarak gösterilir ve closeEvent boştur.
  • currentOpeningHours ve secondaryOpeningHours: Bir yerin tatil günlerini ve programındaki geçici değişiklikleri içeren alanlar.
  • addressComponents: Bir yerin adres bileşenlerini temsil eden GMSAddressComponent nesneleri dizisi. Bu bileşenler, bir yerin adresi hakkında yapılandırılmış bilgileri ayıklamak (ör. bir yerin bulunduğu şehri bulmak) amacıyla sağlanır. Adres biçimlendirme için bu bileşenleri kullanmayın. Bunun yerine, yerelleştirilmiş biçimlendirilmiş bir adres sağlayan formattedAddress özelliğini kullanın.

    addressComponents dizisiyle ilgili aşağıdaki bilgileri göz önünde bulundurun:

    • Adres bileşenleri dizisi, formattedAddress değerinden daha fazla bileşen içerebilir.
    • Dizi, formattedAddress içinde yer alanlar dışında, adres içeren tüm siyasi varlıkları içermeyebilir.
    • Yanıtın biçiminin istekler arasında aynı kalacağı garanti edilmez. Özellikle addressComponents sayısı, istenen adrese göre değişir ve aynı adres için zaman içinde değişebilir. Bir bileşen, dizideki konumunu değiştirebilir. Bileşenin türü değişebilir. Belirli bir bileşen sonraki bir yanıtta eksik olabilir.
  • userRatingsTotal: Yerin puanının kaç yorumdan oluştuğunu gösterir.

GMSPlace sınıfı aşağıdaki üye işlevlerini içerir:

  • isOpen, openingHours, UTCOffsetMinutes ve geçerli tarih ile saate göre bir yerin belirtilen saatte açık olup olmadığını hesaplar.
  • isOpenAtDate, openingHours ve UTCOffsetMinutes ile geçerli tarih ve saate göre bir yerin belirli bir tarihte açık olup olmadığını hesaplar.
  • Açılış saatlerini ve/veya tarihlerini almak için bu işlevleri kullanırken orijinal fetchPlaceFromPlaceID: veya findPlaceLikelihoodsFromUserLocationWithPlaceFields: isteğinde HEM GMSPlaceFieldOpeningHours HEM DE GMSPlaceFieldUTCOffsetMinutes alanları belirtilmelidir. Bu alanlardan biri eksikse sonuçta elde edilen GMSPlace nesnesi, açılış saatlerini veya tarihlerini içermez ve çağrı GMSPlaceOpenStatusUnknown değerini döndürür. Doğru sonuçlar için orijinal yer isteğinizde GMSPlaceFieldBusinessStatus ve GMSPlaceFieldUTCOffsetMinutes alanlarını isteyin. İstenmezse işletmenin faal olduğu varsayılır.

    isOpen özelliğini Yer Ayrıntıları ile nasıl kullanacağınızı öğrenmek için Çalışma saatlerini öğrenme videosunu izleyin.

Özel çalışma saatleri ekleme

Normal çalışma saatleri openingHours üzerinden alınırken currentOpeningHours ve secondaryOpeningHours, tatil ve geçici program değişikliklerini destekler. Bu özel günlerdeki istisnai çalışma saatleri filtrelenebilir ve varsa gösterilebilir.

Swift

    func examineOpeningHours(place: GMSPlace) {

      // Check if the current opening hours contains a special day that has exceptional hours
      guard let currentOpeningHours = place.currentOpeningHours else { return }
      if let specialDays = currentOpeningHours.specialDays {
        guard !specialDays.isEmpty else { return }
        if let specialDay = specialDays.filter { $0.isExceptional }.first  {
          // Indicate exceptional hours
        }
      }

      // Check if current opening hours contains a truncated time period
      let periods = currentOpeningHours.periods

      if !periods.isEmpty {
        for period in periods {
          let open = period.open
          let close = period.close

          if let open = open {
            let date = open.date

            if open.isTruncated {
              // Indicate truncated time period
            }
          }
        }
      }

      // Check if the place's secondary opening hours indicate when delivery is available
      let secondaryOpeningHours = place.secondaryOpeningHours
      guard let hoursType = secondaryOpeningHours.first?.hoursType else {
      return
      }

      if (hoursType == GMSPlaceHoursTypeDelivery) {
        // Indicate hours where delivery is available
      }
  }

Objective-C

- (void)examineOpeningHours:(GMSPlace *) place {

    // Check if the current opening hours contains a special day that has exceptional hours
    GMSOpeningHours *currentOpeningHours = place.currentOpeningHours;
    if (currentOpeningHours != nil) {
      NSArray<GMSPlaceSpecialDay *> *specialDays = currentOpeningHours.specialDays;
      if ([specialDays count] != 0) {
        for (GMSPlaceSpecialDay *specialDay in specialDays) {
          NSDate *date = specialDay.date;
          if ([specialDay isExceptional]) {
            // Indicate exceptional hours
          }
        }
      }
    }

    // Check if current opening hours contains a truncated time period
    NSArray <GMSPeriod *> * periods = currentOpeningHours.periods;

    if ([periods count] != 0) {
      for (GMSPeriod * period in periods) {
        GMSTimeOfWeek *open = period.open;
        GMSTimeOfWeek *close = period.close;

        if (open) {
          if ([open isTruncated]) {
            // Indicate truncated time period
          }
        }
      }
    }

    // Check if the place's secondary opening hours indicate when delivery is available
    GMSOpeningHours *secondaryOpeningHours = place.secondaryOpeningHours;
    GMSPlaceHoursType hoursType = secondaryOpeningHours.getHoursType;

    if (hoursType == GMSPlaceHoursTypeDelivery) {
      // Indicate hours where delivery is available
    }
}

Kimliğe göre yer alma

Yer kimliği, bir yeri benzersiz şekilde tanımlayan metin tabanlı bir tanımlayıcıdır. iOS için Yerler SDK'sında, bir yerin kimliğini GMSPlace nesnesinden alabilirsiniz. Yer kimliğini depolayabilir ve daha sonra GMSPlace nesnesini tekrar almak için kullanabilirsiniz.

Kimliğe göre bir yer almak için GMSPlacesClient fetchPlaceFromPlaceID: yöntemini çağırın ve aşağıdaki parametreleri iletin:

  • Yer kimliği içeren bir dize.
  • Döndürülecek veri türlerini belirten bir veya daha fazla GMSPlaceField.
  • Arama, bir otomatik tamamlama sorgusunu tamamlamak için yapılıyorsa oturum jetonu. Aksi takdirde nil değerini iletin.
  • Sonucu işlemek için bir GMSPlaceResultCallback.

API, belirtilen geri çağırma yöntemini çağırarak bir GMSPlace nesnesi iletir. Yer bulunamazsa yer nesnesi boş olur.

iOS için Places Swift SDK'sı

// Initialize Places Swift Client.
let placesClient = PlacesClient.shared

// A hotel in Saigon with an attribution
let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs"
    
// Fetch Place Request.
let fetchPlaceRequest = FetchPlaceRequest(
  placeID: placeID,
  placeProperties: [.displayName]
)
    
Task {
  switch await placesClient.fetchPlace(with: fetchPlaceRequest) {
  case .success(let place):
    print("The selected place is: \(place.displayName): \(String(describing: place.description))")
  case .failure(let placesError):
    print("Place not found: \(placeID); \(placesError)")
  }
}

Swift

// A hotel in Saigon with an attribution.
let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs"

// Specify the place data types to return.
let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.name.rawValue) |
  UInt(GMSPlaceField.placeID.rawValue))!

placesClient?.fetchPlace(fromPlaceID: placeID, placeFields: fields, sessionToken: nil, callback: {
  (place: GMSPlace?, error: Error?) in
  if let error = error {
    print("An error occurred: \(error.localizedDescription)")
    return
  }
  if let place = place {
    self.lblName?.text = place.name
    print("The selected place is: \(place.name)")
  }
})

Objective-C

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

// Specify the place data types to return.
GMSPlaceField fields = (GMSPlaceFieldName | GMSPlaceFieldPlaceID);

[_placesClient fetchPlaceFromPlaceID:placeID placeFields:fields sessionToken:nil callback:^(GMSPlace * _Nullable place, NSError * _Nullable error) {
  if (error != nil) {
    NSLog(@"An error occurred %@", [error localizedDescription]);
    return;
  }
  if (place != nil) {
    NSLog(@"The selected place is: %@", [place name]);
  }
}];

Uygulamanızda ilişkilendirmeleri gösterme

Uygulamanız GMSPlacesClient lookUpPlaceID:callback:'dan elde edilen bilgileri gösterdiğinde ilişkilendirmeleri de göstermelidir. Atıflar ile ilgili belgelere göz atın.

Yer kimlikleri hakkında daha fazla bilgi

iOS için Yerler SDK'sında kullanılan yer kimliği, Places API, Android için Yerler SDK'sı ve diğer Google API'lerinde kullanılan tanımlayıcıyla aynıdır.

Her yer kimliği yalnızca bir yeri ifade edebilir ancak tek bir yerin birden fazla yer kimliği olabilir.

Bir yerin yeni bir yer kimliği almasına neden olabilecek durumlar vardır. Örneğin, bir işletme yeni bir konuma taşındığında bu durumla karşılaşılabilir.

Bir yeri, yer kimliğini belirterek istediğinizde yanıtta her zaman aynı yeri alacağınızdan emin olabilirsiniz (yer hâlâ mevcutsa). Ancak yanıtın, isteğinizdekinden farklı bir yer kimliği içerebileceğini unutmayın.

Daha fazla bilgi için yer kimliğine genel bakış başlıklı makaleyi inceleyin.