Fungsi PLACES_COUNT

Fungsi PLACES_COUNT menampilkan satu nilai jumlah 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 operasional, tingkat harga, dan lainnya.

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

  • Parameter input:

    • Wajib: Parameter filter geography 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 menyaring penelusuran Anda.

  • Retur:

    • Nilai count tunggal sebagai INT64.

Contoh: Menghitung jumlah tempat dalam radius penelusuran

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

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

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;

Respons berisi satu jumlah:

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 jumlah:

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

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 jumlah tempat adalah bahwa fungsi tersebut dapat menampilkan jumlah apa pun, termasuk 0. Misalnya, panggilan berikut menampilkan hitungan 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;

Contoh: Menghitung jumlah restoran menggunakan poligon

Anda dapat menggunakan poligon untuk menentukan area penelusuran. Saat menggunakan poligon, titik-titik poligon harus menentukan loop tertutup di mana 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 `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;

Respons untuk area pandang:

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

Contoh: Menghitung jumlah restoran menggunakan garis

Pada contoh berikutnya, Anda menentukan area penelusuran menggunakan garis titik yang terhubung dengan radius penelusuran 100 meter di sekitar garis. Jalur ini mirip dengan rute perjalanan yang dihitung oleh Routes API. Rute dapat berupa rute 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 `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;

Respons untuk baris:

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 menunjukkan 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 memasukkan hasil setiap panggilan ke tabel sementara. Kemudian, Anda mengirimkan kueri ke 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, `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;

Respons gabungan:

Hasil gabungan untuk memfilter restoran berdasarkan tingkat harga.

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

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