PLACES_COUNT-Funktion

Die Funktion PLACES_COUNT gibt einen einzelnen Zählwert für Orte basierend auf dem angegebenen Suchbereich und den Suchfiltern zurück. Sie müssen den Suchbereich für die Funktion PLACES_COUNT angeben und können optional zusätzliche Filterparameter wie Ortstyp, Öffnungsstatus und Preisklasse angeben.

Da die Funktion PLACES_COUNT einen einzelnen Wert zurückgibt, rufen Sie sie mit einer SELECT-Klausel auf.

  • Eingabeparameter:

    • Erforderlich: Der geography Filterparameter, der den Suchbereich angibt. Der geography Parameter verwendet einen Wert, der durch den BigQuery GEOGRAPHY Datentyp definiert wird. Dieser unterstützt Punkte, Linienzüge und Polygone.

    • Optional: Zusätzliche Filterparameter, um die Suche zu verfeinern.

  • Liefert:

    • Einen einzelnen count-Wert als INT64.

Beispiel: Anzahl der Orte in einem Suchradius berechnen

Der einfachste PLACES_COUNT Funktionsaufruf gibt eine einzelne Anzahl aller Orte in einem geografischen Gebiet zurück. In diesem Beispiel wird die Anzahl aller Orte zurückgegeben, die sich im Umkreis von 1.000 Metern um das Empire State Building befinden.

In diesem Beispiel wird die BigQuery ST_GEOGPOINT Funktion verwendet, um einen GEOGRAPHYWert aus einem Punkt zurückzugeben.

SELECT `PROJECT_NAME.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;

Die Antwort enthält eine einzelne Anzahl:

Ergebnisse für die Funktion „Anzahl der Orte“ in New York City.

Bei einem typischeren Aufruf werden Filter auf den Suchbereich angewendet. Im nächsten Beispiel werden Filter verwendet, um die Suche so einzuschränken, dass nur eine Anzahl der folgenden Orte zurückgegeben wird:

  • Orte vom Typ restaurant mit einer Mindestbewertung von 3
  • Orte mit der Preisklasse „Günstig“ oder „Mittel“
  • Orte, die derzeit geöffnet sind
  • Orte, an denen Hunde erlaubt sind
SELECT `PROJECT_NAME.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;

Die gefilterte Antwort:

Ergebnisse für die Filterung der Funktion „Anzahl der Orte“ für Restaurants in New York City.

Bei Abfragen von Ortsdatensätzen gilt ein Mindestschwellenwert von 5. Einer der Vorteile der Funktionen zur Berechnung der Anzahl von Orten besteht darin, dass sie alle Anzahlen zurückgeben können, einschließlich 0. Der folgende Aufruf gibt beispielsweise die Anzahl 1 zurück:

SELECT `PROJECT_NAME.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;

Beispiel: Anzahl der Restaurants mit einem Polygon berechnen

Sie können ein Polygon verwenden, um den Suchbereich anzugeben. Wenn Sie ein Polygon verwenden, müssen die Punkte des Polygons eine geschlossene Schleife definieren, wobei der erste Punkt im Polygon mit dem letzten Punkt identisch sein muss.

In diesem Beispiel wird die BigQuery ST_GEOGFROMTEXT Funktion verwendet, um einen GEOGRAPHY Wert aus einem Polygon zurückzugeben.

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 `PROJECT_NAME.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;

Die Antwort für den Darstellungsbereich:

Ergebnisse für das Filtern der Funktion „Anzahl der Orte“ für Restaurants in einem Sichtfeld von New York City.

Beispiel: Anzahl der Restaurants mit einer Linie berechnen

Im nächsten Beispiel definieren Sie den Suchbereich mit einer Linie aus verbundenen Punkten und einem Suchradius von 100 Metern um die Linie. Die Linie ähnelt einer Reiseroute, die von der Routes API berechnet wird. Die Route kann für ein Fahrzeug, ein Fahrrad oder einen Fußgänger sein:

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

SELECT `PROJECT_NAME.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;

Die Antwort für die Linie:

Ergebnisse für das Filtern der Funktion „Places Count“ für Restaurants entlang einer Linie in New York City.

Beispiel: Ergebnisse mehrerer Aufrufe kombinieren

Sie können die Ergebnisse mehrerer Aufrufe der Funktion PLACES_COUNT kombinieren. Sie möchten beispielsweise ein einzelnes Ergebnis mit der Anzahl der Restaurants für die folgenden Preisklassen in einem bestimmten Bereich:

  • PRICE_LEVEL_INEXPENSIVE
  • PRICE_LEVEL_MODERATE
  • PRICE_LEVEL_EXPENSIVE
  • PRICE_LEVEL_VERY_EXPENSIVE"

In diesem Beispiel erstellen Sie eine Schleife, um die Funktion PLACES_COUNT für jede Preisklasse aufzurufen, und fügen die Ergebnisse jedes Aufrufs in eine temporäre Tabelle ein. Anschließend fragen Sie die temporäre Tabelle ab, um die Ergebnisse anzuzeigen:

-- 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, `PROJECT_NAME.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;

Die kombinierte Antwort:

Kombinierte Ergebnisse für das Filtern von Restaurants nach Preisniveau.

Eine weitere Möglichkeit besteht darin, den Befehl UNION ALL zu verwenden, um die Ergebnisse mehrerer SELECT-Anweisungen zu kombinieren. Das folgende Beispiel zeigt die gleichen Ergebnisse wie im vorherigen Beispiel:

SELECT "PRICE_LEVEL_INEXPENSIVE" as price_level, `PROJECT_NAME.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, `PROJECT_NAME.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, `PROJECT_NAME.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, `PROJECT_NAME.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