عرض بياناتك مرئيًا باستخدام BigQuery وDatasets API

يقدّم هذا المستند بنية مرجعية ومثالاً لإنشاء عروض مرئية لبيانات الخريطة باستخدام بيانات الموقع الجغرافي في Google Cloud Platform BigQuery وGoogle Maps Platform Datasets API، مثل تحليل بيانات البلدية المفتوحة أو إنشاء خريطة تغطية اتصالات سلكية ولاسلكية أو عرض آثار حركة أسطول المركبات المتنقلة.

تصورات بيانات الخرائط هي أداة قوية لجذب المستخدمين وكشف الرؤى المكانية في بيانات الموقع. بيانات الموقع هي البيانات التي تحتوي على عناصر النقاط أو الخطوط أو المضلّعات. على سبيل المثال، تساعد خرائط الطقس المستهلكين على فهم الرحلات والتخطيط لها والاستعداد للعواصف، بينما تساعد خرائط ذكاء الأعمال المستخدمين في الكشف عن الأفكار من تحليل البيانات، وتساعد خرائط الاتصالات المستخدمين على فهم تغطية مقدِّمي الخدمة وجودتهم في منطقة نطاق خدمة معيّنة.

ومع ذلك، من الصعب على مطوري التطبيقات عمل تصورات كبيرة لبيانات الخرائط ذات الأداء الجيد وتوفر تجربة مستخدم رائعة. يجب تحميل البيانات الكبيرة إلى جانب برنامج الذاكرة، ما يؤدي إلى بطء أوقات تحميل الخريطة الأولى. يجب أن يكون العنصر المرئي مفيدًا على جميع الأجهزة، بما في ذلك الهواتف الجوّالة البسيطة التي تحتوي على قيود على الذاكرة ووحدة معالجة الرسومات. أخيرًا، يحتاج المطورون إلى اختيار مكتبة كبيرة لعرض البيانات تكون قابلة للنقل وموثوقة وذات أداء مع بيانات كبيرة.

بنية المرجع

يتطلب تطوير التطبيقات ذات تصورات البيانات الكبيرة مكونين رئيسيين.

  1. الخلفية الخلفية للعميل: جميع بيانات تطبيقات الخلفية وخدماتها، مثل المعالجة والتخزين.
  2. عميل العميل: واجهة مستخدم تطبيقك بمكوِّن التمثيل البصري للخريطة

يوجد أدناه رسم تخطيطي لنظام لكيفية تفاعل هذين المكونين مع مستخدم التطبيق، Google Cloud، وGoogle Maps Platform لإنشاء تطبيق كبير لتصور البيانات.

مخطط هندسة معمارية

⭐ ملاحظة: Maps Datasets API هي منتج متوفّر في مرحلة ما قبل التوفّر للجمهور العام. يمكنك الاطّلاع على التفاصيل في بنود الخدمة.

اعتبارات التصميم

