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 Parametergeography
akzeptiert einen Wert, der durch den BigQuery-DatentypGEOGRAPHY
definiert wird. Dieser unterstützt Punkte, Linienzüge und Polygone.Optional: Zusätzliche Filterparameter, um die Suche einzugrenzen.
Liefert:
- Ein einzelner
count
-Wert alsINT64
.
- Ein einzelner
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:
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:
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:
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:
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:
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