Pesquisa de local próximo (Novo)

Selecione a plataforma: Android iOS JavaScript Serviço da Web

Uma solicitação do Nearby Search (New) toma como entrada a região a ser pesquisada, especificada como um círculo, definida pelas coordenadas de latitude e longitude do ponto central do círculo e do raio em metros. A solicitação retorna uma lista de lugares correspondentes, cada um representado por um objeto GMSPlace, dentro da área de pesquisa especificada.

Por padrão, a resposta contém locais de todos os tipos na área de pesquisa. Também é possível filtrar a resposta especificando uma lista de tipos de lugar a serem explicitamente incluídos ou excluídos da resposta. Por exemplo, é possível especificar para incluir na resposta apenas os locais que são do tipo "restaurante", "padaria" e "café" ou excluir todos os lugares do tipo "escola".

Solicitações do Nearby Search (novas)

Faça uma solicitação do Nearby Search chamando GMSPlacesClient searchNearbyWithRequest:, transmitindo um objeto GMSPlaceSearchNearbyRequest que define os parâmetros da solicitação e um método de callback do tipo GMSPlaceSearchNearbyResultCallback para processar a resposta.

O objeto GMSPlaceSearchNearbyRequest especifica todos os parâmetros obrigatórios e opcionais para a solicitação. Os parâmetros obrigatórios incluem:

  • A lista de campos a serem retornados no objeto GMSPlace, também chamada de máscara de campo, conforme definido por GMSPlaceProperty. Se você não especificar pelo menos um campo na lista ou omitir a lista, a chamada retornará um erro.
  • A restrição de local, ou seja, o círculo que define a área de pesquisa.

Este exemplo de solicitação de pesquisa nas proximidades especifica que os objetos GMSPlace de resposta contêm o nome do lugar (GMSPlacePropertyName) e as coordenadas (GMSPlacePropertyCoordinate) de cada objeto GMSPlace nos resultados da pesquisa. Ele também filtra a resposta para retornar apenas lugares dos tipos "restaurante" e "café".

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
}

Respostas do Nearby Search

A API Nearby Search retorna uma matriz de correspondências na forma de objetos GMSPlace, com um objeto GMSPlace por lugar correspondente.

Junto com os campos de dados, o objeto GMSPlace na resposta contém as seguintes funções de membro:

  • isOpen calcula se um lugar está aberto no horário especificado.
  • isOpenAtDate calcula se um lugar está aberto em uma determinada data.

Parâmetros obrigatórios

Use o objeto GMSPlaceSearchNearbyRequest para especificar os parâmetros necessários para a pesquisa.

  • Lista de campos

    Ao solicitar detalhes do lugar, você precisa especificar os dados a serem retornados no objeto GMSPlace para o local como uma máscara de campo. Para definir a máscara de campo, transmita uma matriz de valores de GMSPlaceProperty para o objeto GMSPlaceSearchNearbyRequest. O mascaramento de campo é uma boa prática de design para garantir que você não solicite dados desnecessários, o que ajuda a evitar cobranças de faturamento e tempo de processamento desnecessários.

    Especifique um ou mais dos seguintes campos:

    • Os campos a seguir acionam a SKU do Nearby Search (Basic):

      GMSPlacePropertyAddressComponents, GMSPlacePropertyBusinessStatus, GMSPlacePropertyCoordinate, GMSPlacePropertyFormattedAddress, GMSPlacePropertyName, GMSPlacePropertyIconBackgroundColor, GMSPlacePropertyIconImageURL, GMSPlacePropertyPhotos, GMSPlacePropertyPlaceID, GMSPlacePropertyPlusCode, GMSPlacePropertyTypes, GMSPlacePropertyUTCOffsetMinutes, GMSPlacePropertyViewport e GMSPlacePropertyWheelchairAccessibleEntrance

    • Os campos a seguir acionam a SKU do Nearby Search (avançado):

      GMSPlacePropertyCurrentOpeningHours, GMSPlacePropertySecondaryOpeningHours, GMSPlacePropertyPhoneNumber, GMSPlacePropertyPriceLevel, GMSPlacePropertyRating, GMSPlacePropertyOpeningHours, GMSPlacePropertyUserRatingsTotal, GMSPlacePropertyWebsite

    • Os campos a seguir acionam a SKU do Nearby Search (preferencial):

      GMSPlacePropertyCurbsidePickup, GMSPlacePropertyDelivery, GMSPlacePropertyDineIn, GMSPlacePropertyEditorialSummary, GMSPlacePropertyReservable, GMSPlacePropertyReviews, GMSPlacePropertyServesBeer, GMSPlacePropertyServesBreakfast, GMSPlacePropertyServesBrunch, GMSPlacePropertyServesDinner, GMSPlacePropertyServesLunch, GMSPlacePropertyServesVegetarianFood, GMSPlacePropertyServesWine e GMSPlacePropertyTakeout

    O exemplo a seguir transmite uma lista de dois valores de campo para especificar que o objeto GMSPlace retornado por uma solicitação contém os campos name e placeID:

    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

    Um objeto GMSPlaceLocationRestriction que define a região a ser pesquisada especificada como um círculo, definido por ponto central e raio em metros. O raio precisa estar entre 0,0 e 50.000,0. O raio padrão é 0,0. Você precisa definir na sua solicitação um valor maior que 0,0.

