Place Details

Selecciona la plataforma: Android iOS JavaScript Servicio web

El SDK de Places para Android le brinda a tu app información valiosa información sobre lugares, como el nombre y la dirección, la ubicación ubicación especificada como coordenadas de latitud y longitud, el tipo de lugar (como como un club nocturno, una tienda de mascotas, un museo), entre otros. Para acceder a esta información de una puedes usar el id. de sitio, un identificador estable que identifica de forma exclusiva identifica un lugar.

Detalles del lugar

El Place proporciona información sobre un lugar específico. Puedes obtener un Place objeto de las siguientes maneras:

Cuando solicitas un lugar, debes especificar qué datos del lugar deseas devolver. Para ello, pasa una lista de Place.Field de salida que especifican los datos que se deben mostrar. Esta lista es importante porque afecta costo de cada solicitud.

Debido a que los resultados de datos de lugares no pueden estar vacíos, solo se muestran resultados de lugares con datos que se devuelve (por ejemplo, si un lugar solicitado no tiene fotos, el valor photos no estará presente en el resultado).

En el siguiente ejemplo, se pasa una lista de tres Valores Place.Field para especificar los datos que muestra una solicitud:

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);
  

Accede a los campos de datos de objetos de Places

Después de obtener el objeto Place, usa sus métodos para acceder al campos de datos especificados en la solicitud. Si falta el campo en el objeto Place, el método relacionado muestra un valor nulo. A continuación, se muestran ejemplos de algunos de los métodos disponibles. Para obtener una lista completa de todos los métodos, consulta la Place Referencia de la API.

  • getAddress(): la dirección del lugar, en un formato legible por humanos de un conjunto de datos tengan un formato común.
  • getAddressComponents()-A List de componentes de dirección para este lugar. Estos componentes se proporcionan propósito de extraer información estructurada sobre la dirección de un lugar, por ejemplo de búsqueda de la ciudad en la que se encuentra un lugar. No utilices componentes para dar formato a las direcciones; en su lugar, llama a getAddress(), que proporciona una dirección con formato localizada.
  • getId(): Es el identificador textual del lugar. Leído para obtener más información sobre los IDs de lugar en el resto de esta página.
  • getLatLng(): es la ubicación geográfica del lugar. especificadas como coordenadas de latitud y longitud.
  • getName(): es el nombre del lugar.
  • getOpeningHours(): el OpeningHours del lugar. Llama a OpeningHours.getWeekdayText() para mostrar un una lista de cadenas que representan las horas de apertura y cierre de cada día de la semana. Llama a OpeningHours.getPeriods() para que se muestre una lista de Objetos period con información más detallada que es equivalentes a los datos proporcionados por getWeekdayText().

    El objeto Place también contiene el getCurrentOpeningHours() método que muestra el horario de atención de un lugar durante los próximos siete días getSecondaryOpeningHours() que muestra el horario secundario de funcionamiento de un lugar durante los próximos siete días.

  • isOpen(): valor booleano que indica si el lugar es abierto actualmente. Si no se especifica la hora, el valor predeterminado será ahora. isOpen solo se mostrarán si tanto Place.Field.UTC_OFFSET como Hay Place.Field.OPENING_HOURS disponibles. Para garantizar una exactitud resultados, solicita los Place.Field.BUSINESS_STATUS y Campos Place.Field.UTC_OFFSET en tu solicitud de lugar original. Si no se solicita, se supone que la empresa está operativa. Mira este video para aprender a usarlas isOpen con Place Details.

Algunos ejemplos simples:

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();

      

Obtener un sitio por id.

Un ID de lugar es un identificador textual que identifica de forma exclusiva un lugar. En el SDK de Places para Android, puedes recuperar el ID de un sitio llamando Place.getId() El Servicio Place Autocomplete También muestra un ID de lugar para cada sitio que coincida con la consulta de búsqueda proporcionada. y filtrar. Puedes almacenar el id. de sitio y usarlo para recuperar la Place de ese objeto de nuevo más adelante.

Para obtener un lugar por ID, llama a PlacesClient.fetchPlace(): pasar un FetchPlaceRequest

La API devuelve un FetchPlaceResponse en una Task El FetchPlaceResponse contiene un Place que coincida con el ID de lugar proporcionado.

En el siguiente ejemplo de código, se muestra cómo llamar a fetchPlace() para obtener detalles del lugar especificado.

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.
    }
});

      

Obtener estado de apertura

El PlacesClient.isOpen(IsOpenRequest request) muestra un objeto IsOpenResponse que indica si el lugar se abiertos actualmente según el horario especificado en la llamada.

Este método toma un solo argumento de tipo IsOpenRequest que contiene lo siguiente:

  • Un objeto Place o una cadena que especifica un ID de lugar.
  • Un valor de tiempo opcional que especifica el tiempo en milisegundos desde 1970-01-01T00:00:00Z. Si no se especifica la hora, el valor predeterminado será ahora.

Este método requiere que existan los siguientes campos en el objeto Place:

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

Si estos campos no se proporcionan en el objeto Place o si pasas un ID de lugar, el método usa PlacesClient.fetchPlace() para recuperarlos. Para obtener más información sobre cómo crear el objeto Place con los campos necesarios, consulta Detalles del lugar.

En el siguiente ejemplo, se determina si un lugar se encuentra abierto en la actualidad. En este ejemplo, solo pasas el ID de lugar como 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());
// ...

      

En el siguiente ejemplo, se muestra cómo llamar a isOpen(), en el que pasas un objeto Place. El objeto Place debe contener un ID de lugar válido:

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());
            // ...
        });
// ...

      

Mostrar atribuciones en tu aplicación

Cuando tu aplicación muestra información sobre lugares, incluidas opiniones sobre lugares, también debe mostrar ninguna atribución. Para obtener más información, consulta atribuciones.

Más información sobre los id. de sitio

El ID de lugar que se usa en el SDK de Places para Android es el mismo identificador como se usa en la API de Places. Cada id. de sitio puede hacer referencia a un solo sitio, pero un solo sitio puede tener más. de un ID de lugar. Hay otras circunstancias que pueden hacer que un lugar obtener un nuevo ID de lugar. Por ejemplo, esto puede suceder si una empresa se traslada a un nuevo ubicación.

Cuando solicitas un sitio mediante la especificación de un ID de lugar, puedes estar seguro de que siempre recibirás el mismo lugar en la respuesta (si el lugar aún existe). Sin embargo, ten en cuenta que la respuesta puede contener un ID de lugar que diferente de la que aparece en tu solicitud.

Para obtener más información, consulta la Descripción general de los IDs de lugar.