Una solicitud de Nearby Search (nueva) toma como entrada la región en la que se buscará, especificada como un círculo, definido por las coordenadas de latitud y longitud del punto central del círculo y el radio en metros. La solicitud muestra una lista de lugares coincidentes, cada uno representado por un
GMSPlace
objeto, dentro del área de búsqueda especificada.
De forma predeterminada, la respuesta contiene lugares de todos los tipos dentro del área de búsqueda. De manera opcional, puedes filtrar la respuesta especificando una lista de tipos de lugares para incluir o excluir explícitamente de la respuesta. Por ejemplo, puedes especificar que se incluyan solo aquellos lugares en la respuesta que sean de tipo "restaurante", "panadería" y "cafetería", o excluir todos los lugares de tipo "escuela".
Solicitudes de Nearby Search (nueva)
Para realizar una solicitud de Nearby Search, llama a
GMSPlacesClient searchNearbyWithRequest:,
y pasa un objeto
GMSPlaceSearchNearbyRequest
que defina los parámetros de la solicitud y un método de devolución de llamada, de tipo
GMSPlaceSearchNearbyResultCallback,
para controlar la respuesta.
El objeto GMSPlaceSearchNearbyRequest especifica todos los
obligatorios y opcionales
parámetros de la solicitud. Entre los parámetros obligatorios, se incluyen los siguientes:
- La lista de campos que se mostrarán en el
GMSPlaceobjeto, también llamada máscara de campo, según lo defineGMSPlaceProperty. Si no especificas al menos un campo en la lista de campos o si omites la lista de campos, la llamada muestra un error. - La restricción de ubicación, es decir, el círculo que define el área de búsqueda.
En este ejemplo de solicitud de Nearby Search, se especifica que los objetos GMSPlace de respuesta
contengan el nombre del lugar (GMSPlacePropertyName) y las coordenadas del lugar
(GMSPlacePropertyCoordinate) para cada objeto GMSPlace en los resultados de la búsqueda. También filtra la respuesta para mostrar solo los lugares de tipo "restaurante" y "cafetería".
SDK de Places para Swift
let restriction = CircularCoordinateRegion(center: CLLocationCoordinate2DMake(37.7937, -122.3965), radius: 500) let searchNearbyRequest = SearchNearbyRequest( locationRestriction: restriction, placeProperties: [ .name, .coordinate], includedTypes: [ .restaurant, .cafe ], ) switch await placesClient.searchNearby(with: searchNearbyRequest) { case .success(let places): // Handle places case .failure(let placesError): // Handle error }
Swift
// Array to hold the places in the response var placeResults: [GMSPlace] = [] // Define the search area as a 500 meter diameter circle in San Francisco, CA. let circularLocationRestriction = GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(37.7937, -122.3965), 500) // Specify the fields to return in the GMSPlace object for each place in the response. let placeProperties = [GMSPlaceProperty.name, GMSPlaceProperty.coordinate].map {$0.rawValue} // Create the GMSPlaceSearchNearbyRequest, specifying the search area and GMSPlace fields to return. var request = GMSPlaceSearchNearbyRequest(locationRestriction: circularLocationRestriction, placeProperties: placeProperties) let includedTypes = ["restaurant", "cafe"] request.includedTypes = includedTypes let callback: GMSPlaceSearchNearbyResultCallback = { [weak self] results, error in guard let self, error == nil else { if let error { print(error.localizedDescription) } return } guard let results = results as? [GMSPlace] else { return } placeResults = results } GMSPlacesClient.shared().searchNearby(with: request, callback: callback)
Objective-C
// Array to hold the places in the response _placeResults = [NSArray array]; // Define the search area as a 500 meter diameter circle in San Francisco, CA. id<GMSPlaceLocationRestriction> circularLocation = GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(37.7937, -122.3965), 500); // Create the GMSPlaceSearchNearbyRequest, specifying the search area and GMSPlace fields to return. GMSPlaceSearchNearbyRequest *request = [[GMSPlaceSearchNearbyRequest alloc] initWithLocationRestriction:circularLocation placeProperties:@[ GMSPlacePropertyName, GMSPlacePropertyCoordinate ]]; // Set the place types to filter on. NSArray<NSString *> *includedTypes = @[ @"restaurant", @"cafe" ]; request.includedTypes = [[NSMutableArray alloc] initWithArray:includedTypes]; [_placesClient searchNearbyWithRequest:request callback:^(NSArray<GMSPlace *> *_Nullable places, NSError *_Nullable error) { if (error != nil) { NSLog(@"An error occurred %@", [error localizedDescription]); return; } else { // Get list of places. _placeResults = places; } } ];
Respuestas de Nearby Search
La API de Nearby Search muestra un array de coincidencias en forma deGMSPlace
objetos, con un GMSPlace objeto por lugar coincidente.
Obtén el estado de apertura
El objeto GMSPlacesClient contiene una función miembro llamada isOpenWithRequest (isOpenRequest en Swift y isPlaceOpenRequest en GooglePlacesSwift) que muestra una respuesta que indica si el lugar está abierto en este momento, según la hora especificada en la llamada.
Este método toma un solo argumento de tipo GMSPlaceIsOpenWithRequest que contiene lo siguiente:
- Un objeto
GMSPlaceo una cadena que especifica un ID de lugar. Para obtener más información sobre cómo crear el objeto Place con los campos necesarios, consulta Detalles del lugar.
- Un objeto
NSDate(Obj-C) oDate(Swift) opcional que especifica la hora que deseas verificar. Si no se especifica la hora, el valor predeterminado es ahora. - Un método
GMSPlaceOpenStatusResponseCallbackpara controlar la respuesta. >
El método GMSPlaceIsOpenWithRequest requiere que se establezcan los siguientes campos en el objeto GMSPlace:
GMSPlacePropertyUTCOffsetMinutesGMSPlacePropertyBusinessStatusGMSPlacePropertyOpeningHoursGMSPlacePropertyCurrentOpeningHoursGMSPlacePropertySecondaryOpeningHours
Si estos campos no se proporcionan en el objeto Place o si pasas un ID de lugar, el método usa GMSPlacesClient GMSFetchPlaceRequest: para recuperarlos.
Respuesta de isOpenWithRequest
isOpenWithRequest muestra un objeto GMSPlaceIsOpenResponse que contiene un valor booleano llamado status que indica si la empresa está abierta, cerrada o si el estado es desconocido.
| Idioma | Valor si está abierto | Valor si está cerrado | Valor si el estado es desconocido |
|---|---|---|---|
| Places Swift | true |
false |
nil |
| Swift | .open |
.closed |
.unknown |
| Objective-C | GMSPlaceOpenStatusOpen |
GMSPlaceOpenStatusClosed |
GMSPlaceOpenStatusUnknown |
Facturación de isOpenWithRequest
- Los campos
GMSPlacePropertyUTCOffsetMinutesyGMSPlacePropertyBusinessStatusse cobran según el SKU de Basic Data. El resto de los horarios de apertura se cobran según el SKU de Place Details Enterprise. - Si tu objeto
GMSPlaceya tiene estos campos de una solicitud anterior, no se te volverá a cobrar.
Ejemplo: Realiza una solicitud de GMSPlaceIsOpenWithRequest
En el siguiente ejemplo, se muestra cómo inicializar un GMSPlaceIsOpenWithRequest dentro de un objeto GMSPlace existente.
SDK de Places para Swift
let isOpenRequest = IsPlaceOpenRequest(place: place) switch await placesClient.isPlaceOpen(with: isOpenRequest) { case .success(let isOpenResponse): switch isOpenResponse.status { case true: // Handle open case false: // Handle closed case nil: // Handle unknown case .failure(let placesError): // Handle error }
Swift
let isOpenRequest = GMSPlaceIsOpenRequest(place: place, date: nil) GMSPlacesClient.shared().isOpen(with: isOpenRequest) { response, error in if let error = error { // Handle Error } switch response.status { case .open: // Handle open case .closed: // Handle closed case .unknown: // Handle unknown } }
Objective-C
GMSPlaceIsOpenRequest *isOpenRequest = [[GMSPlaceIsOpenRequest alloc] initWithPlace:place date:nil]; [[GMSPlacesClient sharedClient] isOpenWithRequest:isOpenRequest callback:^(GMSPlaceIsOpenResponse response, NSError *_Nullable error) { if (error) { // Handle error } switch (response.status) { case GMSPlaceOpenStatusOpen: // Handle open case GMSPlaceOpenStatusClosed: // Handle closed case GMSPlaceOpenStatusUnknown: // Handle unknown } }];
Parámetros obligatorios
Usa el objeto GMSPlaceSearchNearbyRequest para especificar los parámetros obligatorios de la búsqueda.
-
Lista de campos
Cuando solicitas detalles del lugar, debes especificar los datos que se mostrarán en el
GMSPlaceobjeto para el lugar como una máscara de campo. Para definir la máscara de campo, pasa un array de valores deGMSPlacePropertyal objetoGMSPlaceSearchNearbyRequest. El uso de campos enmascarados es una práctica de diseño recomendada para garantizar que no solicites datos innecesarios, lo que ayuda a evitar tiempos de procesamiento y cargos de facturación adicionales.Especifica uno o más de los siguientes campos:
Los siguientes campos activan el SKU de Nearby Search Pro:
GMSPlacePropertyAddressComponents
GMSPlacePropertyBusinessStatus
GMSPlacePropertyCoordinate
GMSPlacePropertyFormattedAddress
GMSPlacePropertyName
GMSPlacePropertyIconBackgroundColor
GMSPlacePropertyIconImageURL
GMSPlacePropertyPhotos
GMSPlacePropertyPlaceID
GMSPlacePropertyPlusCode
GMSPlacePropertyTypes
GMSPlacePropertyUTCOffsetMinutes
GMSPlacePropertyViewport
GMSPlacePropertyWheelchairAccessibleEntrancePara obtener una lista completa de los campos y sus SKUs asociados, consulta Campos de datos de Place (nuevo).
Los siguientes campos activan el SKU de Nearby Search Enterprise:
GMSPlacePropertyCurrentOpeningHours
GMSPlacePropertySecondaryOpeningHours
GMSPlacePropertyPhoneNumber
GMSPlacePropertyPriceLevel
GMSPlacePropertyRating
GMSPlacePropertyOpeningHours
GMSPlacePropertyUserRatingsTotal
GMSPlacePropertyWebsitePara obtener una lista completa de los campos y sus SKUs asociados, consulta Campos de datos de Place (nuevo).
Los siguientes campos activan el SKU de Nearby Search Enterprise Plus:
GMSPlacePropertyCurbsidePickup
GMSPlacePropertyDelivery
GMSPlacePropertyDineIn
GMSPlacePropertyEditorialSummary
GMSPlacePropertyReservable
GMSPlacePropertyReviews
GMSPlacePropertyServesBeer
GMSPlacePropertyServesBreakfast
GMSPlacePropertyServesBrunch
GMSPlacePropertyServesDinner
GMSPlacePropertyServesLunch
GMSPlacePropertyServesVegetarianFood
GMSPlacePropertyServesWine
GMSPlacePropertyTakeoutPara obtener una lista completa de los campos y sus SKUs asociados, consulta Campos de datos de Place (nuevo).
En el siguiente ejemplo, se pasa una lista de dos valores de campo para especificar que el objeto
GMSPlaceque muestra una solicitud contiene los camposnameyplaceID:SDK de Places para Swift
// Specify the place data types to return. let fields: [PlaceProperty] = [.placeID, .displayName]
Swift
// Specify the place data types to return. let fields: [GMSPlaceProperty] = [.placeID, .name]
Objective-C
// Specify the place data types to return. NSArray<GMSPlaceProperty *> *fields = @[GMSPlacePropertyPlaceID, GMSPlacePropertyName];
-
locationRestriction
Un
GMSPlaceLocationRestrictionobjeto que define la región en la que se buscará, especificada como un círculo, definido por el punto central y el radio en metros. El radio debe estar comprendido entre 0.0 y 50000.0, ambos incluidos. El radio predeterminado es 0.0. Debes configurarlo en tu solicitud con un valor mayor que 0.0.
Parámetros opcionales
Usa el objeto GMSPlaceSearchNearbyRequest para especificar los parámetros opcionales de la búsqueda.
-
includedTypes/excludedTypes, includedPrimaryTypes/excludedPrimaryTypes
Te permite especificar una lista de tipos de tipos Tabla A que se usa para filtrar los resultados de la búsqueda. Se pueden especificar hasta 50 tipos en cada categoría de restricción de tipo.
Un lugar solo puede tener un único tipo primario de tipos Tabla A asociado con él. Por ejemplo, el tipo primario podría ser
"mexican_restaurant"o"steak_house". UsaincludedPrimaryTypesyexcludedPrimaryTypespara filtrar los resultados según el tipo primario de un lugar.Un lugar también puede tener varios valores de tipo de tipos Tabla A asociados. Por ejemplo, un restaurante podría tener los siguientes tipos:
"seafood_restaurant","restaurant","food","point_of_interest","establishment". UsaincludedTypesyexcludedTypespara filtrar los resultados según la lista de tipos asociados con un lugar.Cuando especificas un tipo primario general, como
"restaurant"o"hotel", la respuesta puede contener lugares con un tipo primario más específico que el especificado. Por ejemplo, especificas incluir un tipo primario de"restaurant". La respuesta puede contener lugares con un tipo primario de"restaurant", pero también puede contener lugares con un tipo primario más específico, como"chinese_restaurant"o"seafood_restaurant".Si se especifica una búsqueda con varias restricciones de tipo, solo se muestran los lugares que satisfacen todas las restricciones. Por ejemplo, si especificas
{"includedTypes": ["restaurant"], "excludedPrimaryTypes": ["steak_house"]}, los lugares que se muestran proporcionan servicios relacionados con"restaurant", pero no operan principalmente como"steak_house".includedTypes
Es una lista de los tipos de lugares de la Tabla A en los que se buscará. Si se omite este parámetro, se muestran lugares de todos los tipos.
excludedTypes
Es una lista de tipos de lugares de la Tabla A que se excluirán de una búsqueda.
Si especificas
includedTypes(como"school") yexcludedTypes(como"primary_school") en la solicitud, la respuesta incluye lugares que se clasifican como"school"pero no como"primary_school". La respuesta incluye lugares que coinciden con al menos uno de losincludedTypesy ninguno de losexcludedTypes.Si hay algún tipo en conflicto, como un tipo que aparece en
includedTypesyexcludedTypes, se muestra un errorINVALID_REQUEST.includedPrimaryTypes
Es una lista de tipos de lugares primarios de la Tabla A que se incluirán en una búsqueda.
excludedPrimaryTypes
Es una lista de tipos de lugares primarios de la Tabla A que se excluirán de una búsqueda.
Si hay algún tipo primario en conflicto, como un tipo que aparece en
includedPrimaryTypesyexcludedPrimaryTypes, se muestra un errorINVALID_ARGUMENT. -
maxResultCount
Especifica la cantidad máxima de resultados de lugares que se mostrarán. Debe estar comprendido entre 1 y 20 (predeterminado), ambos incluidos.
-
rankPreference
Es el tipo de clasificación que se usará. Si se omite este parámetro, los resultados se clasifican por popularidad. Puede ser uno de los siguientes:
.popularity(predeterminado) Ordena los resultados según su popularidad..distanceOrdena los resultados en orden ascendente según su distancia desde la ubicación especificada.
-
regionCode
Es el código de región que se usa para dar formato a la respuesta, especificado como un valor de código CLDR de dos caracteres. No hay un valor predeterminado.
Si el nombre del país del campo
formattedAddressen la respuesta coincide con elregionCode, se omite el código de país deformattedAddress. Este parámetro no tiene ningún efecto enadrFormatAddress, que siempre incluye el nombre del país, ni enshortFormattedAddress, que nunca lo incluye.La mayoría de los códigos CLDR son idénticos a los códigos ISO 3166-1, con algunas excepciones notables. Por ejemplo, el ccTLD del Reino Unido es "uk" (.co.uk), mientras que su código ISO 3166-1 es "gb" (técnicamente para la entidad de "El Reino Unido de Gran Bretaña e Irlanda del Norte"). El parámetro puede afectar los resultados según la ley aplicable.
Mostrar atribuciones en tu aplicación
Cuando tu aplicación muestra información obtenida de
GMSPlacesClient,
como fotos y opiniones, también debe mostrar las atribuciones requeridas.
Por ejemplo, la propiedad reviews del objeto GMSPlacesClient
contiene un array de hasta cinco
GMSPlaceReview
objetos. Cada objeto GMSPlaceReview puede contener atribuciones y atribuciones de autor.
Si muestras la opinión en tu aplicación, también debes mostrar cualquier atribución o atribución de autor.
Para obtener más información, consulta la documentación sobre las atribuciones.