هناك عدد من اعتبارات التصميم التي يجب اتباعها لإنشاء تصور بيانات فعال باستخدام Google Cloud و"منصة خرائط Google".

  1. حجم البيانات المصدر ومعدّل التعديل:
    1. إذا كانت بيانات المصدر بتنسيق geojson أقل من 5 ميغابايت أو يتم تعديلها كثيرًا، مثل توقعات رادار الطقس المباشر، يمكنك عرض البيانات كعنصر عميل geojson في تطبيقك وعرضها باستخدام طبقة deck.gl.
    2. إذا كان حجم البيانات يزيد عن 5 ميغابايت وتم تحديثها بسرعة أكبر من مرة واحدة في الساعة، ضع في اعتبارك بنية واجهة برمجة تطبيقات مجموعات البيانات في هذا المستند.
      1. وتدعم مجموعات البيانات الملفات التي يتجاوز حجمها 350 ميغابايت.
      2. وإذا كان حجم البيانات أكبر من 350 ميغابايت، ننصحك بتقليص أو تبسيط البيانات الهندسية في الملف المصدر قبل تمريرها إلى مجموعات البيانات (راجع "تنقيح البيانات" أدناه).
  2. المخطط والتنسيق
    1. تأكَّد من أنّ بياناتك لها معرّف فريد عالمي لكل ميزة. يتيح لك رقم التعريف الفريد اختيار ميزة معيّنة وتصميمها أو دمج البيانات بميزة لإنشاء عرض مرئي لها، على سبيل المثال، نمط ميزة محدّدة في حدث المستخدِم "النقر".
    2. نسِّق بياناتك كملف CSV أو GeoJSON وفقًا لمواصفات Datasets API مع أسماء أعمدة وأنواع بيانات صالحة وأنواع كائنات GeoJSON.
    3. لتسهيل إنشاء مجموعات البيانات من BigQuery، يمكنك إنشاء عمود باسم wkt في عملية تصدير SQL CSV. تتيح مجموعات البيانات استيراد الأشكال الهندسية من ملف CSV بتنسيق نص معروف (WKT) من عمود باسم wkt.
    4. تأكد من أن بياناتك تمثل أشكالاً هندسية وأنواع بيانات صالحة. على سبيل المثال، يجب أن يكون GeoJSON في نظام الإحداثيات WGS84 أو ترتيب اللفّات الهندسية وما إلى ذلك.
    5. يمكنك استخدام أداة مثل geojson-validate للتأكّد من أنّ جميع الأشكال الهندسية في ملف المصدر صالحة أو استخدام ogr2ogr لتحويل ملف مصدر بين التنسيقات أو أنظمة الإحداثيات.
  3. تنقيح البيانات
    1. قلِّل من عدد خصائص الميزات. يمكنك دمج مواقع إضافية مع ميزة في وقت التشغيل باستخدام مفتاح معرّف فريد (مثال).
    2. استخدِم أنواع بيانات أعداد صحيحة لعناصر الموقع متى أمكن ذلك لتقليل مساحة تخزين المربّعات، مع الحفاظ على أداء المربّعات لتحميلها عبر HTTPS في تطبيق عميل.
    3. تبسيط و/أو تجميع الأشكال الهندسية للميزات المعقّدة للغاية، وننصحك باستخدام دوال BigQuery مثل ST_Simplify في الأشكال الهندسية المضلّعة المعقّدة، وذلك لتقليل حجم الملف المصدر وتحسين أداء الخريطة.
  4. التقسيم إلى أجزاء
    1. تُنشئ واجهة برمجة تطبيقات مجموعات البيانات في "خرائط Google" مربّعات خرائط من ملف بيانات المصدر لاستخدامها في Maps JS API.
    2. مربعات الخرائط هي نظام فهرسة قائم على التكبير/التصغير ويوفر طرقًا أكثر فاعلية لتحميل البيانات في تطبيق مرئي.
    3. قد تُسقط أجزاء الخريطة ميزات كثيفة أو معقدة عند مستويات تكبير/تصغير أقل. عند تصغير المستخدم لتصغير إلى ولاية أو بلد (على سبيل المثال، z5-z12) قد يبدو مختلفًا عما كان عليه عند تكبيره إلى مدينة أو حي (على سبيل المثال، z13-z18).

مثال - السكك الحديدية في لندن

في هذا المثال، سنطبّق البنية المرجعية لإنشاء تطبيق ويب باستخدام GCP و"خرائط Google" لعرض جميع السكك الحديدية في لندن من بيانات فتح خريطة الشارع (OSM).

المتطلبات الأساسية

  1. الوصول إلى BigQuery Sandbox وCloud Console
  2. يُرجى التأكّد من إعداد مشروع Google Cloud Platform وحساب الفوترة.

الخطوة 1 - الاستعلام عن البيانات في BigQuery

انتقِل إلى مجموعات بيانات BigQuery العامة. تحتوي مجموعة البيانات '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 filter في Cloud Shell:

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

