Place Details

Selecciona la plataforma: Android iOS JavaScript Servicio web

El SDK de Places para iOS le proporciona a tu app información enriquecida sobre los lugares, incluidos el nombre y la dirección del lugar, la ubicación geográfica especificada como coordenadas de latitud y longitud, el tipo de lugar (como un club nocturno, una tienda de mascotas, un museo) y mucho más. Para acceder a esta información de un lugar específico, puedes usar el ID de lugar, un identificador estable que identifica un lugar de forma exclusiva.

Detalles del lugar

La clase GMSPlace proporciona información sobre un lugar específico. Puedes obtener un objeto GMSPlace de las siguientes maneras:

Cuando solicitas un lugar, debes especificar qué tipos de datos del lugar deseas mostrar. Para ello, pasa un GMSPlaceField y especifica los tipos de datos que se mostrarán. Es una consideración importante, ya que afectará el costo de cada solicitud.

Como los resultados de datos de lugar no pueden estar vacíos, solo se mostrarán resultados de lugares con datos (por ejemplo, si un lugar solicitado no tiene fotos, el campo photos no aparecerá en el resultado).

En el siguiente ejemplo, se pasa una lista de dos valores de campo para especificar los datos que muestra una solicitud:

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

Obtén más información sobre los campos de lugares. Si deseas consultar más detalles sobre cómo se facturan las solicitudes de datos de Places, consulta Uso y facturación.

La clase GMSPlace puede contener los siguientes datos de lugar:

  • name: es el nombre del lugar.
  • editorialSummary: Proporciona una descripción simple de un lugar.
  • placeID: Es el identificador textual del lugar. Obtén más información sobre los IDs de lugar en el resto de esta página.
  • coordinate: Es la ubicación geográfica del lugar, especificada como coordenadas de latitud y longitud.
  • phoneNumber: Es el número de teléfono del lugar en formato internacional.
  • formattedAddress: Es la dirección de esta ubicación en lenguaje natural.

    A menudo, esta dirección equivale a la dirección postal. Ten en cuenta que, en algunos países, como los que integran el Reino Unido, no se permite la distribución de direcciones postales verdaderas debido a restricciones de licencia.

    La dirección con formato está compuesta, de manera lógica, por uno o más componentes de dirección. Por ejemplo, la dirección "111 8th Avenue, New York, NY" consta de los siguientes componentes: "111" (número de la calle), "8th Avenue" (calle), "New York" (ciudad) y "NY" (estado de los EE.UU.).

    No analices la dirección con formato por vía programática. En cambio, utiliza los componentes individuales de la dirección, que la respuesta de la API incluye además del campo de dirección con formato.

  • openingHours: Indica el horario de atención del lugar (como se representa en GMSOpeningHours). Llama a GMSOpeningHours.weekdayText para obtener una lista de cadenas localizadas del horario de atención diario de la semana. Llama a GMSOpeningHours.Periods para mostrar una lista de GMSPeriod con información más detallada equivalente a los datos proporcionados por weekdayText. Nota: Si un lugar está siempre abierto, el período se representa como domingo a medianoche y el valor de closeEvent es nulo.
  • currentOpeningHours y secondaryOpeningHours: Son campos que toman en cuenta cambios temporales y feriados en el horario de un lugar.
  • addressComponents: Es un array de objetos GMSAddressComponent que representa los componentes de la dirección de un lugar. El propósito de estos componentes es extraer información estructurada sobre la dirección de un lugar, por ejemplo, para encontrar la ciudad en la que se encuentra un lugar. No uses estos componentes para dar formato a las direcciones. En su lugar, utiliza la propiedad formattedAddress, que proporciona una dirección con formato localizada.

    Ten en cuenta lo siguiente acerca del array addressComponents:

    • El array de componentes de dirección puede incluir más componentes que formattedAddress.
    • El array no necesariamente incluye todas las entidades políticas que contienen una dirección, además de las incluidas en formattedAddress.
    • No se garantiza que el formato de la respuesta permanezca igual entre las solicitudes. En particular, la cantidad de addressComponents varía según la dirección solicitada y puede cambiar con el tiempo para la misma dirección. Un componente puede cambiar de posición en el array. El tipo de componente puede cambiar. Es posible que falte un componente en particular en una respuesta posterior.
  • userRatingsTotal: Representa cuántas opiniones componen la calificación del lugar.

La clase GMSPlace contiene las siguientes funciones de miembro:

  • isOpen calcula si un lugar está abierto en un momento dado, según openingHours y UTCOffsetMinutes, y la fecha y hora actuales.
  • isOpenAtDate calcula si un lugar está abierto en una fecha determinada, según openingHours y UTCOffsetMinutes, y la fecha y hora actuales.
  • Cuando se usen estas funciones para obtener los horarios o las fechas, la solicitud original fetchPlaceFromPlaceID: o findPlaceLikelihoodsFromUserLocationWithPlaceFields: debe especificar los campos GMSPlaceFieldOpeningHours y GMSPlaceFieldUTCOffsetMinutes. Si falta alguno de estos campos, el objeto GMSPlace resultante no contendrá horarios ni fechas de apertura, y la llamada mostrará GMSPlaceOpenStatusUnknown. Para garantizar resultados precisos, solicita los campos GMSPlaceFieldBusinessStatus y GMSPlaceFieldUTCOffsetMinutes en la solicitud de lugar original. Si no se solicita, se supone que la empresa está operativa.

    Consulta este video para obtener información sobre cómo usar isOpen con Place Details.

Disfruta de horas excepcionales

Si bien los horarios de atención normales se obtienen hasta el openingHours, currentOpeningHours y secondaryOpeningHours admiten cambios temporales y durante feriados. Los horarios excepcionales en estos días especiales se pueden filtrar y presentar si están disponibles.

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
    }
}

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 iOS, puedes recuperar el ID de un lugar desde un objeto GMSPlace. Puedes almacenar el ID de lugar y usarlo para recuperar el objeto GMSPlace más tarde.

Para obtener un lugar por ID, llama a GMSPlacesClient fetchPlaceFromPlaceID: y pasa los siguientes parámetros:

  • Es una cadena que contiene un ID de lugar.
  • Uno o más objetos GMSPlaceField que especifican los tipos de datos que se mostrarán.
  • Un token de sesión si se realiza la llamada para concluir una consulta de autocompletado. De lo contrario, pasa nil.
  • Un GMSPlaceResultCallback para controlar el resultado.

La API invoca el método de devolución de llamada especificado y pasa un objeto GMSPlace. Si no se encuentra el sitio, el objeto de sitio es 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]);
  }
}];

Mostrar atribuciones en tu aplicación

Cuando tu app muestra información obtenida de GMSPlacesClient lookUpPlaceID:callback:, también debe mostrar atribuciones. Consulta la documentación sobre las atribuciones.

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

El ID de lugar que se usa en el SDK de Places para iOS es el mismo identificador que se usa en la API de Places, el SDK de Places para Android y otras API de Google.

Cada ID de lugar puede hacer referencia a un solo lugar, pero un lugar puede tener más de un ID de lugar.

Existen circunstancias que pueden hacer que un sitio obtenga un nuevo ID. Esto, por ejemplo, puede suceder si un negocio se muda a otro lugar.

Cuando solicitas un lugar especificando 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 diferente del que aparece en tu solicitud.

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