Una solicitud de Nearby Search (nueva) toma como entrada la región que se buscará
especificado como círculo, definido por las coordenadas de latitud y longitud del punto central de la
y el radio en metros. La solicitud devuelve una lista de los lugares coincidentes, cada uno de ellos representado por un
GMSPlace
dentro del área de búsqueda especificada.
De forma predeterminada, la respuesta contiene lugares de todo tipo dentro del área de búsqueda. Opcionalmente, puedes filtrar la respuesta especificando una lista de tipos de lugares que se incluirán o excluirán de forma explícita respuesta. Por ejemplo, puedes especificar que se incluyan solo los lugares de la respuesta que son de tipo. "restaurante", "panadería" y "cafetería", o bien excluir todos los lugares del tipo "escuela".
Solicitudes de Nearby Search (nuevo)
Llamada para hacer una solicitud de Nearby Search
GMSPlacesClient searchNearbyWithRequest:
,
pasar un
GMSPlaceSearchNearbyRequest
que define los parámetros de la solicitud y un método de devolución de llamada, del tipo
GMSPlaceSearchNearbyResultCallback
,
para manejar la respuesta.
El objeto GMSPlaceSearchNearbyRequest
especifica todos los
obligatorio y opcional
parámetros para la solicitud. Entre los parámetros obligatorios, se incluyen los siguientes:
- La lista de campos que se debe mostrar en el objeto
GMSPlace
, también llamado máscara de campo, como lo defineGMSPlaceProperty
Si no especificas al menos un campo en la lista de campos la lista de campos, entonces la llamada devuelve un error. - La restricción de ubicación, que significa el círculo que define el área de búsqueda.
En este ejemplo de solicitud de búsqueda cercana, se especifica que los objetos GMSPlace
de respuesta
contienen el nombre del lugar (GMSPlacePropertyName
) y las coordenadas del lugar
(GMSPlacePropertyCoordinate
) para cada objeto GMSPlace
en la búsqueda
resultados. También filtra la respuesta para que solo se muestren lugares del tipo “restaurante”. y "cafe".
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; } } ];
GooglePlacesSwift
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 }
Respuestas de Nearby Search
La API de Nearby Search muestra un array de coincidencias en la forma deGMSPlace
objetos, con un objeto GMSPlace
por cada lugar coincidente.
Obtener estado de apertura
El objeto GMSPlacesClient
contiene una función de miembro llamada isOpenWithRequest
(isOpenRequest
en Swift y isPlaceOpenRequest
en GooglePlacesSwift) que muestra una respuesta que indica si el lugar está abierto en ese momento, según el horario especificado en la llamada.
Este método toma un solo argumento de tipo GMSPlaceIsOpenWithRequest
que contiene lo siguiente:
- Un objeto
GMSPlace
o 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 especifique la hora que deseas verificar. Si no se especifica la hora, el valor predeterminado será ahora. - Un método
GMSPlaceOpenStatusResponseCallback
para controlar la respuesta
El método GMSPlaceIsOpenWithRequest
requiere que se configuren los siguientes campos en el objeto GMSPlace
:
GMSPlacePropertyUTCOffsetMinutes
GMSPlacePropertyBusinessStatus
GMSPlacePropertyOpeningHours
GMSPlacePropertyCurrentOpeningHours
GMSPlacePropertySecondaryOpeningHours
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.
isOpenWithRequest
respuesta
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 el sitio está cerrado | Valor si el estado es desconocido |
---|---|---|---|
Swift | .open |
.closed |
.unknown |
Objective-C | GMSPlaceOpenStatusOpen |
GMSPlaceOpenStatusClosed |
GMSPlaceOpenStatusUnknown |
GooglePlacesSwift (versión preliminar) | true |
false |
nil |
Facturación para isOpenWithRequest
- Los campos
GMSPlacePropertyUTCOffsetMinutes
yGMSPlacePropertyBusinessStatus
se cobran según el SKU de Basic Data. El resto del horario de atención se cobra en el SKU de Place Details (Advanced). - Si tu objeto
GMSPlace
ya tiene estos campos de una solicitud anterior, no se te volverá a cobrar.
Ejemplo: Realiza una solicitud GMSPlaceIsOpenWithRequest
En el siguiente ejemplo, se muestra cómo inicializar un elemento GMSPlaceIsOpenWithRequest
dentro de un objeto GMSPlace
existente.
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 } }];
GooglePlacesSwift
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 }
Parámetros obligatorios
Usa el objeto GMSPlaceSearchNearbyRequest
para especificar los parámetros requeridos para
la búsqueda.
-
Lista de campos
Cuando solicitas detalles del lugar, debes especificar los datos para Se devuelve en el objeto
GMSPlace
del lugar como una máscara de campo. Para definir pasa un array de valores desdeGMSPlaceProperty
al objetoGMSPlaceSearchNearbyRequest
. El enmascaramiento de campo es una buena práctica de diseño para garantizar que no solicites datos innecesarios lo que ayuda a evitar tiempos de procesamiento y cargos de facturación innecesarios.Especifica uno o más de los siguientes campos:
Los siguientes campos activan la SKU de Nearby Search (Basic):
GMSPlacePropertyAddressComponents
,GMSPlacePropertyBusinessStatus
,GMSPlacePropertyCoordinate
,GMSPlacePropertyFormattedAddress
,GMSPlacePropertyName
,GMSPlacePropertyIconBackgroundColor
,GMSPlacePropertyIconImageURL
,GMSPlacePropertyPhotos
,GMSPlacePropertyPlaceID
,GMSPlacePropertyPlusCode
,GMSPlacePropertyTypes
,GMSPlacePropertyUTCOffsetMinutes
,GMSPlacePropertyViewport
,GMSPlacePropertyWheelchairAccessibleEntrance
Los siguientes campos activan la SKU de Nearby Search (Advanced):
GMSPlacePropertyCurrentOpeningHours
,GMSPlacePropertySecondaryOpeningHours
,GMSPlacePropertyPhoneNumber
,GMSPlacePropertyPriceLevel
,GMSPlacePropertyRating
,GMSPlacePropertyOpeningHours
,GMSPlacePropertyUserRatingsTotal
,GMSPlacePropertyWebsite
Los siguientes campos activan la SKU de Nearby Search (Preferred):
GMSPlacePropertyCurbsidePickup
,GMSPlacePropertyDelivery
,GMSPlacePropertyDineIn
,GMSPlacePropertyEditorialSummary
,GMSPlacePropertyReservable
,GMSPlacePropertyReviews
,GMSPlacePropertyServesBeer
,GMSPlacePropertyServesBreakfast
,GMSPlacePropertyServesBrunch
,GMSPlacePropertyServesDinner
,GMSPlacePropertyServesLunch
,GMSPlacePropertyServesVegetarianFood
,GMSPlacePropertyServesWine
,GMSPlacePropertyTakeout
En el siguiente ejemplo, se pasa una lista de dos valores de campo para especificar que el objeto
GMSPlace
que muestra una solicitud contiene el Camposname
yplaceID
: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];
GooglePlacesSwift
// Specify the place data types to return. let fields: [PlaceProperty] = [.placeID, .displayName]
-
locationRestriction
Un objeto
GMSPlaceLocationRestriction
que define la región a buscar especificada como un círculo, definida por el punto central y radio en metros. El radio debe ser de entre 0.0 y 50,000.0, inclusive. El radio predeterminado es 0.0 Debes configurarlo en un valor superior a 0.0 en la solicitud.
Parámetros opcionales
Usa el objeto GMSPlaceSearchNearbyRequest
para especificar los parámetros opcionales de
la búsqueda.
-
includeTypes/excludedTypes, includedPrimaryTypes/excludedPrimaryTypes
Te permite especificar una lista de tipos de tipos Se usa la Tabla A para filtrar los resultados de la búsqueda. Se pueden especificar hasta 50 tipos en cada categoría de restricción de tipos.
Un lugar solo puede tener un único tipo principal de los tipos Tabla A asociada con que la modifica. Por ejemplo, el tipo principal podría ser
"mexican_restaurant"
o"steak_house"
. UsaincludedPrimaryTypes
yexcludedPrimaryTypes
para filtrar los resultados el tipo principal de un lugar.Un lugar también puede tener varios valores de tipo de tipos Tabla A asociados con ella. Por ejemplo, un restaurante puede tener los siguientes tipos:
"seafood_restaurant"
,"restaurant"
y"food"
"point_of_interest"
,"establishment"
. UsaincludedTypes
yexcludedTypes
para filtrar los resultados en la lista de tipos asociados con un lugar.Cuando especificas un tipo principal general, como
"restaurant"
o"hotel"
, la respuesta puede contener lugares con un tipo principal más específico que el especificado. Por ejemplo, puedes especificar que se incluya un tipo principal de"restaurant"
La respuesta puede contener sitios con un tipo principal de"restaurant"
, pero la respuesta también puede contener lugares con un tipo principal, como"chinese_restaurant"
o"seafood_restaurant"
.Si se especifica una búsqueda con varias restricciones de tipo, solo los lugares que satisfagan todas las restricciones. Por ejemplo, si especificas
{"includedTypes": ["restaurant"], "excludedPrimaryTypes": ["steak_house"]}
, el Los lugares que se muestran proporcionan servicios relacionados con"restaurant"
, pero no operan principalmente como"steak_house"
.includedTypes
Una lista de los tipos de lugares de Tabla A para buscar. Si se omite este parámetro, se devuelven lugares de todos los tipos.
excludedTypes
Una lista de los tipos de lugares de Tabla A para excluir de un búsqueda.
Si especificas tanto
includedTypes
(como"school"
) comoexcludedTypes
(como"primary_school"
) en la solicitud y, luego, el incluye lugares categorizados como"school"
, pero no como"primary_school"
La respuesta incluye lugares que coinciden con al menos uno de elincludedTypes
y ninguno de losexcludedTypes
.Si hay tipos en conflicto, como uno que aparezca en
includedTypes
yexcludedTypes
, se muestra un errorINVALID_REQUEST
.includedPrimaryTypes
Una lista de los tipos de lugares principales de Tabla A que se debe incluir en una búsqueda.
excludedPrimaryTypes
Una lista de los tipos de lugares principales de Tabla A para excluir de una búsqueda.
Si hay tipos principales en conflicto, como uno que aparezca en ambos
includedPrimaryTypes
yexcludedPrimaryTypes
, un Se muestra el errorINVALID_ARGUMENT
. -
maxResultCount
Especifica la cantidad máxima de resultados de lugares que se mostrarán. Debe ser un valor entre 1 y 20 (predeterminado), ambos incluidos.
-
rankPreference
El tipo de clasificación que se usará. Si se omite este parámetro, los resultados se clasifican por popularidad. Puede ser una de las siguientes opciones:
.popularity
(predeterminado) ordena los resultados según su popularidad..distance
ordena los resultados en forma ascendente por su distancia desde la ubicación especificada.
-
regionCode
El código de región que se usa para dar formato a la respuesta, especificado como una valor de código CLDR de dos caracteres. No hay un valor predeterminado.
Si el nombre del país del campo
formattedAddress
en la respuesta coincide con elregionCode
, el código de país se omite deformattedAddress
. Este parámetro no tiene efecto enadrFormatAddress
, que siempre incluye el país. nombre o enshortFormattedAddress
, que nunca lo incluye.La mayoría de los códigos CLDR son idénticos a códigos ISO 3166-1, con algunas excepciones notables. Por ejemplo, el ccTLD del Reino Unido es “uk” (.co.uk), mientras que el código ISO 3166-1 es "gb" (técnicamente para el del "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
Cuándo muestra la app información obtenida de
GMSPlacesClient
,
como fotos y opiniones, la app 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 muestra la opinión en su aplicación, también debe mostrar cualquier atribución o autor
atribución.
Para obtener más información, consulta la documentación sobre atribuciones.