ملاحظة: يمكنك برمجة كل خطوة باستخدام Cloud Scheduler لتعديل بياناتك بانتظام.

الخطوة 2 - إنشاء مجموعة بيانات من ملف CSV

بعد ذلك، يمكنك إنشاء مجموعة بيانات "منصة خرائط Google" من نتيجة طلب البحث على Google Cloud Storage (GCS). باستخدام Datasets API، يمكنك إنشاء مجموعة بيانات ثم تحميل البيانات إلى مجموعة البيانات من ملف مستضاف على GCS.

للبدء، عليك تفعيل واجهة برمجة التطبيقات Maps Datasets API في مشروعك على Google Cloud Platform ومراجعة مستندات واجهة برمجة التطبيقات. تتوفّر مكتبات عملاء Python وNode.js لاستدعاء واجهة برمجة التطبيقات Datasets API من المنطق في خلفية تطبيقك. بالإضافة إلى ذلك، تتوفّر واجهة مستخدم تصويرية لمجموعات البيانات لإنشاء مجموعات بيانات يدويًا في Cloud Console.

بعد اكتمال تحميل مجموعة البيانات، يمكنك معاينة مجموعة البيانات في واجهة المستخدم الرسومية لمجموعات البيانات.

معاينة مجموعة البيانات

الخطوة 4 - ربط مجموعة البيانات بمعرّف خريطة

بعد إنشاء مجموعة البيانات، يمكنك إنشاء رقم تعريف خريطة باستخدام نمط خريطة مرتبط. في محرِّر "نمط الخريطة"، يمكنك ربط معرّف الخريطة والنمط بمجموعة البيانات. هذا هو أيضًا المكان الذي يمكنك فيه تطبيق تصميم الخرائط المستند إلى السحابة الإلكترونية لتخصيص مظهر ومظهر الخريطة.

الخطوة 5 - إنشاء تصور لخريطة تطبيق العميل

أخيرًا، يمكنك إضافة مجموعة البيانات إلى تطبيق عرض بيانات من جهة العميل باستخدام Maps JS API. عليك إعداد كائن الخريطة باستخدام mapID المرتبط بمجموعة البيانات من الخطوة السابقة. بعد ذلك، عيِّن نمط طبقة مجموعة البيانات وتفاعلها. يمكنك الاطّلاع على دليل كامل للنمط المستند إلى البيانات باستخدام مجموعات البيانات للحصول على مزيد من التفاصيل.

يمكنك تخصيص النمط وإضافة معالِجات أحداث لتغيير النمط ديناميكيًا والمزيد باستخدام Maps JS API. اطّلِع على أمثلة في docs. سنحدد أدناه دالة setStyle لإنشاء نمط ميزة النقاط والخط في هذا المثال استنادًا إلى السمة "feature_type".

ملاحظة: احرص على استخدام v=beta channel عند تنفيذ واجهة 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.

يؤدي هذا الرمز البرمجي الوارد أعلاه عند إعداده في تطبيق ويب من صفحة واحدة إلى ظهور بيانات الخريطة التالية:

خريطة سكة حديد لندن

من هنا، يمكنك توسيع تصور الخريطة في دالة setStyle() عن طريق إضافة منطق لميزات التصفية وإضافة نمط بناءً على تفاعل المستخدم والتفاعل مع بقية التطبيق.

الخلاصة

في هذه المقالة، ناقشنا بنية مرجعية ومثالاً لتنفيذ تطبيق كبير لعرض البيانات باستخدام Google Cloud و"منصة خرائط Google". باستخدام هذه البنية المرجعية، يمكنك إنشاء تطبيقات العرض المرئي لبيانات الموقع الجغرافي من أي بيانات في BigQuery على Google Cloud Platform تعمل على أي جهاز باستخدام واجهة برمجة التطبيقات Google Maps Datasets API.

الإجراءات التالية

قراءات إضافية:

المساهمون

المؤلفون الرئيسيون: