دیداری‌سازی داده‌ها با BigQuery

این سند معماری مرجع و نمونه‌ای برای ایجاد کردن مصورسازی‌های داده‌های نقشه با داده‌های مکان در Google Cloud BigQuery و Google Maps Platform Datasets API ارائه می‌دهد، مانند تجزیه‌وتحلیل داده‌های شهرداری باز، ایجاد کردن نقشه پوشش مخابراتی، یا مصورسازی کردن ردپای حرکت ناوگان خودروهای سیار.

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

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

معماری مرجع

توسعه برنامه‌هایی با دیداری‌سازی داده‌های بزرگ به دو مؤلفه اصلی نیاز دارد.

  1. بخش پشتی مشتری - همه داده‌ها و سرویس‌های برنامه بخش پشتی مثل پردازش و فضای ذخیره‌سازی.
  2. کارخواه مشتری - میانای کاربر برنامه شما با مؤلفه دیداری‌سازی نقشه.

در زیر نمودار سیستمی از نحوه تعامل این دو مؤلفه با کاربر برنامه، Google Cloud، و «پلاتفرم Google Maps» برای ایجاد برنامه تجسم داده بزرگ ارائه شده است.

نمودار معماری

ملاحظات طراحی

برای ایجاد تجسم داده کارآمد بااستفاده از Google Cloud و «پلاتفرم Google Maps»، باید تعدادی از ملاحظات طراحی را رعایت کنید.

  1. اندازه داده‌های منبع و فواصل تجدید نظر.
    1. اگر داده‌های منبع در قالب geojson کمتر از ۵ مگابایت است یا به‌طور مکرر به‌روز می‌شود (مثلاً پیش‌بینی رادار آب‌وهوای زنده)، داده‌ها را به‌عنوان شیء geojson در سمت کارخواه در برنامه‌تان ارائه دهید و با لایه deck.gl رندر کنید.
    2. اگر اندازه داده‌هایتان بیشتر از ۵ مگابایت است و سریع‌تر از یک بار در ساعت به‌روز نمی‌شود، معماری Datasets API را در این سند درنظر بگیرید.
      1. مجموعه‌های داده از فایل‌های تا اندازه ۳۵۰ مگابایت پشتیبانی می‌کنند.
      2. اگر داده‌هایتان بزرگ‌تر از ۳۵۰ مگابایت است، پیش‌از ارسال به «مجموعه داده‌ها»، داده‌های هندسی را در فایل منبع هرس یا ساده کنید (به «هرس کردن داده‌ها» در زیر مراجعه کنید).
  2. طرح‌واره و قالب
    1. مطمئن شوید که داده‌هایتان برای هر عارضه دارای ویژگی شناسه یکتای جهانی باشد. شناسه یکتا به شما امکان می‌دهد ویژگی خاصی را انتخاب کنید و به آن سبک دهید یا داده‌ها را به ویژگی‌ای برای تجسم کردن بپیوندید، برای مثال، سبک دادن به ویژگی انتخاب‌شده در رویداد کاربر «کلیک».
    2. داده‌هایتان را به‌صورت CSV یا GeoJSON مطابق با مشخصات Datasets API با نام‌های ستون، انواع داده، و انواع شیء GeoJSON معتبر قالب‌بندی کنید.
    3. برای ایجاد آسان «مجموعه‌داده‌ها» از BigQuery، ستونی به‌نام wkt در صادر کردن SQL CSV ایجاد کنید. «مجموعه داده‌ها» از وارد کردن هندسه از CSV در قالب Well-Known Text (WKT) از ستونی به‌نام wkt پشتیبانی می‌کند.
    4. بررسی کنید که داده‌هایتان ازنظر هندسی و نوع داده معتبر باشد. برای مثال، GeoJSON باید در سیستم مختصات WGS84، ترتیب پیچش هندسی، و غیره باشد.
    5. از ابزاری مانند geojson-validate استفاده کنید تا مطمئن شوید همه هندسه‌ها در فایل منبع معتبر هستند یا از ogr2ogr برای تبدیل فایل منبع بین قالب‌ها یا سیستم‌های مختصات استفاده کنید.
  3. هرس کردن داده‌ها
    1. تعداد ویژگی‌های عارضه‌ها را به حداقل برسانید. می‌توانید در زمان اجرا، ویژگی‌های بیشتری را به یک مشخصه در کلید شناسه یکتا (مثال) اضافه کنید.
    2. درصورت امکان، از انواع داده‌های عدد صحیح برای اشیای ویژگی استفاده کنید تا فضای ذخیره‌سازی کاشی به‌حداقل برسد و کاشی‌ها برای بار شدن ازطریق HTTPS در برنامه کارخواه عملکرد خوبی داشته باشند.
    3. هندسه‌های عارضه بسیار پیچیده را ساده و/یا انبوهش کنید؛ برای کاهش اندازه فایل منبع و بهبود عملکرد نقشه، استفاده از توابع BigQuery مانند ST_Simplify را در هندسه‌های چندضلعی پیچیده درنظر بگیرید.
  4. کاشی‌کاری
    1. Google Maps Datasets API از فایل داده منبع شما کاشی‌های نقشه ایجاد می‌کند تا با کیت توسعه نرم‌افزار Maps وب یا تلفن همراه استفاده شود.
    2. کاشی‌های نقشه یک سیستم نمایه‌سازی مبتنی بر بزرگ‌نمایی است که روش‌های کارآمدتری برای بار کردن داده‌ها در یک برنامه تصویری ارائه می‌دهد.
    3. کاشی‌های نقشه ممکن است ویژگی‌های متراکم یا پیچیده را در سطوح بزرگ‌نمایی پایین‌تر حذف کنند. وقتی کاربر نمای ایالت یا کشور را کوچک می‌کند (مثلاً z5-z12)، ممکن است متفاوت از زمانی باشد که نمای شهر یا محله را بزرگ می‌کند (مثلاً z13-z18).

