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:
- Zadzwoń pod numer
GMSPlacesClient findPlaceLikelihoodsFromUserLocationWithPlaceFields:
. Zapoznaj się z przewodnikiem pozyskiwania bieżącego miejsca. - Wywołaj funkcję
GMSPlacesClient fetchPlaceFromPlaceID:
, przekazującGMSPlaceField
, identyfikator miejsca docelowego i metodę wywołania zwrotnego. Jeśli w żądaniu szczegółów miejsca nie określisz co najmniej 1 pola lub pominiesz parametrfields
, zwrócone zostaną WSZYSTKIE możliwe pola, a Ty zostaniesz odpowiednio obciążony opłatą. Zapoznaj się z przewodnikiem pobierania miejsca na podstawie identyfikatora.
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 przezGMSOpeningHours
). 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.currentOpeningHours
isecondaryOpeningHours
– pola, które uwzględniają święta i tymczasowe zmiany harmonogramu miejsca.addressComponents
– tablica obiektówGMSAddressComponent
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ściformattedAddress
, 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
addressComponents
zależ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.
- Tablica elementów adresu może zawierać więcej elementów niż
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 podstawieopeningHours
iUTCOffsetMinutes
oraz bieżącej daty i godziny. isOpenAtDate
oblicza, czy dane miejsce jest otwarte w określonym dniu na podstawieopeningHours
iUTCOffsetMinutes
, 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 GMSPlaceFieldBusinessStatus
i GMSPlaceFieldUTCOffsetMinutes
. Jeśli nie zostanie to poproszone, przyjmuje się, że firma jest aktywna.
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.