Função PLACES_COUNT

A função PLACES_COUNT retorna um único valor de contagem de lugares com base na área de pesquisa e nos filtros especificados. Você precisa especificar a área de pesquisa para a função PLACES_COUNT e pode especificar parâmetros de filtro adicionais, como tipo de lugar, status de funcionamento, nível de preço e muito mais.

Como a função PLACES_COUNT retorna um único valor, chame-a usando uma cláusula SELECT.

  • Parâmetros de entrada:

    • Obrigatório: o parâmetro de filtro geography que especifica a área de pesquisa. O parâmetro geography usa um valor definido pelo tipo de dados GEOGRAPHY do BigQuery, que aceita pontos, linestrings e polígonos.

    • Opcional: outros parâmetros de filtro para refinar sua pesquisa.

  • Retorna:

    • Um único valor count como um INT64.

Exemplo: calcular o número de lugares em um raio de pesquisa

A chamada de função PLACES_COUNT mais simples retorna uma única contagem de todos os lugares em uma área geográfica. Neste exemplo, você retorna a contagem de todos os lugares operacionais em um raio de 1.000 metros do Empire State Building.

Este exemplo usa a função ST_GEOGPOINT do BigQuery para retornar um valor GEOGRAPHY de um ponto.

SELECT `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`(
  JSON_OBJECT(
      'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building
      'geography_radius', 1000 -- Radius in meters
      )
) as count;

A resposta contém uma única contagem:

Resultados da função "Contagem de lugares" na cidade de Nova York.

Uma chamada mais típica aplica filtros à área de pesquisa. O exemplo a seguir usa filtros para limitar a pesquisa e retornar apenas uma contagem de:

  • Lugares do tipo restaurant com classificação mínima de 3
  • Um nível de preço barato ou médio
  • Em operação
  • Permite a entrada de cães
SELECT `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`(
  JSON_OBJECT(
      'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building
      'geography_radius', 1000, -- Radius in meters
      'types', ["restaurant"],
      'min_rating', 3,
      'price_level', ['PRICE_LEVEL_INEXPENSIVE', 'PRICE_LEVEL_MODERATE'],
      'business_status', ['OPERATIONAL'],
      'allows_dogs', TRUE
      )
) as count;

A resposta filtrada:

Resultados da função de contagem de lugares de restaurantes em Nova York.

As consultas de conjunto de dados de lugares exigem um limite mínimo de contagem de 5. Uma das vantagens das funções de contagem de lugares é que elas podem retornar qualquer contagem, incluindo 0. Por exemplo, a chamada a seguir retorna uma contagem de 1:

SELECT `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`(
  JSON_OBJECT(
      'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building
      'geography_radius', 500, -- Radius in meters
      'types', ["restaurant"],
      'min_rating', 4.0,
      'free_parking_lot', TRUE,
      'good_for_watching_sports', TRUE
      )
) as count;

Exemplo: calcular o número de restaurantes usando um polígono

É possível usar um polígono para especificar a área de pesquisa. Ao usar um polígono, os pontos precisam definir um loop fechado em que o primeiro e o último ponto são iguais.

Este exemplo usa a função ST_GEOGFROMTEXT do BigQuery para retornar um valor GEOGRAPHY de um polígono.

DECLARE geo GEOGRAPHY;
SET geo = ST_GEOGFROMTEXT('''POLYGON((-73.985708 40.75773,-73.993324 40.750298,
                                      -73.9857 40.7484,-73.9785 40.7575,
                                      -73.985708 40.75773))''');  -- NYC viewport

SELECT `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`(
  JSON_OBJECT(
      'geography',geo, -- viewport 
      'types', ["restaurant"],
      'min_rating', 1.0,
      'max_rating', 4.5,
      'min_user_rating_count', 1,
      'max_user_rating_count', 10000,
      'price_level', ['PRICE_LEVEL_INEXPENSIVE', 'PRICE_LEVEL_MODERATE'],
      'business_status', ['OPERATIONAL'],
      'allows_dogs', TRUE
      )
) as count;

A resposta para a janela de visualização:

Resultados para a função de filtragem de contagem de lugares de restaurantes em uma janela de visualização da cidade de Nova York.

Exemplo: calcular o número de restaurantes usando uma linha

