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

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

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

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

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

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

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

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

مخطّط البنية

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

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

  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 في عملية تصدير ملف CSV بتنسيق SQL. تتيح مجموعات البيانات استيراد الأشكال الهندسية من ملف 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 مربّعات خرائط من ملف البيانات المصدر لاستخدامها مع حزمة تطوير البرامج (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 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 لتعديل بياناتك بانتظام.

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

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

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

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

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

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

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

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

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

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

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

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

المساهمون

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