Szczegóły miejsc

Pakiet SDK Miejsc na iOS zapewnia Twojej aplikacji szczegółowe informacje o miejscach, w tym ich nazwę i adres, lokalizację geograficzną określoną jako współrzędne geograficzne, typ miejsca (np. klub nocny, sklep zoologiczny, muzeum) i wiele innych. Aby uzyskać dostęp do informacji o konkretnym miejscu, możesz użyć identyfikatora miejsca – stałego identyfikatora, który jednoznacznie identyfikuje miejsce.

Szczegóły miejsca

Klasa GMSPlace zawiera informacje o konkretnym miejscu. Aby uzyskać dostęp do obiektu GMSPlace, wykonaj te czynności:

Gdy wysyłasz prośbę o miejsce, musisz określić, jakie typy danych o miejscu chcesz zwrócić. Aby to zrobić, przekaż GMSPlaceField, określając typy danych do zwrócenia. To ważna kwestia, ponieważ wpłynie na koszt każdego żądania.

Wyniki z danymi o miejscach nie mogą być puste, dlatego zwracane są tylko te wyniki z danymi (jeśli na przykład żądane miejsce nie zawiera zdjęć, pole photos nie będzie widoczne).

W przykładzie poniżej przesyłamy listę 2 wartości pól, aby określić dane zwracane 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 dotyczące danych miejsc znajdziesz w artykule Korzystanie i płatności.

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

  • name – nazwa miejsca.
  • editorialSummary – zawiera prosty opis miejsca.
  • placeID – identyfikator tekstowy miejsca. Więcej informacji o identyfikatorach miejsc znajdziesz w pozostałej części tej strony.
  • coordinate – lokalizacja geograficzna miejsca określona jako szerokość i długość geograficzna.
  • phoneNumber – numer telefonu danego miejsca w formacie międzynarodowym.
  • formattedAddress – czytelny dla człowieka adres lokalizacji.

    Często jest to równoważny adres pocztowy. Pamiętaj, że w niektórych krajach (np. w Wielkiej Brytanii) nie można rozpowszechniać prawdziwych adresów pocztowych ze względu na ograniczenia licencyjne.

    Sformatowany adres logicznie składa się z co najmniej jednego komponentu adresu. Na przykład adres „111 8th Aleja, Nowy Jork, Nowy Jork” składa się z tych komponentów: „111” (numer domu), „8 Aleja” (trasa), „Nowy Jork” (miasto) i „NY” (stan w USA).

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

  • openingHours – godziny otwarcia danego miejsca (oznaczone przez GMSOpeningHours). Zadzwoń pod numer GMSOpeningHours.weekdayText, aby uzyskać listę dziennych godzin otwarcia w danym tygodniu. Wywołaj GMSOpeningHours.Periods, aby zwrócić listę elementów GMSPeriod z bardziej szczegółowymi informacjami, które odpowiadają danym dostarczonym przez weekdayText. Uwaga: jeśli miejsce jest zawsze otwarte, przedział czasu jest przedstawiany jako niedziela o północy, a pole closeEvent ma wartość null.
  • currentOpeningHours i secondaryOpeningHours – pola, w przypadku których następuje okres świąteczny i tymczasowe zmiany harmonogramu dla danego miejsca.
  • addressComponents – tablica obiektów GMSAddressComponent reprezentujących komponenty adresu miejsca. Komponenty te służą do wyodrębniania uporządkowanych informacji o adresie miejsca, np. w znalezieniu miasta, w którym się ono znajduje. Nie używaj tych komponentów do formatowania adresów. Zamiast tego użyj właściwości formattedAddress, która udostępnia zlokalizowany adres w formacie.

    Zwróć uwagę na te informacje na temat tablicy addressComponents:

    • Tablica komponentów adresu może zawierać więcej komponentów niż formattedAddress.
    • Tablica nie musi zawierać wszystkich podmiotów politycznych z adresem (oprócz tych uwzględnionych w elemencie formattedAddress).
    • Nie możemy zagwarantować, że format odpowiedzi będzie taki sam między żądaniami. Liczba addressComponents różni się w zależności od żądanego adresu i może się z czasem zmieniać dla tego samego adresu. Komponent może zmieniać pozycję w tablicy. Typ komponentu może się zmieniać. Konkretnego komponentu może brakować w późniejszej odpowiedzi.
  • userRatingsTotal – określa, z ilu opinii składa się ocena miejsca.

Klasa GMSPlace zawiera te funkcje członkowskie:

  • isOpen oblicza, czy miejsce jest otwarte w danej godzinie, na podstawie openingHours i UTCOffsetMinutes oraz bieżącej daty i godziny.
  • isOpenAtDate oblicza, czy dane miejsce jest otwarte w określonym dniu, na podstawie właściwości openingHours i UTCOffsetMinutes oraz bieżącej daty i godziny.
  • Jeśli używasz tych funkcji do uzyskiwania godzin lub dat otwarcia, pierwotne żądanie fetchPlaceFromPlaceID: lub findPlaceLikelihoodsFromUserLocationWithPlaceFields: musi zawierać ZARÓWNO pola GMSPlaceFieldOpeningHours, jak i GMSPlaceFieldUTCOffsetMinutes. Jeśli brakuje któregoś z tych pól, wynikowy obiekt GMSPlace nie będzie zawierać godzin otwarcia ani dat, a wywołanie zwróci GMSPlaceOpenStatusUnknown. Aby zapewnić dokładne wyniki, w pierwotnej prośbie o miejsce poproś o pola GMSPlaceFieldBusinessStatus i GMSPlaceFieldUTCOffsetMinutes. Jeśli prośba nie zostanie wysłana, zakłada się, że firma działa.

    Obejrzyj ten film, aby dowiedzieć się, jak używać właściwości isOpen z informacjami o miejscu.

Zyskaj wyjątkowe godziny pracy

Z kolei standardowe godziny otwarcia obowiązują do openingHours, currentOpeningHours i secondaryOpeningHours obsługują zmiany w okresach świątecznych i tymczasowych. Wyjątkowe godziny otwarcia w te wyjątkowe dni można filtrować i przedstawić, 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
    }
}

Znajdź miejsce na podstawie dokumentu tożsamości

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

Aby znaleźć miejsce według identyfikatora, wywołaj GMSPlacesClient fetchPlaceFromPlaceID:, przekazując te parametry:

  • Ciąg tekstowy zawierający identyfikator miejsca.
  • Co najmniej jeden element GMSPlaceField określający typy danych do zwrócenia.
  • Token sesji, jeśli wywołanie zostanie wykonane w celu zakończenia zapytania autouzupełniania. W przeciwnym razie przekaż nil.
  • Pole 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 będzie miał 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świetlaj atrybucje w swojej aplikacji

Gdy aplikacja wyświetla informacje uzyskane ze strony 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 na iOS jest taki sam jak identyfikator używany w Places API, 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.

W pewnych okolicznościach miejsce może otrzymać nowy identyfikator miejsca. Może się tak na przykład zdarzyć, gdy firma przeprowadzi się w inne miejsce.

Jeśli podasz identyfikator miejsca, w odpowiedzi wyświetli się zawsze to samo miejsce (o ile miejsce nadal istnieje). Pamiętaj jednak, że odpowiedź może zawierać identyfikator miejsca inny niż ten podany w Twoim żądaniu.

Więcej informacji znajdziesz w omówieniu identyfikatorów miejsc.