Szczegóły miejsc

Zestaw Places SDK na iOS udostępnia Twojej aplikacji bogate informacje o miejscach, w tym nazwę i adres miejsca, położenie geograficzne określone jako współrzędne szerokości i długości geograficznej, typ miejsca (np. klub nocny, sklep zoologiczny, muzeum) i inne. Aby uzyskać dostęp do tych informacji w przypadku konkretnego miejsca, możesz użyć identyfikatora miejsca, czyli stabilnego identyfikatora, który jednoznacznie identyfikuje dane miejsce.

Informacje o miejscu

Klasa GMSPlace zawiera informacje o konkretnym miejscu. Obiekt GMSPlace możesz uzyskać w jeden z tych sposobów:

Gdy wysyłasz żądanie dotyczące miejsca, musisz określić, jakie typy danych o miejscu mają zostać zwrócone. Aby to zrobić, prześlij parametr GMSPlaceField, podając typy danych, które mają zostać zwrócone. Jest to ważne, ponieważ ma wpływ na koszt każdego zapytania.

Wyniki danych o miejscach nie mogą być puste, dlatego zwracane są tylko wyniki z danymi (np. jeśli żądane miejsce nie ma zdjęć, pole photos nie będzie obecne w wyniku).

W tym przykładzie lista 2 wartości pól służy do określenia danych zwracanych przez żądanie:

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);
  

Dowiedz się więcej o polach Miejsce. Więcej informacji o rozliczeniach za żądania danych o miejscach znajdziesz w artykule Używanie i rozliczanie.

Klasa GMSPlace może zawierać te dane o miejscu:

  • name – nazwa miejsca.
  • editorialSummary – zawiera opis miejsca.
  • placeID – tekstowy identyfikator miejsca. Więcej informacji o identyfikatorach miejsc znajdziesz w dalszej części tej strony.
  • coordinate – geograficzna lokalizacja miejsca, określona jako współrzędne geograficzne.
  • phoneNumber – numer telefonu miejsca w formacie międzynarodowym.
  • formattedAddress – czytelny dla człowieka adres tej lokalizacji.

    Często jest to adres pocztowy. Pamiętaj, że niektóre kraje, takie jak Wielka Brytania, nie zezwalają na rozpowszechnianie prawdziwych adresów pocztowych ze względu na ograniczenia licencyjne.

    Sformatowany adres składa się z co najmniej 1 elementu adresu. Na przykład adres „111 8th Avenue, Nowy Jork, NY” składa się z tych elementów: „111” (numer domu), „8th Avenue” (ulica), „Nowy Jork” (miasto) i „NY” (stan w USA).

    Nie analizuj sformatowanego adresu za pomocą kodu. Zamiast tego użyj poszczególnych elementów adresu, które są zawarte w odpowiedzi interfejsu API oprócz sformatowanego pola adresu.

  • openingHours – godziny otwarcia miejsca (reprezentowane przez GMSOpeningHours). Aby uzyskać listę zlokalizowanych ciągów znaków z godzinami otwarcia w poszczególnych dniach tygodnia, wywołaj funkcję GMSOpeningHours.weekdayText. Wywołaj funkcję GMSOpeningHours.Periods, aby zwrócić listę GMSPeriod z bardziej szczegółowymi informacjami, które są równoważne danym udostępnianym przez funkcję weekdayText. Uwaga: jeśli miejsce jest zawsze otwarte, okres jest reprezentowany jako niedziela o północy, a wartość closeEvent jest pusta.
  • currentOpeningHourssecondaryOpeningHours – pola, które uwzględniają święta i tymczasowe zmiany harmonogramu miejsca.
  • addressComponents – tablica obiektów GMSAddressComponent reprezentujących elementy adresu miejsca. Te komponenty są udostępniane w celu wyodrębniania uporządkowanych informacji o adresie miejsca, na przykład miasta, w którym się ono znajduje. Nie używaj tych komponentów do formatowania adresu. Zamiast tego użyj właściwości formattedAddress, która zapewnia sformatowany adres w wersji zlokalizowanej.

    Pamiętaj o tych informacjach dotyczących tablicy addressComponents:

    • Tablica elementów adresu może zawierać więcej elementów niż formattedAddress.
    • Tablica niekoniecznie zawiera wszystkie podmioty polityczne, które zawierają adres, z wyjątkiem tych, które są uwzględnione w formattedAddress.
    • Nie ma gwarancji, że format odpowiedzi będzie taki sam w przypadku różnych żądań. W szczególności liczba addressComponentszależy od adresu, którego dotyczy żądanie, i może się z czasem zmieniać w przypadku tego samego adresu. Element może zmienić pozycję w tablicy. Typ komponentu może się zmienić. W późniejszej odpowiedzi może brakować określonego komponentu.
  • userRatingsTotal – liczba opinii, które składają się na ocenę miejsca.

