Szczegóły miejsc

Pakiet SDK Miejsc na iOS zawiera szczegółowe informacje o miejscach, w tym nazwę i adres miejsca, położenie geograficzne określone jako współrzędne geograficzne, rodzaj miejsca (np. klub nocny, sklep zoologiczny, muzeum itd.). Aby uzyskać dostęp do informacji o konkretnym miejscu, możesz użyć identyfikatora miejsca – stabilnego identyfikatora, który jednoznacznie identyfikuje miejsce.

Szczegóły miejsca

Klasa GMSPlace zawiera informacje o konkretnym miejscu. Obiekt GMSPlace możesz zablokować na kilka sposobów:

Przesyłając prośbę o miejsce, musisz określić, jakie typy danych o miejscach mają być zwracane. Aby to zrobić, przekaż właściwość GMSPlaceField wskazującą typy danych, które mają być zwracane. Jest to ważne, ponieważ wpływa to na koszt każdego żądania.

Wyniki dotyczące danych o miejscach nie mogą być puste, dlatego zwracane są tylko wyniki z danymi (jeśli na przykład w żądanym miejscu nie ma zdjęć, w wyniku nie wyświetli się pole photos).

W tym przykładzie przekazano listę dwóch wartości pól określających dane zwrócone 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 miejsc. Więcej informacji o naliczaniu opłat za żądania danych o miejscach znajdziesz w artykule Użycie i rozliczenia.

Klasa GMSPlace może zawierać te dane miejsca:

  • name – nazwa miejsca.
  • editorialSummary – krótki opis miejsca.
  • placeID – tekstowy identyfikator miejsca. Więcej informacji o identyfikatorach miejsc znajdziesz w dalszej części tej strony.
  • coordinate – położenie geograficzne miejsca określone jako współrzędne geograficzne.
  • phoneNumber – numer telefonu danego miejsca w formacie międzynarodowym.
  • formattedAddress – zrozumiały dla człowieka adres tej lokalizacji,

    Często jest to odpowiednik adresu pocztowego. 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 jednego komponentu adresu. Na przykład adres „111 8th Avenue, New York, NY” składa się z następujących elementów: „111” (numer domu), „8th Avenue” (trasa), „Nowy Jork” (miasto) i „NY” (stan USA).

    Nie analizuj automatycznie sformatowanego adresu. Zamiast nich należy używać poszczególnych komponentów adresu, które oprócz odpowiedzi na pole formatowania zawierają odpowiedź interfejsu API.

  • openingHours – godziny otwarcia miejsca (zgodnie z reprezentacją: GMSOpeningHours). Zadzwoń pod numer GMSOpeningHours.weekdayText, aby uzyskać listę zlokalizowanych ciągów znaków godzin otwarcia danego tygodnia. Wywołaj GMSOpeningHours.Periods, aby zwrócić listę GMSPeriod z bardziej szczegółowymi informacjami odpowiadającymi danym podanym przez weekdayText. Uwaga: jeśli miejsce jest zawsze otwarte, przedział czasu jest oznaczony jako niedziela o północy, a closeEvent ma wartość null.
  • currentOpeningHours i secondaryOpeningHours – pola, które zmieniają harmonogram podróży w okresie świątecznym i tymczasowym.
  • addressComponents – tablica GMSAddressComponent obiektów reprezentujących adres danego miejsca. Komponenty służą do wyodrębniania uporządkowanych informacji o adresie miejsca, na przykład aby znaleźć miasto, 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 podaje zlokalizowany adres.

    Zapamiętaj te fakty na temat tablicy addressComponents:

    • Tablica komponentów adresu może zawierać więcej komponentów niż element formattedAddress.
    • Tablica nie musi obejmować wszystkich jednostek politycznych zawierających adres oprócz tych uwzględnionych w polu formattedAddress.
    • Format odpowiedzi nie może być taki sam między żądaniami. W szczególności liczba obiektów addressComponents różni się w zależności od żądanego adresu i może się zmienić z upływem czasu. Komponent może zmieniać pozycję w tablicy. Typ komponentu może się zmienić. W późniejszej odpowiedzi może brakować konkretnego komponentu.
  • userRatingsTotal – liczba opinii, które składają się na ocenę miejsca.

