عرض بياناتك مرئيًا باستخدام 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 Maps Platform.

  1. حجم بيانات المصدر ومعدّل تكرار التعديلات
    1. إذا كان حجم بيانات المصدر بتنسيق geojson أقل من 5 ميغابايت أو تم تعديلها بشكل متكرّر، مثل توقعات رادار الطقس المباشر، ننصحك بعرض البيانات من جهة العميل في ملف geojson في تطبيقك وعرضها باستخدام طبقة deck.gl.
    2. إذا كان حجم بياناتك يزيد عن 5 ميغابايت ولا يتم تحديثها بسرعة تزيد عن مرة واحدة في الساعة، ننصحك باستخدام بنية واجهة برمجة تطبيقات مجموعات البيانات في هذا المستند.
      1. تتوافق مجموعات البيانات مع الملفات التي يصل حجمها إلى 350 ميغابايت.
      2. وإذا كان حجم بياناتك أكبر من 350 ميغابايت، ننصحك باقتصاص البيانات الهندسية أو تبسيطها في الملف المصدر قبل تمريرها إلى "مجموعات البيانات" (راجع "تقليم البيانات" أدناه).
  2. المخطط والتنسيق
    1. تأكّد من احتواء البيانات على خاصية معرّف فريدة عالميًا لكل ميزة. يتيح لك المعرّف الفريد اختيار ميزة معيّنة وتصميمها أو ضم البيانات إلى ميزة لعرضها، مثلاً، تصميم ميزة محدّدة عند النقر على حدث المستخدِم.
    2. نسِّق بياناتك بتنسيق CSV أو GeoJSON وفقًا لمواصفات واجهة برمجة التطبيقات Datasets API مع أسماء الأعمدة وأنواع البيانات وأنواع عناصر GeoJSON الصالحة.
    3. لإنشاء مجموعات البيانات من BigQuery بسهولة، يمكنك إنشاء عمود باسم "wkt" في ملف CSV الذي تم تصديره باستخدام لغة الاستعلامات البنيوية (SQL). تتيح مجموعات البيانات استيراد العلامات الهندسية من ملف 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" يعرض جميع السكك الحديدية في لندن من بيانات Open Street Map (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 في Cloud Shell:

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

ملاحظة: يمكنك برمجة كل خطوة باستخدام أداة جدولة المهام في السحابة الإلكترونية لتعديل بياناتك بانتظام.

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

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

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

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

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

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

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

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

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

ويمكنك تخصيص النمط وإضافة معالِجات الأحداث لتغيير النمط ديناميكيًا وغير ذلك باستخدام 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". باستخدام هذه البنية المرجعية، يمكنك إنشاء تطبيقات لعرض بيانات الموقع الجغرافي من أي بيانات في GCP BigQuery تعمل على أي جهاز باستخدام Google Maps Datasets API.

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

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

المساهمون

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

  • راين بومان، مدير هندسة حلول النظام الأساسي في "خرائط Google"