Klasa GMSPlace zawiera te funkcje członkowskie:

  • isOpen oblicza, czy dane miejsce jest otwarte w określonym czasie na podstawie openingHoursUTCOffsetMinutesoraz bieżącej daty i godziny.
  • isOpenAtDate oblicza, czy dane miejsce jest otwarte w określonym dniu na podstawie openingHoursUTCOffsetMinutes, a także bieżącej daty i godziny.
  • Gdy używasz tych funkcji, aby uzyskać godziny lub daty otwarcia, oryginalne żądanie fetchPlaceFromPlaceID: lub findPlaceLikelihoodsFromUserLocationWithPlaceFields: musi określać pola GMSPlaceFieldOpeningHours i GMSPlaceFieldUTCOffsetMinutes. Jeśli brakuje któregoś z tych pól, wynikowy obiekt GMSPlace nie będzie zawierać godzin ani dat otwarcia, a wywołanie zwróci wartość GMSPlaceOpenStatusUnknown. Aby mieć pewność, że wyniki będą dokładne, w pierwotnym żądaniu przesłania informacji o miejscu podaj pola GMSPlaceFieldBusinessStatusGMSPlaceFieldUTCOffsetMinutes. Jeśli nie zostanie to poproszone, przyjmuje się, że firma jest aktywna.

    Aby dowiedzieć się, jak używać isOpen w przypadku szczegółów miejsca, obejrzyj ten film.

Uzyskaj dostęp do wyjątkowych godzin

Regularne godziny otwarcia można uzyskać za pomocą openingHours, currentOpeningHours i secondaryOpeningHours, które obsługują zmiany godzin otwarcia w święta i okresach przejściowych. Niestandardowe godziny pracy w takie dni można filtrować i wyświetlać, jeśli są dostępne.

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

Uzyskiwanie informacji o miejscu na podstawie identyfikatora

Identyfikator miejsca to tekstowy identyfikator jednoznacznie identyfikujący miejsce. W pakiecie SDK Miejsc na iOS możesz pobrać identyfikator miejsca z obiektu GMSPlace. Możesz zapisać identyfikator miejsca i użyć go do ponownego pobrania obiektu GMSPlace.

Aby uzyskać dane miejsca na podstawie identyfikatora, wywołaj funkcję GMSPlacesClient fetchPlaceFromPlaceID:, podając te parametry:

  • Ciąg tekstowy zawierający identyfikator miejsca.
  • Co najmniej 1 element GMSPlaceField określający typy danych, które mają zostać zwrócone.
  • token sesji, jeśli wywołanie ma na celu zakończenie zapytania autouzupełniania; W przeciwnym razie prześlij wartość nil.
  • Funkcja GMSPlaceResultCallback do obsługi wyniku.

Interfejs API wywołuje określoną metodę wywołania zwrotnego, przekazując obiekt GMSPlace. Jeśli miejsce nie zostanie znalezione, obiekt miejsca jest pusty.

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

Wyświetlanie informacji o pochodzeniu danych w aplikacji

Jeśli aplikacja wyświetla informacje uzyskane z GMSPlacesClient lookUpPlaceID:callback:, musi też wyświetlać informacje o źródłach. Zapoznaj się z dokumentacją dotyczącą przypisywania atrybucji.

Więcej informacji o identyfikatorach miejsc

Identyfikator miejsca używany w pakiecie Places SDK na iOS jest tym samym identyfikatorem, który jest używany w interfejsie Places API, pakiecie Places SDK na Androida i innych interfejsach API Google.

Każdy identyfikator miejsca może odnosić się tylko do jednego miejsca, ale jedno miejsce może mieć więcej niż 1 identyfikator miejsca.

W pewnych okolicznościach miejsce może otrzymać nowy identyfikator. Może się tak zdarzyć, jeśli firma przeniesie się do nowej lokalizacji.

Gdy wysyłasz żądanie dotyczące miejsca, podając jego identyfikator, możesz mieć pewność, że w odpowiedzi zawsze otrzymasz informacje o tym samym miejscu (jeśli nadal istnieje). Pamiętaj jednak, że odpowiedź może zawierać identyfikator miejsca inny niż ten podany w prośbie.

Więcej informacji znajdziesz w artykule Omówienie identyfikatora miejsca.