Szczegóły miejsc

Pakiet Places SDK na Androida zapewnia aplikacji bogate informacje informacje o miejscach, w tym ich nazwę i adres, położenie geograficzne, lokalizacja określona za pomocą współrzędnych geograficznych, rodzaj miejsca (np. klub nocny, sklep zoologiczny, muzeum). Aby uzyskać dostęp do tych informacji dla konkretnego miejsca, możesz użyć identyfikatora miejsca, stałego identyfikatora, wskazuje miejsce.

Informacje o miejscu

Place dostarcza informacji o konkretnym miejscu. Możesz zdobyć Place możesz użyć w następujący sposób:

Zgłaszając prośbę o dane miejsce, musisz określić, które dane o nim mają zostać zwrócone. W tym celu przekaż listę Place.Field określające dane do zwrócenia. Warto rozważyć tę listę, ponieważ ma ona wpływ na kosztu każdego żądania.

Ponieważ wyniki z danymi miejsc nie mogą być puste, tylko wyniki miejsc z danymi są zwrócone (jeśli na przykład żądane miejsce nie ma zdjęć, funkcja photos nie występuje w wyniku).

Poniższy przykład przekazuje listę 3 Wartości pola Place.Field w celu określenia danych zwracanych przez żądanie:

Kotlin

// Specify the fields to return.
val placeFields = listOf(Place.Field.NAME, Place.Field.RATING, Place.Field.OPENING_HOURS)

Java

// Specify the fields to return.
final List<Place.Field> placeFields = Arrays.asList(Place.Field.NAME, Place.Field.RATING, Place.Field.OPENING_HOURS);
  

Dostęp do pól danych obiektów Miejsc

Gdy już uzyskasz obiekt Place, użyj jego metod, aby uzyskać dostęp do pola danych określonych w żądaniu. Jeśli w obiekcie Place brakuje pola, pokrewna metoda zwraca wartość null. Poniżej przedstawiamy kilka przykładowych metod. Pełną listę wszystkich metod znajdziesz w Place Dokumentacja API.

  • getAddress() – adres miejsca w formacie czytelnym dla człowieka .
  • getAddressComponents()List komponentów adresu tego miejsca. Komponenty te są dostarczane w przypadku funkcji wyodrębniania uporządkowanych informacji o adresie miejsca. To przykład wyszukiwania miasta, w którym znajduje się dane miejsce. Nie używaj tych komponenty formatowania adresu; zamiast tego zadzwoń do getAddress(), który zapewnia zlokalizowany adres w formacie.
  • getId() – tekstowy identyfikator miejsca. Odczytano o identyfikatorach miejsc znajdziesz w dalszej części tej strony.
  • getLatLng() – lokalizacja geograficzna miejsca, określane za pomocą współrzędnych geograficznych.
  • getName() – nazwa miejsca.
  • getOpeningHours()OpeningHours danego miejsca. Zadzwoń pod numer OpeningHours.getWeekdayText(), aby zwrócić lista ciągów reprezentujących godziny otwarcia i zamknięcia w poszczególnych dniach w tym tygodniu. Wywołaj OpeningHours.getPeriods(), aby zwrócić listę period obiektów z bardziej szczegółowymi informacjami jest taki sam jak dane dostarczone przez getWeekdayText().

    Obiekt Place zawiera też getCurrentOpeningHours(). która zwraca godziny otwarcia miejsca w ciągu najbliższych siedmiu dni, getSecondaryOpeningHours() , która zwraca dodatkowe godziny otwarcia miejsca w ciągu najbliższych siedmiu dni.

  • isOpen() – wartość logiczna wskazująca, czy miejsce aktualnie otwartego. Jeśli nie podasz żadnej godziny, domyślną wartością będzie teraz. isOpen zostaną zwrócone tylko wtedy, gdy zarówno Place.Field.UTC_OFFSET, jak i Place.Field.OPENING_HOURS są dostępne. Aby zapewnić dokładność wyników, poproś o Place.Field.BUSINESS_STATUS i Place.Field.UTC_OFFSET pól w pierwotnym żądaniu miejsca. Jeśli prośba nie zostanie wysłana, zakłada się, że firma działa. Aby dowiedzieć się, jak używać tej funkcji, obejrzyj ten film. isOpen z informacjami o miejscu.

Oto kilka prostych przykładów:

Kotlin



val name = place.name
val address = place.address
val location = place.latLng

      

Java


final CharSequence name = place.getName();
final CharSequence address = place.getAddress();
final LatLng location = place.getLatLng();

      