No exemplo a seguir, você define a área de pesquisa usando uma linha de pontos conectados com um raio de pesquisa de 100 metros ao redor da linha. A linha é semelhante a um trajeto calculado pela API Routes. O trajeto pode ser para um veículo, uma bicicleta ou para um pedestre:

DECLARE geo GEOGRAPHY;
SET geo = ST_GEOGFROMTEXT('LINESTRING(-73.98903537033028 40.73655649223003,-73.93580216278471 40.80955538843361)');  -- NYC line

SELECT `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`(
  JSON_OBJECT(
      'geography',geo, -- line
      'geography_radius', 100, -- Radius around line
      'types', ["restaurant"],
      'min_rating', 1.0,
      'max_rating', 4.5,
      'min_user_rating_count', 1,
      'max_user_rating_count', 10000,
      'price_level', ['PRICE_LEVEL_INEXPENSIVE', 'PRICE_LEVEL_MODERATE'],
      'business_status', ['OPERATIONAL'],
      'allows_dogs', TRUE
      )
) as count;

A resposta para a linha:

Resultados da filtragem da função "Contagem de lugares" de restaurantes ao longo de uma linha na cidade de Nova York.

Exemplo: combinar os resultados de várias chamadas

É possível combinar os resultados de várias chamadas para a função PLACES_COUNT. Por exemplo, você quer um único resultado mostrando o número de restaurantes para os seguintes níveis de preço em uma área específica:

  • PRICE_LEVEL_INEXPENSIVE
  • PRICE_LEVEL_MODERATE
  • PRICE_LEVEL_EXPENSIVE
  • PRICE_LEVEL_VERY_EXPENSIVE"

Neste exemplo, você cria um loop para chamar a função PLACES_COUNT para cada nível de preço e insere os resultados de cada chamada em uma tabela temporária. Em seguida, consulte a tabela temporária para mostrar os resultados:

-- Create a temp table to hold the results.
CREATE TEMP TABLE results (type STRING, count INT64);

-- Create a loop that calls PLACES_COUNT for each price level.
FOR types IN (SELECT type FROM UNNEST(["PRICE_LEVEL_INEXPENSIVE", "PRICE_LEVEL_MODERATE", "PRICE_LEVEL_EXPENSIVE", "PRICE_LEVEL_VERY_EXPENSIVE"]) as type)
DO
  INSERT INTO results VALUES (types.type, `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`(
  JSON_OBJECT(
      'types', ["restaurant"],
      'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building
      'geography_radius', 1000, -- Radius in meters
      'business_status', ['OPERATIONAL'],
      'price_level', [types.type]
  )));
END FOR;

-- Query the table of results.
SELECT * FROM results;

A resposta combinada:

Resultados combinados para filtrar restaurantes por nível de preço.

Outra opção é usar o comando UNION ALL para combinar os resultados de várias instruções SELECT. O exemplo a seguir mostra os mesmos resultados do exemplo anterior:

SELECT "PRICE_LEVEL_INEXPENSIVE" as price_level, `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`(
  JSON_OBJECT(
      'types', ["restaurant"],
      'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building
      'geography_radius', 1000, -- Radius in meters
      'business_status', ['OPERATIONAL'],
      'price_level', ['PRICE_LEVEL_INEXPENSIVE']
  )
) as count

UNION ALL

SELECT "PRICE_LEVEL_MODERATE" as price_level, `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`(
  JSON_OBJECT(
      'types', ["restaurant"],
      'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building
      'geography_radius', 1000, -- Radius in meters
      'business_status', ['OPERATIONAL'],
      'price_level', ['PRICE_LEVEL_MODERATE']
  )
) as count

UNION ALL

SELECT "PRICE_LEVEL_EXPENSIVE" as price_level, `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`(
  JSON_OBJECT(
      'types', ["restaurant"],
      'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building
      'geography_radius', 1000, -- Radius in meters
      'business_status', ['OPERATIONAL'],
      'price_level', ['PRICE_LEVEL_EXPENSIVE']
  )
) as count

UNION ALL

SELECT "PRICE_LEVEL_VERY_EXPENSIVE" as price_level, `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`(
  JSON_OBJECT(
      'types', ["restaurant"],
      'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building
      'geography_radius', 1000, -- Radius in meters
      'business_status', ['OPERATIONAL'],
      'price_level', ['PRICE_LEVEL_VERY_EXPENSIVE']
  )
) as count