Parâmetros opcionais

Use o objeto GMSPlaceSearchNearbyRequest para especificar os parâmetros opcionais da pesquisa.

  • includeTypes/excludedTypes, includedPrimaryTypes/excludedPrimaryTypes

    Permite especificar uma lista de tipos dos tipos da Tabela A usada para filtrar os resultados da pesquisa. Até 50 tipos podem ser especificados em cada categoria de restrição de tipo.

    Um local só pode ter um único tipo principal dos tipos Tabela A associadas a ele. Por exemplo, o tipo principal pode ser "mexican_restaurant" ou "steak_house". Use includedPrimaryTypes e excludedPrimaryTypes para filtrar os resultados no tipo principal de um lugar.

    Um lugar também pode ter vários valores dos tipos Tabela A associados a ele. Por exemplo, um restaurante pode ter os seguintes tipos: "seafood_restaurant", "restaurant", "food", "point_of_interest" e "establishment". Use includedTypes e excludedTypes para filtrar os resultados na lista de tipos associados a um lugar.

    Quando uma pesquisa é especificada com várias restrições de tipo, apenas os lugares que atendem a todas as restrições são retornados. Por exemplo, se você especificar {"includedTypes": ["restaurant"], "excludedPrimaryTypes": ["steak_house"]}, os locais retornados fornecerão serviços relacionados a "restaurant", mas não operam principalmente como um "steak_house".

    includedTypes

    Uma lista dos tipos de lugar da Tabela A para pesquisar. Se esse parâmetro for omitido, locais de todos os tipos serão retornados.

    excludedTypes

    Uma lista de tipos de lugar da Tabela A para excluir de uma pesquisa.

    Se você especificar includedTypes (como "school") e excludedTypes (como "primary_school") na solicitação, a resposta incluirá lugares categorizados como "school", mas não como "primary_school". A resposta inclui lugares que correspondem a pelo menos um de includedTypes e nenhum dos excludedTypes.

    Se houver algum tipo conflitante, por exemplo, um que apareça em includedTypes e excludedTypes, um erro INVALID_REQUEST será retornado.

    includedPrimaryTypes

    Uma lista dos principais tipos de lugar da Tabela A para incluir em uma pesquisa.

    excludedPrimaryTypes

    Uma lista dos principais tipos de lugar da Tabela A para excluir de uma pesquisa.

    Se houver algum tipo principal conflitante, como um que apareça em includedPrimaryTypes e excludedPrimaryTypes, um erro INVALID_ARGUMENT será retornado.

  • maxResultCount

    Especifica o número máximo de resultados de lugares a serem retornados. Precisa estar entre 1 e 20 (padrão).

  • rankPreference

    O tipo de classificação a ser usado. Se esse parâmetro for omitido, os resultados serão classificados por popularidade. Pode ser um dos seguintes:

    • .popularity (padrão) Classifica os resultados com base na popularidade.
    • .distance: classifica os resultados em ordem crescente de distância a partir do local especificado.
  • regionCode

    O código regional usado para formatar a resposta, especificado como um valor de código CLDR de dois caracteres. Não há valor padrão.

    Se o nome do país do campo formattedAddress na resposta corresponder a regionCode, o código do país é omitido de formattedAddress. Esse parâmetro não tem efeito em adrFormatAddress, que sempre inclui o nome do país, ou em shortFormattedAddress, que nunca o inclui.

    A maioria dos códigos CLDR é idêntica aos códigos ISO 3166-1, com algumas exceções notáveis. Por exemplo, o ccTLD do Reino Unido é "uk" (.co.uk), enquanto o código ISO 3166-1 é "gb" (tecnicamente, para a entidade "Reino Unido da Grã-Bretanha e Irlanda do Norte"). O parâmetro pode afetar os resultados com base na legislação aplicável.

Exibir atribuições no seu aplicativo

Quando o app exibe informações coletadas de GMSPlacesClient, como fotos e avaliações, ele também precisa mostrar as atribuições necessárias.

Por exemplo, a propriedade reviews do objeto GMSPlacesClient contém uma matriz de até cinco objetos GMSPlaceReview. Cada objeto GMSPlaceReview pode conter atribuições e atribuições de autor. Se você mostrar a avaliação no app, também vai ser necessário mostrar qualquer atribuição ou de autor.

Para mais informações, consulte a documentação sobre atribuições.