Znajdź miejsce na podstawie identyfikatora

Identyfikator miejsca to identyfikator tekstowy jednoznacznie identyfikujący miejsce. W SDK Miejsc dla systemu Android można uzyskać identyfikator miejsca, wywołując Place.getId() Usługa autouzupełniania miejsc zwraca także identyfikator każdego miejsca pasującego do podanego zapytania. i filtrować. Można zapisać identyfikator miejsca i użyć go do pobrania Place możesz zobaczyć go później.

Aby uzyskać miejsce na podstawie identyfikatora, zadzwoń pod numer PlacesClient.fetchPlace() zaliczając FetchPlaceRequest.

Interfejs API zwraca błąd FetchPlaceResponse w Task FetchPlaceResponse zawiera Place obiekt pasujący do podanego identyfikatora miejsca.

Poniższy przykładowy kod pokazuje wywołanie fetchPlace() pod numerem pobrać szczegółowe informacje o wybranym miejscu.

Kotlin



// Define a Place ID.
val placeId = "INSERT_PLACE_ID_HERE"

// Specify the fields to return.
val placeFields = listOf(Place.Field.ID, Place.Field.NAME)

// Construct a request object, passing the place ID and fields array.
val request = FetchPlaceRequest.newInstance(placeId, placeFields)

placesClient.fetchPlace(request)
    .addOnSuccessListener { response: FetchPlaceResponse ->
        val place = response.place
        Log.i(PlaceDetailsActivity.TAG, "Place found: ${place.name}")
    }.addOnFailureListener { exception: Exception ->
        if (exception is ApiException) {
            Log.e(TAG, "Place not found: ${exception.message}")
            val statusCode = exception.statusCode
            TODO("Handle error with given status code")
        }
    }

      

Java


// Define a Place ID.
final String placeId = "INSERT_PLACE_ID_HERE";

// Specify the fields to return.
final List<Place.Field> placeFields = Arrays.asList(Place.Field.ID, Place.Field.NAME);

// Construct a request object, passing the place ID and fields array.
final FetchPlaceRequest request = FetchPlaceRequest.newInstance(placeId, placeFields);

placesClient.fetchPlace(request).addOnSuccessListener((response) -> {
    Place place = response.getPlace();
    Log.i(TAG, "Place found: " + place.getName());
}).addOnFailureListener((exception) -> {
    if (exception instanceof ApiException) {
        final ApiException apiException = (ApiException) exception;
        Log.e(TAG, "Place not found: " + exception.getMessage());
        final int statusCode = apiException.getStatusCode();
        // TODO: Handle error with given status code.
    }
});

      

Uzyskaj stan „Otwarty”

PlacesClient.isOpen(IsOpenRequest request) zwraca obiekt IsOpenResponse wskazujący, czy dane miejsce obecnie otwarte zgodnie z godziną określoną podczas rozmowy.

Ta metoda przyjmuje pojedynczy argument typu IsOpenRequest, który zawiera:

  • Place lub ciąg znaków określający identyfikator miejsca.
  • Opcjonalna wartość czasu określająca czas w milisekundach od 1970-01-01T00:00:00Z. Jeśli nie podasz żadnej godziny, domyślną wartością będzie teraz.

Ta metoda wymaga, aby w obiekcie Place znajdowały się te pola:

  • Place.Field.BUSINESS_STATUS
  • Place.Field.CURRENT_OPENING_HOURS
  • Place.Field.OPENING_HOURS
  • Place.Field.UTC_OFFSET

Jeśli te pola nie są podane w obiekcie Place lub jeśli podasz identyfikator miejsca, metoda wykorzystuje PlacesClient.fetchPlace(). aby je pobrać. Więcej informacji o tworzeniu obiektu Place z wymaganymi polami Więcej informacji: Szczegóły miejsca.

Poniższy przykład pokazuje, czy miejsce jest obecnie otwarte. W tym przykładzie przekażesz tylko identyfikator miejsca do isOpen():

Kotlin



val isOpenCalendar: Calendar = Calendar.getInstance()
val placeId = "ChIJD3uTd9hx5kcR1IQvGfr8dbk"

val request: IsOpenRequest = try {
    IsOpenRequest.newInstance(placeId, isOpenCalendar.timeInMillis)
} catch (e: IllegalArgumentException) {
    e.printStackTrace()
    return
}
val isOpenTask: Task<IsOpenResponse> = placesClient.isOpen(request)
isOpenTask.addOnSuccessListener { response ->
    val isOpen = response.isOpen
}
// ...

      

Java