Klasa GMSPlace zawiera te funkcje:

  • Funkcja isOpen określa, czy dane miejsce jest otwarte w danym momencie na podstawie wartości openingHours i UTCOffsetMinutes oraz bieżącej daty i godziny.
  • isOpenAtDate na podstawie openingHours i UTCOffsetMinutes, a także bieżącej daty i godziny, określa, czy dane miejsce jest otwarte w danym dniu.
  • Jeśli używasz tych funkcji do pobierania godzin lub dat otwarcia, pierwotne żądanie fetchPlaceFromPlaceID: lub findPlaceLikelihoodsFromUserLocationWithPlaceFields: musi zawierać zarówno pole GMSPlaceFieldOpeningHours, jak i GMSPlaceFieldUTCOffsetMinutes. Jeśli brakuje któregoś z tych pól, wywołany obiekt GMSPlace nie będzie zawierać godzin ani dat otwarcia, a wywołanie zwróci wartość GMSPlaceOpenStatusUnknown. Aby uzyskać dokładne wyniki, poproś o pola GMSPlaceFieldBusinessStatus i GMSPlaceFieldUTCOffsetMinutes w pierwotnym żądaniu miejsca. W przypadku braku prośby zakłada się, że firma działa.

    Obejrzyj ten film, by dowiedzieć się, jak używać właściwości isOpen ze szczegółami miejsca.

Wyjątkowe godziny otwarcia

Standardowe godziny otwarcia są pobierane za pomocą openingHours, a currentOpeningHours i secondaryOpeningHours obsługują zmiany w świętach i harmonogramach tymczasowych. W godzinach tych specjalnych godzin można filtrować i wyświetlać informacje o nich.

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

Znajdź miejsce według identyfikatora

Identyfikator miejsca to identyfikator tekstowy, który jednoznacznie identyfikuje miejsce. W pakiecie SDK Miejsc na iOS możesz pobrać identyfikator miejsca z obiektu GMSPlace. Możesz zapisać identyfikator miejsca i użyć go później do pobrania obiektu GMSPlace.

Aby uzyskać miejsce według identyfikatora, wywołaj funkcję GMSPlacesClient fetchPlaceFromPlaceID:, przekazując te parametry:

  • Ciąg znaków zawierający identyfikator miejsca.
  • Co najmniej jeden element GMSPlaceField określający typy danych do zwrócenia.
  • Token sesji, jeśli wywołanie ma zakończyć zapytanie autouzupełniania. W przeciwnym razie przekaż wartość nil.
  • GMSPlaceResultCallback do obsługi wyniku.

Interfejs API wywołuje określoną metodę wywołania zwrotnego, przekazując obiekt GMSPlace. Jeśli miejsce nie zostało znalezione, obiekt ma wartość nil.

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 atrybucji w aplikacji

Gdy aplikacja wyświetla informacje uzyskane z GMSPlacesClient lookUpPlaceID:callback:, musi też wyświetlać atrybucje. Zapoznaj się z dokumentacją dotyczącą atrybucji.

Więcej informacji o identyfikatorach miejsc

Identyfikator miejsca używany w pakiecie Places SDK dla iOS jest taki sam jak identyfikator interfejsu Places API, Places SDK dla Androida i innych interfejsów Google API.

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

W pewnych okolicznościach mogą pojawić się w nim nowe identyfikatory. Może się tak zdarzyć, jeśli firma przeprowadzi się do innej lokalizacji.

Gdy określisz identyfikator miejsca, zyskasz pewność, że w odpowiedzi zawsze otrzymasz to samo miejsce (jeśli dane miejsce nadal istnieje). Pamiętaj jednak, że odpowiedź może zawierać identyfikator miejsca inny niż podany w żądaniu.

Więcej informacji znajdziesz w artykule Omówienie identyfikatorów miejsc.