PLACES_COUNT تابع

تابع PLACES_COUNT بر اساس ناحیه جستجوی مشخص شده و فیلترهای جستجو، یک مقدار شمارش واحد از مکان‌ها را برمی‌گرداند. شما باید ناحیه جستجو را برای تابع PLACES_COUNT مشخص کنید و می‌توانید به صورت اختیاری پارامترهای فیلتر اضافی مانند نوع مکان، وضعیت عملیاتی، سطح قیمت و موارد دیگر را نیز مشخص کنید.

از آنجا که تابع PLACES_COUNT یک مقدار واحد را برمی‌گرداند، آن را با استفاده از یک عبارت SELECT فراخوانی کنید.

  • پارامترهای ورودی:

    • الزامی : پارامتر فیلتر geography که ناحیه جستجو را مشخص می‌کند. پارامتر geography مقداری را می‌گیرد که توسط نوع داده BigQuery GEOGRAPHY تعریف شده است، که از نقاط، رشته‌های خطی و چندضلعی‌ها پشتیبانی می‌کند.

    • اختیاری : پارامترهای فیلتر اضافی برای اصلاح جستجوی شما.

  • بازده:

    • یک مقدار count واحد به عنوان INT64 .

مثال: تعداد مکان‌ها در شعاع جستجو را محاسبه کنید

ساده‌ترین فراخوانی تابع PLACES_COUNT تعداد کل مکان‌ها در یک منطقه جغرافیایی را برمی‌گرداند. در این مثال، تعداد کل مکان‌های عملیاتی در شعاع ۱۰۰۰ متری ساختمان امپایر استیت را برمی‌گردانید.

این مثال از تابع BigQuery ST_GEOGPOINT برای بازگرداندن مقدار GEOGRAPHY از یک نقطه استفاده می‌کند.

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;

پاسخ شامل یک شمارش واحد است:

نتایج مربوط به تابع شمارش مکان در شهر نیویورک.

یک فراخوانی معمول‌تر، فیلترها را به ناحیه جستجو اعمال می‌کند. مثال بعدی از فیلترها برای محدود کردن جستجو به بازگرداندن تعداد موارد زیر استفاده می‌کند:

  • restaurant از این نوع با حداقل امتیاز ۳
  • سطح قیمت ارزان یا متوسط
  • در حال حاضر عملیاتی
  • به سگ‌ها اجازه می‌دهد
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;

پاسخ فیلتر شده:

نتایج مربوط به فیلتر کردن تابع شمارش تعداد رستوران در شهر نیویورک.

به یاد داشته باشید که پرس‌وجوهای مجموعه داده‌های مکانی، حداقل آستانه شمارش ۵ را اعمال می‌کنند. یکی از مزایای توابع شمارش مکان این است که می‌توانند هر تعداد، از جمله ۰ را برگردانند. برای مثال، فراخوانی زیر تعداد ۱ را برمی‌گرداند:

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;

مثال: تعداد رستوران‌ها را با استفاده از یک چندضلعی محاسبه کنید

شما می‌توانید از یک چندضلعی برای مشخص کردن ناحیه جستجو استفاده کنید. هنگام استفاده از یک چندضلعی، نقاط چندضلعی باید یک حلقه بسته را تعریف کنند که در آن اولین نقطه در چندضلعی همان آخرین نقطه باشد.

این مثال از تابع BigQuery ST_GEOGFROMTEXT برای برگرداندن مقدار GEOGRAPHY از یک چندضلعی استفاده می‌کند.

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;

پاسخ برای viewport:

نتایج فیلتر کردن تابع شمارش تعداد رستوران در نمای شهر نیویورک.

مثال: تعداد رستوران‌ها را با استفاده از یک خط محاسبه کنید

در مثال بعدی، شما منطقه جستجو را با استفاده از خطی از نقاط متصل به هم با شعاع جستجوی ۱۰۰ متر در اطراف خط تعریف می‌کنید. این خط مشابه یک مسیر سفر است که توسط Routes API محاسبه می‌شود. این مسیر ممکن است برای یک وسیله نقلیه، یک دوچرخه یا یک عابر پیاده باشد:

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;

پاسخ برای خط:

نتایج فیلتر کردن تابع تعداد رستوران در امتداد یک خط در شهر نیویورک.

مثال: ترکیب نتایج چندین فراخوانی

شما می‌توانید نتایج چندین فراخوانی تابع PLACES_COUNT را با هم ترکیب کنید. برای مثال، شما می‌خواهید یک نتیجه واحد داشته باشید که تعداد رستوران‌ها را برای سطوح قیمت زیر در یک منطقه خاص نشان دهد:

  • PRICE_LEVEL_INEXPENSIVE
  • PRICE_LEVEL_MODERATE
  • PRICE_LEVEL_EXPENSIVE
  • PRICE_LEVEL_VERY_EXPENSIVE"

در این مثال، شما یک حلقه ایجاد می‌کنید تا تابع PLACES_COUNT را برای هر سطح قیمت فراخوانی کنید و نتایج هر فراخوانی را در یک جدول موقت وارد کنید. سپس از جدول موقت درخواست می‌کنید تا نتایج را نمایش دهد:

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

پاسخ ترکیبی:

نتایج ترکیبی برای فیلتر کردن رستوران‌ها بر اساس سطح قیمت.

گزینه دیگر استفاده از دستور UNION ALL برای ترکیب نتایج چندین دستور SELECT است. مثال زیر همان نتایج مثال قبلی را نشان می‌دهد:

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