Funzione PLACES_COUNT

La funzione PLACES_COUNT restituisce un singolo valore di conteggio dei luoghi in base all'area di ricerca e ai filtri di ricerca specificati. Devi specificare l'area di ricerca nella funzione PLACES_COUNT e, facoltativamente, puoi specificare parametri di filtro aggiuntivi, come tipo di luogo, stato operativo, livello di prezzo e altro ancora.

Poiché la funzione PLACES_COUNT restituisce un singolo valore, chiamala utilizzando una clausola SELECT.

  • Parametri di input:

    • Obbligatorio: il geography parametro di filtro che specifica l'area di ricerca. Il parametro geography accetta un valore definito dal tipo di dati GEOGRAPHY di BigQuery, che supporta punti, linestring e poligoni.

    • (Facoltativo) Parametri di filtro aggiuntivi per perfezionare la ricerca.

  • Restituisce:

    • Un singolo valore count come INT64.

Esempio: calcolare il numero di luoghi in un raggio di ricerca

La chiamata di funzione PLACES_COUNT più semplice restituisce un singolo conteggio di tutti i luoghi in un'area geografica. In questo esempio, restituisci il conteggio di tutti i luoghi operativi entro 1000 metri dall'Empire State Building.

Questo esempio utilizza la funzione BigQuery ST_GEOGPOINT per restituire un valore GEOGRAPHY da un punto.

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;

La risposta contiene un singolo conteggio:

Risultati per la funzione Conteggio luoghi a New York City.

Una chiamata più tipica applica filtri all'area di ricerca. L'esempio successivo utilizza i filtri per limitare la ricerca in modo da restituire solo un conteggio di:

  • Luoghi di tipo restaurant con una valutazione minima di 3
  • Un livello di prezzo economico o medio
  • Attualmente operativo
  • Ammette cani
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;

La risposta filtrata:

Risultati del filtro della funzione Conteggio luoghi del ristorante a New York.

Ricorda che le query del set di dati sui luoghi applicano una soglia di conteggio minima di 5. Uno dei vantaggi delle funzioni di conteggio dei luoghi è che possono restituire qualsiasi conteggio, incluso 0. Ad esempio, la seguente chiamata restituisce un conteggio di 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;

Esempio: calcola il numero di ristoranti utilizzando un poligono

Puoi utilizzare un poligono per specificare l'area di ricerca. Quando utilizzi un poligono, i punti del poligono devono definire un circuito chiuso in cui il primo punto del poligono è uguale all'ultimo punto.

Questo esempio utilizza la funzione ST_GEOGFROMTEXT BigQuery per restituire un valore GEOGRAPHY da un poligono.

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;

La risposta per il viewport:

Risultati del filtro della funzione Conteggio luoghi del ristorante in un riquadro di visualizzazione di New York City.

Esempio: calcola il numero di ristoranti utilizzando una linea

Nell'esempio successivo, definisci l'area di ricerca utilizzando una linea di punti collegati con un raggio di ricerca di 100 metri intorno alla linea. La linea è simile a un itinerario di viaggio calcolato dall'API Routes. Il percorso potrebbe essere per un veicolo, una bicicletta o per un pedone:

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;

La risposta per la riga:

Risultati del filtro della funzione Conteggio luoghi ristorante lungo una linea a New York.

Esempio: combina i risultati di più chiamate

Puoi combinare i risultati di più chiamate alla funzione PLACES_COUNT. Ad esempio, vuoi un unico risultato che mostri il numero di ristoranti per i seguenti livelli di prezzo in un'area specifica:

  • PRICE_LEVEL_INEXPENSIVE
  • PRICE_LEVEL_MODERATE
  • PRICE_LEVEL_EXPENSIVE
  • PRICE_LEVEL_VERY_EXPENSIVE"

In questo esempio, crei un ciclo per chiamare la funzione PLACES_COUNT per ogni livello di prezzo e inserisci i risultati di ogni chiamata in una tabella temporanea. A questo punto, esegui una query sulla tabella temporanea per visualizzare i risultati:

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

La risposta combinata:

Risultati combinati per il filtraggio dei ristoranti in base al livello di prezzo.

Un'altra opzione è utilizzare il comando UNION ALL per combinare i risultati di più istruzioni SELECT. L'esempio seguente mostra gli stessi risultati dell'esempio precedente:

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