Fonction PLACES_COUNT

La fonction PLACES_COUNT renvoie une seule valeur de nombre de lieux en fonction de la zone de recherche et des filtres de recherche spécifiés. Vous devez spécifier la zone de recherche dans la fonction PLACES_COUNT et pouvez éventuellement spécifier des paramètres de filtre supplémentaires, tels que le type de lieu, l'état de fonctionnement, la tranche de prix, etc.

Étant donné que la fonction PLACES_COUNT renvoie une seule valeur, appelez-la à l'aide d'une clause SELECT.

  • Paramètres d'entrée :

    • Obligatoire : le paramètre de filtre geography qui spécifie la zone de recherche. Le paramètre geography accepte une valeur définie par le type de données BigQuery GEOGRAPHY, qui est compatible avec les points, les chaînes linéaires et les polygones.

    • Facultatif : paramètres de filtre supplémentaires pour affiner votre recherche.

  • Renvoie :

    • Une seule valeur count sous forme de INT64.

Exemple : Calculer le nombre de lieux dans un rayon de recherche

L'appel de fonction PLACES_COUNT le plus simple renvoie un seul nombre de lieux dans une zone géographique. Dans cet exemple, vous renvoyez le nombre de lieux opérationnels situés à moins de 1 000 mètres de l'Empire State Building.

Cet exemple utilise la fonction BigQuery ST_GEOGPOINT pour renvoyer une valeur GEOGRAPHY à partir d'un point.

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 réponse contient un seul décompte :

Résultats de la fonction "Nombre de lieux" à New York.

Un appel plus typique applique des filtres à la zone de recherche. L'exemple suivant utilise des filtres pour limiter la recherche et ne renvoyer qu'un nombre :

  • Lieux de type restaurant avec une note minimale de 3
  • un niveau de prix "bon marché" ou "moyen" ;
  • Actuellement opérationnel
  • Accepte les chiens
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;

Réponse filtrée :

Résultats du filtrage de la fonction "Nombre de lieux" pour les restaurants à New York.

N'oubliez pas que les requêtes sur les ensembles de données de lieux appliquent un seuil minimal de 5 comptes. L'un des avantages des fonctions de nombre de lieux est qu'elles peuvent renvoyer n'importe quel nombre, y compris 0. Par exemple, l'appel suivant renvoie un nombre 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;

Exemple : Calculer le nombre de restaurants à l'aide d'un polygone

Vous pouvez utiliser un polygone pour spécifier la zone de recherche. Lorsque vous utilisez un polygone, ses points doivent définir une boucle fermée, c'est-à-dire que le premier point du polygone doit être identique au dernier.

Cet exemple utilise la fonction BigQuery ST_GEOGFROMTEXT pour renvoyer une valeur GEOGRAPHY à partir d'un polygone.

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;

Réponse pour la fenêtre d'affichage :

Résultats du filtrage de la fonction "Nombre de lieux" de restaurant dans un viewport de New York.

Exemple : Calculer le nombre de restaurants à l'aide d'une ligne

Dans l'exemple suivant, vous définissez la zone de recherche à l'aide d'une ligne de points connectés avec un rayon de recherche de 100 mètres autour de la ligne. Cette ligne est semblable à un itinéraire de voyage calculé par l'API Routes. L'itinéraire peut être destiné à un véhicule, à un vélo ou à un piéton :

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;

Réponse pour la ligne :

Résultats du filtrage de la fonction "Nombre de lieux de restauration" le long d'une ligne à New York.

Exemple : Combiner les résultats de plusieurs appels

Vous pouvez combiner les résultats de plusieurs appels à la fonction PLACES_COUNT. Par exemple, vous souhaitez obtenir un seul résultat indiquant le nombre de restaurants pour les gammes de prix suivantes dans une zone spécifique :

  • PRICE_LEVEL_INEXPENSIVE
  • PRICE_LEVEL_MODERATE
  • PRICE_LEVEL_EXPENSIVE
  • PRICE_LEVEL_VERY_EXPENSIVE"

Dans cet exemple, vous créez une boucle pour appeler la fonction PLACES_COUNT pour chaque niveau de prix et insérer les résultats de chaque appel dans une table temporaire. Vous interrogez ensuite la table temporaire pour afficher les résultats :

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

Réponse combinée :

Résultats combinés pour filtrer les restaurants par niveau de prix.

Vous pouvez également utiliser la commande UNION ALL pour combiner les résultats de plusieurs instructions SELECT. L'exemple suivant affiche les mêmes résultats que l'exemple précédent :

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