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:
- Zadzwoń pod numer
GMSPlacesClient findPlaceLikelihoodsFromUserLocationWithPlaceFields:
. Przeczytaj przewodnik, aby dowiedzieć się, jak to zrobić. - Wywołaj
GMSPlacesClient fetchPlaceFromPlaceID:
, przekazując właściwośćGMSPlaceField
, identyfikator miejsca i metodę wywołania zwrotnego. W przypadku żądań informacji o miejscach, jeśli nie określisz co najmniej 1 pola w żądaniu lub pominiesz parametrfields
z żądania, Zostaną zwrócone WSZYSTKO możliwe pola i naliczymy odpowiednie opłaty. Przeczytaj przewodnik dotyczący uzyskiwania miejsc według identyfikatora.
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 numerGMSOpeningHours.weekdayText
, aby uzyskać listę zlokalizowanych ciągów znaków godzin otwarcia danego tygodnia. WywołajGMSOpeningHours.Periods
, aby zwrócić listęGMSPeriod
z bardziej szczegółowymi informacjami odpowiadającymi danym podanym przezweekdayText
. Uwaga: jeśli miejsce jest zawsze otwarte, przedział czasu jest oznaczony jako niedziela o północy, acloseEvent
ma wartość null.currentOpeningHours
isecondaryOpeningHours
– pola, które zmieniają harmonogram podróży w okresie świątecznym i tymczasowym.addressComponents
– tablicaGMSAddressComponent
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ściformattedAddress
, 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.
- Tablica komponentów adresu może zawierać więcej komponentów niż element
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ściopeningHours
iUTCOffsetMinutes
oraz bieżącej daty i godziny. isOpenAtDate
na podstawieopeningHours
iUTCOffsetMinutes
, 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.
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.