Fungsi PLACES_COUNT

Fungsi PLACES_COUNT menampilkan satu nilai hitungan tempat berdasarkan area penelusuran dan filter penelusuran yang ditentukan. Anda harus menentukan area penelusuran ke fungsi PLACES_COUNT dan secara opsional dapat menentukan parameter filter tambahan, seperti jenis tempat, status operasi, tingkat harga, dan lainnya.

Karena fungsi PLACES_COUNT menampilkan satu nilai, panggil fungsi tersebut menggunakan klausa SELECT.

  • Parameter input:

    • Wajib: geography Parameter filter yang menentukan area penelusuran. Parameter geography mengambil nilai yang ditentukan oleh jenis data GEOGRAPHY BigQuery, yang mendukung titik, linestring, dan poligon.

    • Opsional: Parameter filter tambahan untuk menyempurnakan penelusuran Anda.

  • Returns:

    • Satu nilai count sebagai INT64.

Contoh: Menghitung jumlah tempat dalam radius penelusuran

Panggilan fungsi PLACES_COUNT yang paling sederhana menampilkan satu hitungan semua tempat di area geografis. Dalam contoh ini, Anda menampilkan hitungan semua tempat operasional dalam jarak 1.000 meter dari Empire State Building.

Contoh ini menggunakan fungsi ST_GEOGPOINT BigQuery untuk menampilkan nilai GEOGRAPHYdari suatu titik.

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;

Respons berisi satu hitungan:

Hasil untuk fungsi Jumlah Tempat di New York City.

Panggilan yang lebih umum menerapkan filter ke area penelusuran. Contoh berikutnya menggunakan filter untuk membatasi penelusuran agar hanya menampilkan hitungan:

  • Tempat berjenis restaurant dengan rating minimum 3
  • Tingkat harga murah atau sedang
  • Saat ini beroperasi
  • boleh dibawa masuk
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;

Respons yang difilter:

Hasil untuk memfilter fungsi Jumlah Tempat restoran di New York City.

Ingatlah bahwa kueri set data tempat menerapkan nilai minimum 5. Salah satu keunggulan fungsi hitungan tempat adalah fungsi tersebut dapat menampilkan hitungan apa pun, termasuk 0. Misalnya, panggilan berikut menampilkan hitungan 1:

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;

Contoh: Menghitung jumlah restoran menggunakan poligon

Anda dapat menggunakan poligon untuk menentukan area penelusuran. Saat menggunakan poligon, titik poligon harus menentukan loop tertutup dengan titik pertama dalam poligon sama dengan titik terakhir.

Contoh ini menggunakan fungsi ST_GEOGFROMTEXT BigQuery untuk menampilkan nilai GEOGRAPHY dari poligon.

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;

Respons untuk area pandang:

Hasil untuk memfilter fungsi Jumlah Tempat restoran di area tampilan New York City.

Contoh: Menghitung jumlah restoran menggunakan garis

Dalam contoh berikutnya, Anda menentukan area penelusuran menggunakan garis titik terhubung dengan radius penelusuran 100 meter di sekitar garis. Garis ini mirip dengan rute perjalanan yang dihitung oleh Routes API. Rute ini mungkin untuk kendaraan, sepeda, atau pejalan kaki:

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;

Respons untuk garis:

Hasil untuk memfilter fungsi Jumlah Tempat restoran di sepanjang garis di New York City.

Contoh: Menggabungkan hasil beberapa panggilan

Anda dapat menggabungkan hasil beberapa panggilan ke fungsi PLACES_COUNT. Misalnya, Anda menginginkan satu hasil yang menampilkan jumlah restoran untuk tingkat harga berikut dalam area tertentu:

  • PRICE_LEVEL_INEXPENSIVE
  • PRICE_LEVEL_MODERATE
  • PRICE_LEVEL_EXPENSIVE
  • PRICE_LEVEL_VERY_EXPENSIVE"

Dalam contoh ini, Anda membuat loop untuk memanggil fungsi PLACES_COUNT untuk setiap tingkat harga, dan menyisipkan hasil setiap panggilan ke tabel sementara. Kemudian, Anda mengkueri tabel sementara untuk menampilkan hasilnya:

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

Respons gabungan:

Hasil gabungan untuk memfilter restoran berdasarkan tingkat harga.

Opsi lainnya adalah menggunakan perintah UNION ALL untuk menggabungkan hasil beberapa pernyataan SELECT. Contoh berikut menunjukkan hasil yang sama seperti dari contoh sebelumnya:

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