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, Betriebsstatus und Preisniveau 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 Parameter geography akzeptiert einen Wert, der durch den BigQuery-Datentyp GEOGRAPHY definiert wird. Dieser unterstützt Punkte, Linienzüge und Polygone.

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

  • Liefert:

    • Ein einzelner 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 betriebsbereiten Orte im Umkreis von 1.000 Metern um das Empire State Building zurückgegeben.

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

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;

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 einzuschränken und nur die Anzahl der folgenden Elemente zurückzugeben:

  • Orte vom Typ restaurant mit einer Mindestbewertung von 3
  • Eine Preisstufe von „günstig“ oder „mittel“
  • Derzeit in Betrieb
  • Hunde erlaubt
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;

Die gefilterte Antwort:

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

Denken Sie daran, dass für Abfragen von Ortsdatensätzen ein Mindestanzahlschwellenwert von 5 gilt. Einer der Vorteile der Funktionen zum Zählen von Orten ist, dass sie beliebige Anzahlen zurückgeben können, auch 0. Der folgende Aufruf gibt beispielsweise den Wert 1 zurück:

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;

Beispiel: Anzahl der Restaurants mit einem Polygon berechnen

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

In diesem Beispiel wird die BigQuery-Funktion ST_GEOGFROMTEXT 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 `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;

Die Antwort für den Darstellungsbereich:

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

Beispiel: Anzahl der Restaurants mit einer Linie berechnen

Im nächsten Beispiel wird der Suchbereich mit einer Linie aus verbundenen Punkten und einem Suchradius von 100 Metern um die Linie definiert. Die Linie ähnelt einer von der Routes API berechneten Route. 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 `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;

Die Antwort für die Zeile:

Ergebnisse für das Filtern der Funktion „Place 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 Preisniveaus in einem bestimmten Gebiet:

  • 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 Preisstufe aufzurufen und die Ergebnisse jedes Aufrufs in eine temporäre Tabelle einzufügen. 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, `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;

Die kombinierte Antwort:

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

Eine weitere Möglichkeit ist die Verwendung des UNION ALL-Befehls, 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, `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