@NonNull
Calendar isOpenCalendar = Calendar.getInstance();
String placeId = "ChIJD3uTd9hx5kcR1IQvGfr8dbk";
IsOpenRequest isOpenRequest;

try {
    isOpenRequest = IsOpenRequest.newInstance(placeId, isOpenCalendar.getTimeInMillis());
} catch (IllegalArgumentException e) {
    e.printStackTrace();
    return;
}

Task<IsOpenResponse> placeTask = placesClient.isOpen(isOpenRequest);

placeTask.addOnSuccessListener(
        (response) ->
                isOpen = response.isOpen());
// ...

      

Następny przykład pokazuje wywoływanie funkcji isOpen() w miejscu, w którym przekazujesz obiekt Place. Obiekt Place musi zawierać prawidłowy identyfikator miejsca:

Kotlin



val isOpenCalendar: Calendar = Calendar.getInstance()
var place: Place
val placeId = "ChIJD3uTd9hx5kcR1IQvGfr8dbk"
// Specify the required fields for an isOpen request.
val placeFields: List<Place.Field> = listOf(
    Place.Field.BUSINESS_STATUS,
    Place.Field.CURRENT_OPENING_HOURS,
    Place.Field.ID,
    Place.Field.OPENING_HOURS,
    Place.Field.UTC_OFFSET
)

val placeRequest: FetchPlaceRequest =
    FetchPlaceRequest.newInstance(placeId, placeFields)
val placeTask: Task<FetchPlaceResponse> = placesClient.fetchPlace(placeRequest)
placeTask.addOnSuccessListener { placeResponse ->
    place = placeResponse.place

    val isOpenRequest: IsOpenRequest = try {
        IsOpenRequest.newInstance(place, isOpenCalendar.timeInMillis)
    } catch (e: IllegalArgumentException) {
        e.printStackTrace()
        return@addOnSuccessListener
    }
    val isOpenTask: Task<IsOpenResponse> = placesClient.isOpen(isOpenRequest)
    isOpenTask.addOnSuccessListener { isOpenResponse ->
        val isOpen = isOpenResponse.isOpen
    }
    // ...
}
// ...

      

Java


@NonNull
Calendar isOpenCalendar = Calendar.getInstance();
String placeId = "ChIJD3uTd9hx5kcR1IQvGfr8dbk";
// Specify the required fields for an isOpen request.
List<Place.Field> placeFields = new ArrayList<>(Arrays.asList(
        Place.Field.BUSINESS_STATUS,
        Place.Field.CURRENT_OPENING_HOURS,
        Place.Field.ID,
        Place.Field.OPENING_HOURS,
        Place.Field.UTC_OFFSET
));

FetchPlaceRequest request = FetchPlaceRequest.newInstance(placeId, placeFields);
Task<FetchPlaceResponse> placeTask = placesClient.fetchPlace(request);

placeTask.addOnSuccessListener(
        (placeResponse) -> {
            Place place = placeResponse.getPlace();
            IsOpenRequest isOpenRequest;

            try {
                isOpenRequest = IsOpenRequest.newInstance(place, isOpenCalendar.getTimeInMillis());
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
                return;
            }
            Task<IsOpenResponse> isOpenTask = placesClient.isOpen(isOpenRequest);

            isOpenTask.addOnSuccessListener(
                    (isOpenResponse) -> isOpen = isOpenResponse.isOpen());
            // ...
        });
// ...

      

Wyświetl atrybucję w swojej aplikacji

Gdy aplikacja wyświetla informacje o miejscu, w tym opinie o nim, musi też wyświetlać żadnych informacji o autorze. Więcej informacji: atrybucje.

Więcej informacji o identyfikatorach miejsc

Identyfikator miejsca używany w pakiecie SDK Miejsc dla Androida to ten sam identyfikator tak jak w interfejsie Places API. Każdy identyfikator miejsca może odnosić się tylko do jednego miejsca, ale jedno miejsce może mieć ich więcej jeden identyfikator miejsca. Istnieją też inne okoliczności, które mogą spowodować, że dane miejsce uzyskać nowy identyfikator miejsca. Może się tak na przykład zdarzyć, gdy firma przeniesie się do nowego lokalizacji.

Zamawiając miejsce, podając jego identyfikator, masz pewność, że w odpowiedzi otrzymasz zawsze to samo miejsce (jeśli miejsce ). Pamiętaj jednak, że odpowiedź może zawierać identyfikator miejsca, który inny niż w prośbie.

Więcej informacji: omówienie identyfikatora miejsca.