داده های خود را با BigQuery و Datasets API تجسم کنید

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

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

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

معماری مرجع

توسعه برنامه هایی با تجسم داده های بزرگ به دو جزء اصلی نیاز دارد.

  1. پشتیبان مشتری - همه داده ها و خدمات برنامه های پشتیبان مانند پردازش و ذخیره سازی.
  2. مشتری مشتری - رابط کاربری برنامه شما با یک جزء تجسم نقشه.

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

architecture diagram

⭐ توجه: Maps Datasets API یک محصول قبل از GA است. جزئیات را در شرایط خدمات ببینید.

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

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

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

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

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

پیش نیازها

  1. دسترسی به BigQuery Sandbox و Cloud Console
  2. مطمئن شوید که یک پروژه GCP و راه‌اندازی حساب صورت‌حساب دارید.

مرحله 1 - داده ها را در BigQuery جستجو کنید

به BigQuery Public Datasets بروید. مجموعه داده 'bigquery-public-data' و جدول geo_openstreetmap.planet_features شامل داده های نقشه خیابان باز (OSM) کل جهان از جمله تمام ویژگی های ممکن است. تمام ویژگی های موجود برای پرس و جو در OSM Wiki از جمله amenity ، road و landuse را کشف کنید.

از Cloud Shell یا BigQuery Cloud Console ( https://console.cloud.google.com ) برای پرس و جوی جدول با استفاده از 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 در یک پرس و جو برمی‌گردانند.

توجه - برای اعتبارسنجی بصری نتایج جستجوی خود قبل از ایجاد مجموعه داده، می توانید به سرعت داده های خود را در داشبورد BigQuery با استفاده از Looker Studio تجسم کنید.

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

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

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

مرحله 2 - یک مجموعه داده از فایل CSV خود ایجاد کنید

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

برای شروع، Maps Datasets API را در پروژه GCP خود فعال کنید و اسناد API را مرور کنید. کتابخانه های کلاینت Python و Node.js برای فراخوانی Datasets API از منطق در باطن برنامه شما وجود دارد. علاوه بر این، یک Datasets GUI برای ایجاد مجموعه داده ها به صورت دستی در Cloud Console وجود دارد.

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

Dataset preview

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

هنگامی که مجموعه داده شما ایجاد شد، می توانید یک شناسه نقشه با سبک نقشه مرتبط ایجاد کنید . در ویرایشگر Map Style، می‌توانید یک mapId و سبک را با Dataset مرتبط کنید. اینجا همچنین جایی است که می‌توانید از Cloud Based Map Styling برای سفارشی کردن ظاهر و احساس نقشه خود استفاده کنید.

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

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

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

توجه - حتما از کانال v=beta برای اجرای Maps JS API خود استفاده کنید.

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,
           }
     }
}

توجه - مطمئن شوید که همیشه برای مجموعه داده خود به برنامه نقشه خود انتساب اضافه کنید. برای افزودن انتساب OSM، از نمونه کد انتساب در اسناد پیروی از دستورالعمل‌های OSM پیروی کنید.

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

london railway map

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

نتیجه

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

اقدامات بعدی

بیشتر خواندن:

مشارکت کنندگان

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