يوفّر هذا المستند بنية مرجعية ومثالاً لإنشاء عروض مرئية لبيانات الخرائط باستخدام بيانات الموقع الجغرافي في Google Cloud Platform BigQuery وGoogle Maps Platform Datasets API، مثل تحليل بيانات البلدية المفتوحة أو إنشاء خريطة تغطية لاتصالات السلكية واللاسلكية أو عرض آثار حركة أساطيل المركبات المتنقلة.
تعتبر مؤثرات عرض بيانات الخرائط أداة قوية لجذب المستخدمين والكشف عن الإحصاءات المكانية في بيانات الموقع. بيانات الموقع الجغرافي هي البيانات التي تحتوي على عناصر نقاط أو خطوط أو مضلّعات. على سبيل المثال، تساعد خرائط الطقس المستهلكين في فهم الرحلات والتخطيط لها والاستعداد للعواصف. وتساعد خرائط ذكاء الأعمال المستخدمين في الكشف عن إحصاءات من تحليل البيانات، وتساعد خرائط الاتصالات المستخدمين في فهم سلوك مقدمي الخدمات التغطية والجودة في منطقة نطاق خدمة معينة.
ومع ذلك، من الصعب على مطوّري التطبيقات إنشاء تصورات كبيرة لبيانات الخريطة تكون ذات أداء وتوفر تجربة رائعة للمستخدم. يجب تحميل البيانات الكبيرة في جهة العميل للذاكرة، ما يؤدي إلى بطء في أوقات تحميل الخريطة الأولى. يجب أن يكون العنصر المرئي قابلاً للتنفيذ على جميع الأجهزة، بما في ذلك الهواتف الجوّالة المتقدمة التي تخضع لقيود في الذاكرة ووحدة معالجة الرسومات. أخيرًا، يحتاج المطوّرون إلى اختيار مكتبة كبيرة لعرض البيانات يمكن نقلها وموثوقيتها وفعاليتها وتحتوي على بيانات كبيرة.
بنية المرجع
يتطلب تطوير التطبيقات باستخدام تصورات البيانات الكبيرة مكونين رئيسيين.
- واجهة العميل: جميع بيانات تطبيقات الخلفية خدمات مثل المعالجة والتخزين.
- عميل العميل: واجهة مستخدم تطبيقك مع مكوِّن مرئيات للخريطة.
يوجد أدناه مخطّط نظامي لكيفية تفاعل هذين المكونَين مع مستخدم التطبيق، Google Cloud وGoogle Maps Platform لإنشاء تطبيق كبير لعرض البيانات.
اعتبارات التصميم
هناك عدد من اعتبارات التصميم التي يجب اتباعها لإنشاء تصور جيد للبيانات باستخدام Google Cloud وGoogle Maps Platform.
- حجم بيانات المصدر ومعدّل تكرار التعديلات
- إذا كان حجم بيانات المصدر بتنسيق geojson أقل من 5 ميغابايت أو تم إجراء التحديثات بشكل متكرر جدًا، على سبيل المثال لتوقّعات الطقس في الوقت الفعلي، ننصحك بعرض البيانات من جهة عميل كائن geojson في تطبيقك وعرضها باستخدام طبقة deck.gl.
- إذا كان حجم بياناتك يزيد عن 5 ميغابايت ولا يتم تحديثها بسرعة تزيد عن مرة واحدة في الساعة، ننصحك باستخدام بنية واجهة برمجة تطبيقات مجموعات البيانات في هذا المستند.
- تتوافق مجموعات البيانات مع الملفات التي يصل حجمها إلى 350 ميغابايت.
- وإذا كان حجم بياناتك أكبر من 350 ميغابايت، ننصحك باقتصاص البيانات الهندسية أو تبسيطها في الملف المصدر قبل تمريرها إلى "مجموعات البيانات" (راجع "تقليم البيانات" أدناه).
- المخطط التنسيق
- تأكّد من احتواء البيانات على خاصية معرّف فريدة عالميًا لكل ميزة. يتيح لك المعرّف الفريد اختيار ميزة معيّنة وتصميمها أو ضم البيانات إلى ميزة لعرضها، مثلاً، تصميم ميزة محدّدة عند النقر على حدث المستخدِم.
- نسِّق بياناتك بتنسيق CSV أو GeoJSON وفقًا لمواصفات واجهة برمجة التطبيقات Datasets API مع أسماء الأعمدة وأنواع البيانات وأنواع عناصر GeoJSON الصالحة.
- لإنشاء مجموعات البيانات من BigQuery بسهولة، يمكنك إنشاء عمود باسم "
wkt
" في ملف CSV الذي تم تصديره باستخدام لغة الاستعلامات البنيوية (SQL). تتيح مجموعات البيانات استيراد العلامات الهندسية من ملف CSV بتنسيق نص معروف (WKT) من عمود باسمwkt
. - تحقق من أن بياناتك بها هندسة وأنواع بيانات صالحة. على سبيل المثال، يجب أن يكون GeoJSON في نظام الإحداثيات WGS84 وترتيب الانعطاف الهندسي وما إلى ذلك.
- استخدِم أداة، مثل geojson-validate للتأكّد من أنّ جميع الأشكال الهندسية في ملف المصدر صالحة أو استخدام ogr2ogr لتحويل ملف مصدر بين التنسيقات أو أنظمة الإحداثيات.
- تنقيح البيانات
- قلل من عدد خصائص الميزات. يمكنك دمج مواقع إضافية مع ميزة في وقت التشغيل باستخدام مفتاح معرّف فريد (مثال).
- استخدِم أنواع بيانات بأعداد صحيحة لعناصر المواقع، متى أمكن ذلك، لتقليل مساحة تخزين المربّعات، مع الحفاظ على أداء المربّعات لتحميلها من خلال HTTPS في تطبيق عميل.
- تبسيط و/أو تجميع الأشكال الهندسية للميزات المعقدة للغاية يمكنك استخدام دوال BigQuery مثل ST_Simplify على الأشكال الهندسية للمضلّعات المعقدة لتقليل حجم ملف المصدر وتحسين أداء الخرائط.
- التقسيم إلى أجزاء
- تنشئ واجهة برمجة تطبيقات مجموعات بيانات "خرائط Google" مربّعات خرائط من ملف بيانات المصدر لاستخدامها مع حزمة تطوير البرامج لخرائط Google على الويب أو للأجهزة الجوّالة.
- مربعات الخرائط هي نظام فهرسة يعتمد على التكبير/التصغير ويوفر طرقًا أكثر فاعلية لتحميل البيانات إلى تطبيق مرئي.
- وقد تستبعد مربعات الخرائط الميزات الكثيفة أو المعقدة عند مستويات تكبير/تصغير أقل. عندما يقوم المستخدم بالتصغير إلى ولاية أو بلد (على سبيل المثال، z5-z12) قد يبدو مختلفًا عما هو عليه عند تكبير مدينة أو حي (على سبيل المثال، z13-z18).
مثال - السكك الحديدية في لندن
في هذا المثال، سنطبق البنية المرجعية لإنشاء تطبيق ويب باستخدام GCP و"خرائط Google" يعرض جميع السكك الحديدية في لندن من بيانات Open Street Map (OSM).
المتطلبات الأساسية
- الوصول إلى BigQuery Sandbox وCloud Console
- يُرجى التأكُّد من إعداد مشروع 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)]
))
)'
يعرض الاستعلام:
- معرّف فريد لكل ميزة
osm_id
feature_type
مثال النقاط والخطوط وما إلى ذلكname
للعنصر، مثلPaddington Station
- النوع
railway
، مثلاً رئيسي، سياحة، عسكري، إلخ 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. يمكنك الاطّلاع على أمثلة في المستندات. سنحدد أدناه دالة 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,
}
}
}
ملاحظة: احرص دائمًا على إضافة سمات مجموعة بياناتك إلى تطبيق الخرائط. لإضافة إحالة OSM، اتّبِع مثال رمز تحديد المصدر في المستندات مع الالتزام بإرشادات OSM.
ينتج عن هذا الرمز أعلاه عند إعداده في تطبيق ويب من صفحة واحدة ظهور بيانات الخريطة التالية:
من هنا، يمكنك توسيع تصور الخريطة في الدالة setStyle() عن طريق إضافة منطق لفلترة الميزات وإضافة نمط بناءً على تفاعل المستخدم والتفاعل مع بقية تطبيقك.
الخاتمة
ناقشنا في هذه المقالة بنية مرجعية ومثالاً على تنفيذ تطبيق كبير لعرض البيانات باستخدام Google Cloud و"منصة خرائط Google". باستخدام هذه البنية المرجعية، يمكنك إنشاء تطبيقات لعرض بيانات الموقع الجغرافي من أي بيانات في GCP BigQuery تعمل على أي جهاز باستخدام Google Maps Datasets API.
الإجراءات التالية
قراءات إضافية:
- مستندات واجهة برمجة التطبيقات لمجموعات بيانات "منصة خرائط Google"
- الاطّلاع على بياناتك في الوقت الفعلي باستخدام "أنماط محرك البيانات"
- مقدّمة إلى التحليلات الجغرافية المكانية في BigQuery
- استخدام GeoJSON في BigQuery لإجراء الإحصاءات الجغرافية المكانية
المساهمون
المؤلفون الرئيسيون:
- راين بومان، مدير هندسة حلول النظام الأساسي في "خرائط Google"