Funkcja PLACES_COUNT

Funkcja PLACES_COUNT zwraca pojedynczą wartość liczbową miejsc na podstawie określonego obszaru wyszukiwania i filtrów wyszukiwania. W funkcji PLACES_COUNT musisz określić obszar wyszukiwania. Opcjonalnie możesz też podać dodatkowe parametry filtra, takie jak typ miejsca, stan działania, poziom cen i inne.

Ponieważ funkcja PLACES_COUNT zwraca pojedynczą wartość, wywołaj ją za pomocą klauzuli SELECT.

  • Parametry wejściowe:

    • Wymagany: geography parametr filtra, który określa obszar wyszukiwania. Parametr geography przyjmuje wartość zdefiniowaną przez typ danych BigQuery GEOGRAPHY, który obsługuje punkty, linie i wielokąty.

    • Opcjonalnie: dodatkowe parametry filtra, które pozwalają zawęzić wyszukiwanie.

  • Zwraca:

    • Pojedyncza wartość count jako INT64.

Przykład: obliczanie liczby miejsc w promieniu wyszukiwania

Najprostsze wywołanie funkcji PLACES_COUNT zwraca pojedynczą liczbę wszystkich miejsc w obszarze geograficznym. W tym przykładzie zwracasz liczbę wszystkich działających miejsc w promieniu 1000 metrów od Empire State Building.

W tym przykładzie użyto funkcji BigQueryST_GEOGPOINT, aby zwrócić wartość GEOGRAPHY z punktu.

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;

Odpowiedź zawiera jedną liczbę:

Wyniki funkcji Liczba miejsc w Nowym Jorku.

Bardziej typowe wywołanie stosuje filtry do obszaru wyszukiwania. W następnym przykładzie użyto filtrów, aby ograniczyć wyszukiwanie do zwracania tylko liczby:

  • Miejsca typu restaurant z minimalną oceną 3
  • poziom cen: niedrogi lub średni;
  • Obecnie działająca
  • Można wejść z psem
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;

Odfiltrowana odpowiedź:

Wyniki filtrowania funkcji Liczba miejsc w restauracji w Nowym Jorku.

Pamiętaj, że w przypadku zapytań dotyczących zbioru danych o miejscach obowiązuje minimalny próg liczby wynoszący 5. Jedną z zalet funkcji zliczania miejsc jest to, że mogą one zwracać dowolne liczby, w tym 0. Na przykład to wywołanie zwraca wartość 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;

Przykład: obliczanie liczby restauracji za pomocą wielokąta

Obszar wyszukiwania możesz określić za pomocą wielokąta. W przypadku wielokąta punkty muszą tworzyć zamkniętą pętlę, w której pierwszy punkt jest taki sam jak ostatni.

W tym przykładzie użyto funkcji BigQuery ST_GEOGFROMTEXT do zwrócenia wartości GEOGRAPHY z wielokąta.

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;

Odpowiedź dotycząca widocznego obszaru:

Wyniki filtrowania funkcji Place Count w przypadku restauracji w obszarze widocznym w Nowym Jorku.

Przykład: obliczanie liczby restauracji za pomocą linii

W następnym przykładzie obszar wyszukiwania jest definiowany za pomocą linii połączonych punktów z promieniem wyszukiwania wynoszącym 100 metrów wokół linii. Linia jest podobna do trasy podróży obliczonej przez Routes API. Trasa może być przeznaczona dla pojazdu, roweru lub pieszego:

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;

Odpowiedź na wiersz:

Wyniki filtrowania funkcji Place Count restauracji wzdłuż linii w Nowym Jorku.

Przykład: łączenie wyników kilku wywołań

Możesz łączyć wyniki wielu wywołań funkcji PLACES_COUNT. Załóżmy na przykład, że chcesz uzyskać jeden wynik pokazujący liczbę restauracji w określonym obszarze w tych przedziałach cenowych:

  • PRICE_LEVEL_INEXPENSIVE
  • PRICE_LEVEL_MODERATE
  • PRICE_LEVEL_EXPENSIVE
  • PRICE_LEVEL_VERY_EXPENSIVE"

W tym przykładzie tworzysz pętlę, aby wywołać funkcję PLACES_COUNT dla każdego poziomu ceny, i wstawiasz wyniki każdego wywołania do tabeli tymczasowej. Następnie możesz wysłać zapytanie do tabeli tymczasowej, aby wyświetlić wyniki:

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

Połączona odpowiedź:

Połączone wyniki filtrowania restauracji według poziomu cen.

Inną opcją jest użycie polecenia UNION ALL, aby połączyć wyniki kilku instrukcji SELECT. Poniższy przykład pokazuje te same wyniki co w poprzednim przykładzie:

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