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

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

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

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

البنية المرجعية

يتطلب تطوير التطبيقات التي تتضمّن عروضًا مرئية كبيرة للبيانات مكوّنين رئيسيَّين.

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

في ما يلي مخطّط بياني للنظام يوضّح كيفية تفاعل هذين المكوّنين مع مستخدم التطبيق وGoogle Cloud وGoogle Maps Platform لإنشاء تطبيق مرئي لعرض بيانات كبيرة.

مخطّط معماري

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

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

  1. حجم بيانات المصدر ومعدّل تعديلها:
    1. إذا كانت البيانات المصدر بتنسيق geojson أصغر من 5 ميغابايت أو يتم تعديلها بشكل متكرر جدًا، مثل توقّعات رادار الطقس المباشر، ننصحك بعرض البيانات ككائن geojson من جهة العميل في تطبيقك وعرضها باستخدام طبقة deck.gl.
    2. إذا كان حجم بياناتك أكبر من 5 ميغابايت ولا يتم تعديلها أكثر من مرة في الساعة، ننصحك بالاطّلاع على بنية Datasets API في هذا المستند.
      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 Datasets API على إنشاء شرائح خرائط من ملف البيانات المصدر لاستخدامها مع حزمة تطوير برامج (SDK) لتطبيق "خرائط Google" على الويب أو الأجهزة الجوّالة.
    2. شرائح الخريطة هي نظام فهرسة يستند إلى التكبير/التصغير، ويقدّم طرقًا أكثر فعالية لتحميل البيانات إلى تطبيق مرئي.
    3. قد لا تظهر عناصر كثيفة أو معقّدة في مربّعات الخرائط عند مستويات التكبير/التصغير المنخفضة. عندما يكبِّر المستخدم الخريطة إلى مستوى ولاية أو بلد (مثل z5 إلى z12)، قد تبدو مختلفة عن مستوى تكبير مدينة أو حي (مثل z13 إلى z18).

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

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

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

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

الخطوة 1: طلب البيانات في BigQuery

انتقِل إلى مجموعات بيانات BigQuery العامة. تحتوي مجموعة البيانات "bigquery-public-data" والجدول geo_openstreetmap.planet_features على بيانات Open Street Map (OSM) حول العالم بالكامل، بما في ذلك جميع الميزات الممكنة. يمكنك الاطّلاع على كل العناصر المتاحة للبحث عنها في OSM Wiki، بما في ذلك amenity و road وlanduse.

استخدِم Cloud Shell أو وحدة تحكّم BigQuery Cloud لطلب البحث في الجدول باستخدام لغة الاستعلامات البنيوية (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 extract في 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 Platform من نتيجة طلب البحث على Google Cloud Storage (GCS). باستخدام واجهة برمجة التطبيقات Datasets API، يمكنك إنشاء ملف ข้อมูล ثم تحميل البيانات إلى ملف البيانات من ملف مستضاف على Google Cloud Storage.

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

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

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

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

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

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

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

يمكنك تخصيص النمط وإضافة معالِجات أحداث لتغيير النمط ديناميكيًا وغير ذلك باستخدام واجهة برمجة التطبيقات 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.

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

مراجع إضافية:

المساهمون

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