مثال - راه‌آهن در لندن

در این مثال، معماری مرجع را برای ایجاد برنامه وب با Google Cloud و Google Maps اعمال می‌کنیم که همه راه‌آهن‌های لندن را از داده‌های Open Street Map (OSM) تجسم می‌کند.

پیش‌نیازها

  1. دسترسی به جعبه شنی BigQuery و کنسول Cloud
  2. مطمئن شوید که پروژه Google Cloud و حساب صورت‌حساب راه‌اندازی کرده‌اید.

مرحله ۱ - پُرسمان کردن داده‌ها در BigQuery

به مجموعه داده‌های عمومی BigQuery بروید. مجموعه داده «bigquery-public-data» و جدول geo_openstreetmap.planet_features حاوی داده‌های Open Street Map (OSM) کل جهان ازجمله همه ویژگی‌های ممکن است. همه ویژگی‌های دردسترس برای پُرسمان را در OSM Wiki، ازجمله amenity،‏ road، و landuse، کاوش کنید.

از Cloud Shell یا کنسول ابری BigQuery برای پُرسمان جدول بااستفاده از SQL استفاده کنید. قطعه کد زیر از فرمان bq query برای جستجوی همه راه‌آهن‌های فیلترشده برای لندن بااستفاده از جعبه مرزی و تابع ST_Intersects() استفاده می‌کند.

برای اجرای این پُرسمان از Cloud Shell، قطعه کد زیر را اجرا کنید و شناسه پروژه، مجموعه داده، و نام جدول را برای محیط خود به‌روز کنید.

bq query --use_legacy_sql=false \
--destination_table PROJECTID:DATASET.TABLENAME \
--replace \
'SELECT
osm_id, 
feature_type,
(SELECT value
         FROM   unnest(all_tags)
         WHERE  KEY = "name") AS name,
(SELECT value
         FROM   unnest(all_tags)
         WHERE  KEY = "railway") AS railway,
geometry as wkt
FROM   bigquery-public-data.geo_openstreetmap.planet_features
WHERE ("railway") IN (SELECT key FROM unnest(all_tags)) 
    AND ST_Intersects(
    geometry,
ST_MakePolygon(ST_MakeLine(
      [ST_GeogPoint(-0.549370, 51.725346),
      ST_GeogPoint(-0.549370, 51.2529407),
      ST_GeogPoint(0.3110581, 51.25294),
      ST_GeogPoint(0.3110581, 51.725346),
      ST_GeogPoint(-0.549370, 51.725346)]
    ))
   )'

پُرسمان این نتیجه را برمی‌گرداند:

  1. شناسه یکتا برای هر ویژگی osm_id
  2. feature_type مثلاً نقاط، خطوط، و غیره
  3. name ویژگی، مثلاً Paddington Station
  4. نوع railway، مثلاً اصلی، گردشگری، نظامی، و غیره
  5. wkt ویژگی - هندسه نقطه، خط، یا چندضلعی در قالب WKT. WKT قالب داده استانداردی است که ستون‌های BigQuery Geography در پُرسمان برمی‌گردانند.

توجه - برای اعتبارسنجی دیداری نتایج پُرسمان قبل‌از ایجاد «مجموعه داده»، می‌توانید به‌سرعت داده‌هایتان را در داشبوردی از BigQuery بااستفاده از Looker Studio دیداری‌سازی کنید.

برای صادر کردن جدول به فایل CSV در مخزن Google Cloud Storage، از فرمان bq extract در Cloud Shell استفاده کنید:

bq extract \
--destination_format "CSV" \
--field_delimiter "," \
--print_header=true \
PROJECTID:DATASET.TABLENAME \
gs://BUCKET/FILENAME.csv

توجه: می‌توانید هر مرحله را بااستفاده از Cloud Scheduler خودکار کنید تا داده‌هایتان به‌طور منظم به‌روز شود.

مرحله ۲ - ایجاد مجموعه داده از فایل CSV

سپس یک مجموعه داده Google Maps Platform از خروجی پُرسمان در Google Cloud Storage (GCS) ایجاد کنید. بااستفاده از Datasets API، می‌توانید مجموعه داده ایجاد کنید و سپس داده‌ها را از فایلی که در GCS میزبانی می‌شود به مجموعه داده‌تان بارگذاری کنید.

برای شروع، Maps Datasets API را در پروژه Google Cloud خود فعال کنید و اسناد API را مرور کنید. کتابخانه‌های کارخواه Python و Node.js برای فراخوانی Datasets API از منطق در باطن برنامه شما وجود دارد. علاوه‌براین، رابط کاربری گرافیکی مجموعه‌های داده برای ایجاد دستی «مجموعه‌های داده» در «کنسول Cloud» وجود دارد.

پس‌از تکمیل بارگذاری «مجموعه داده»، می‌توانید مجموعه داده‌تان را در رابط کاربری گرافیکی «مجموعه داده‌ها» پیش‌دید کنید.

پیش‌نمایش مجموعه‌داده

مرحله ۴ - مرتبط کردن «مجموعه داده» با شناسه نقشه

پس‌از ایجاد «مجموعه داده»، می‌توانید شناسه نقشه ایجاد کنید که «سبک نقشه» مرتبط داشته باشد. در ویرایشگر «سبک نقشه»، می‌توانید mapId و سبک را با «مجموعه داده» مرتبط کنید. اینجا همچنین جایی است که می‌توانید سبک‌پردازی نقشه بااستفاده از فضای ابری را اعمال کنید تا ظاهر و حس‌وحال نقشه‌تان را سفارشی کنید.

مرحله ۵ - ایجاد کردن تجسم نقشه برنامه کارخواه

درنهایت، می‌توانید مجموعه داده را بااستفاده از Maps JS API به برنامه دیداری‌سازی داده‌های سمت کارخواه اضافه کنید. مقداردهی اولیه شیء نقشه را بااستفاده از mapID مرتبط با مجموعه داده‌تان از مرحله قبلی انجام دهید. سپس سبک و تعامل‌پذیری لایه «مجموعه داده» را تنظیم کنید. برای جزئیات بیشتر، راهنمای کامل سبک‌بندی داده‌محور با مجموعه داده‌ها را بررسی کنید.

می‌توانید سبک را سفارشی‌سازی کنید، کنترل‌کننده‌های رویداد را برای تغییر سبک به‌صورت پویا اضافه کنید، و کارهای بیشتری را بااستفاده از Maps JS API انجام دهید. نمونه‌ها را در اسناد ببینید. در زیر، تابع setStyle را برای ایجاد سبک عارضه نقطه و خط برای این مثال براساس مشخصه «feature_type» تعریف می‌کنیم.

function setStyle(params) {
  const map.getDatasetFeatureLayer("your-dataset-id");
  const datasetFeature = params.feature;
  const type = datasetFeature.datasetAttributes["feature_type"];
if (type == "lines") {
           return {
             fillColor: "blue",
             strokeColor: "blue",
             fillOpacity: 0.5,
             strokeWeight: 1,
           }
         } else if (type == "points") {
           return {
             fillColor: "black",
             strokeColor: "black",
             strokeOpacity: 0.5,
             pointRadius: 2,
             fillOpacity: 0.5,
             strokeWeight: 1,
           }
     }
}

این کد بالا وقتی در برنامه وب تک‌صفحه‌ای مقداردهی اولیه می‌شود، دیداری‌سازی داده‌های نقشه زیر را ارائه می‌دهد:

نقشه راه‌آهن لندن

از اینجا، می‌توانید تجسم نقشه خود را در تابع setStyle() با افزودن منطق برای فیلتر کردن ویژگی‌ها، افزودن سبک براساس تعامل کاربر، و تعامل با بقیه برنامه خود گسترش دهید.

نتیجه‌گیری

در این سند، درباره معماری مرجع و نمونه پیاده‌سازی برنامه تجسم داده‌های بزرگ بااستفاده از Google Cloud و Google Maps Platform بحث کردیم. بااستفاده از این معماری مرجع، می‌توانید از هر داده‌ای در Google Cloud BigQuery برنامه‌های تجسم داده مکان ایجاد کنید که بااستفاده از Google Maps Datasets API در هر دستگاهی عملکرد خوبی دارند.

کنش‌های بعدی

مطالعه بیشتر:

همیاران

نویسندگان اصلی: