يوفّر هذا المستند بنية مرجعية ومثالاً لإنشاء عروض مرئية لبيانات الخرائط باستخدام بيانات الموقع الجغرافي في Google Cloud Platform BigQuery وGoogle Maps Platform Datasets API، مثل تحليل بيانات البلديات المفتوحة أو إنشاء خريطة لتغطية الاتصالات عن بُعد أو عرض مسارات حركة أسطول المركبات المتنقلة.
إنّ الرسوم البيانية لبيانات الخرائط هي أداة فعّالة للتفاعل مع المستخدمين واكتشاف إحصاءات مكانية في بيانات الموقع الجغرافي. بيانات الموقع الجغرافي هي البيانات التي تحتوي على عناصر نقاط أو خطوط أو مضلّعات. على سبيل المثال، تساعد خرائط الطقس المستهلكين في فهم الرحلات والتخطيط لها والاستعداد للعواصف، وتساعد خرائط ذكاء الأعمال المستخدمين في اكتشاف إحصاءات من تحليل بياناتهم، وتساعد خرائط الاتصالات السلكية واللاسلكية المستخدمين في فهم تغطية مقدّمي الخدمات وجودتهم في منطقة خدمة معيّنة.
ومع ذلك، يصعب على مطوّري التطبيقات إنشاء عروض مرئية كبيرة لبيانات الخرائط تحقّق أداءً جيدًا وتوفّر تجربة مستخدم رائعة. يجب تحميل البيانات الكبيرة في الذاكرة من جهة العميل، ما يؤدي إلى بطء أوقات تحميل الخريطة الأولى. يجب أن يكون المحتوى المرئي عالي الأداء على جميع الأجهزة، بما في ذلك الهواتف الجوّالة ذات الأداء المنخفض التي تواجه قيودًا في الذاكرة ووحدة معالجة الرسومات. أخيرًا، على المطوّرين اختيار مكتبة كبيرة لعرض البيانات تكون قابلة للنقل وموثوقة وذات أداء جيد مع البيانات الكبيرة.
البنية المرجعية
يتطلب تطوير التطبيقات التي تتضمّن عروضًا مرئية كبيرة للبيانات مكوّنين رئيسيَّين.
- الخلفية الخاصة بالعميل: جميع بيانات التطبيق وخدماته في الخلفية، مثل المعالجة والتخزين
- عميل العميل: واجهة مستخدم تطبيقك التي تتضمّن مكوّنًا لعرض الخرائط.
في ما يلي مخطّط بياني للنظام يوضّح كيفية تفاعل هذين المكوّنين مع مستخدم التطبيق وGoogle Cloud و"منصّة خرائط Google" لإنشاء تطبيق كبير لعرض البيانات.
اعتبارات التصميم
هناك عدد من الاعتبارات التصميمية التي يجب اتّباعها لإنشاء رسوم بيانية للبيانات عالية الأداء باستخدام Google Cloud وGoogle Maps Platform.
- حجم بيانات المصدر ومعدّل تعديلها:
- إذا كانت البيانات المصدر بتنسيق geojson أصغر من 5 ميغابايت أو يتم تعديلها بشكل متكرر جدًا، مثل توقّعات رادار الطقس المباشر، ننصحك بعرض البيانات ككائن geojson من جهة العميل في تطبيقك وعرضها باستخدام طبقة deck.gl.
- إذا كان حجم بياناتك أكبر من 5 ميغابايت ولا يتم تعديلها أكثر من مرة في الساعة، ننصحك بالاطّلاع على بنية Datasets API في هذا المستند.
- تتيح مجموعات البيانات استخدام ملفات يصل حجمها إلى 350 ميغابايت.
- إذا كان حجم بياناتك أكبر من 350 ميغابايت، ننصحك بإزالة بيانات الأشكال الهندسية أو تبسيطها في الملف المصدر قبل نقلها إلى مجموعات البيانات (راجِع إزالة البيانات أدناه).
- المخطّط والتنسيق
- تأكَّد من أنّ بياناتك تحتوي على سمة معرّف فريدة على مستوى العالم لكلّ ميزة. يتيح لك المعرّف الفريد اختيار سمة معيّنة وتنسيقها أو دمج البيانات مع سمة لعرضها، على سبيل المثال، تنسيق سمة محدّدة في حدث المستخدِم "النقر".
- تنسيق البيانات بتنسيق CSV أو GeoJSON وفقًا لمواصفات Datasets API مع أسماء أعمدة وأنواع بيانات وأنواع عناصر GeoJSON صالحة
- لتسهيل إنشاء مجموعات البيانات من BigQuery، أنشئ عمودًا باسم
wkt
في عملية تصدير SQL بتنسيق CSV. تتيح مجموعات البيانات استيراد الأشكال الهندسية من ملف CSV بتنسيق نص معروف (WKT) من عمود يحمل الاسمwkt
. - تأكَّد من أنّ بياناتك تتضمّن أشكالًا وأنواع بيانات صالحة. على سبيل المثال، يجب أن يكون تنسيق GeoJSON في نظام الإحداثيات WGS84 وترتيب اللف الهندسي وما إلى ذلك.
- استخدِم أداة مثل geojson-validate للتأكّد من أنّ جميع الأشكال الهندسية في ملف المصدر صالحة أو ogr2ogr لتحويل ملف مصدر بين التنسيقات أو أنظمة التنسيقات.
- تقليل حجم البيانات
- قلِّل عدد خصائص العناصر. يمكنك ربط مواقع إضافية بميزة أثناء التشغيل باستخدام مفتاح معرّف فريد (مثال).
- استخدِم أنواع البيانات الصحيحة للكائنات الخاصة بالموقع كلما أمكن ذلك لتقليل مساحة تخزين المربّعات، مع الحفاظ على أداء المربّعات لتحميلها عبر بروتوكول HTTPS في تطبيق العميل.
- تبسيط و/أو تجميع الأشكال الهندسية للعناصر المعقدة جدًا: ننصحك باستخدام دوالّ BigQuery، مثل ST_Simplify على الأشكال الهندسية المعقدة للأشكال المتعددة الأضلاع لتقليل حجم الملف المصدر وتحسين أداء الخريطة.
- التجانب
- تعمل Google Maps Datasets API على إنشاء شرائح خرائط من ملف البيانات المصدر لاستخدامها مع حزمة تطوير برامج (SDK) لتطبيق "خرائط Google" على الويب أو الأجهزة الجوّالة.
- شرائح الخريطة هي نظام فهرسة يستند إلى التكبير/التصغير، ويقدّم طرقًا أكثر فعالية لتحميل البيانات إلى تطبيق مرئي.
- قد لا تظهر عناصر كثيفة أو معقّدة في مربّعات الخريطة عند مستويات التكبير/التصغير المنخفضة. عندما يكبِّر المستخدم الخريطة إلى مستوى ولاية أو بلد (مثل z5 إلى z12)، قد تبدو مختلفة عن مستوى تكبير مدينة أو حي (مثل z13 إلى z18).
مثال: السكك الحديدية في لندن
في هذا المثال، سنطبّق البنية المرجعية لإنشاء تطبيق ويب باستخدام "Google Cloud Platform" و"خرائط Google" يعرض جميع السكك الحديدية في لندن من بيانات Open Street Map (OSM).
المتطلبات الأساسية
- إذن بالوصول إلى BigQuery Sandbox وCloud Console
- تأكَّد من توفّر مشروع على Google Cloud Platform وحساب فوترة تم إعداده.
الخطوة 1: طلب البيانات في BigQuery
انتقِل إلى مجموعات البيانات العامة في BigQuery. تحتوي مجموعة البيانات "bigquery-public-data" والجدول geo_openstreetmap.planet_features
على بيانات Open Street Map (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 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 Platform ومراجعة مستندات واجهة برمجة التطبيقات. تتوفّر مكتبتا Python وNode.js للعملاء لاستدعاء Datasets API من منطق في الخلفية في تطبيقك. بالإضافة إلى ذلك، تتوفّر واجهة مستخدم رسومية لمجموعات البيانات لإنشاء مجموعات البيانات يدويًا في Cloud Console.
بعد اكتمال تحميل مجموعة البيانات، يمكنك معاينة مجموعة البيانات في واجهة المستخدم الرسومية لمجموعات البيانات.
الخطوة 4: ربط مجموعة البيانات بمعرّف خريطة
بعد إنشاء مجموعة البيانات، يمكنك إنشاء رقم تعريف خريطة مع نمط خريطة مرتبط. في محرِّر "نمط الخريطة"، يمكنك ربط mapId ونمط بمجموعة البيانات. يمكنك أيضًا تطبيق تصميم الخرائط المستند إلى السحابة الإلكترونية لتخصيص مظهر خريطتك ومضمونها.
الخطوة 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,
}
}
}
ملاحظة: احرص دائمًا على إضافة مصدر مجموعة البيانات إلى تطبيق الخرائط. لإضافة مصدر OpenStreetMap، اتّبِع مثال رمز المصدر في المستندات مع الالتزام بإرشادات OpenStreetMap.
عند بدء تشغيل الرمز البرمجي أعلاه في تطبيق ويب مكوّن من صفحة واحدة، ينتج عنه الرسم البياني التالي لبيانات الخريطة:
من هنا، يمكنك توسيع نطاق العرض المرئي للخريطة في دالة setStyle() من خلال إضافة منطق لفلترة الميزات وإضافة تنسيق استنادًا إلى تفاعل المستخدم والتفاعل مع بقية تطبيقك.
الخاتمة
في هذه المقالة، ناقشنا بنية مرجعية ومثالاً على تنفيذ تطبيق كبير لعرض البيانات باستخدام Google Cloud وGoogle Maps Platform. باستخدام هذه البنية المرجعية، يمكنك إنشاء تطبيقات لعرض بيانات الموقع الجغرافي من أي بيانات في Google Cloud Platform في BigQuery تحقّق أداءً جيدًا على أي جهاز باستخدام Google Maps Datasets API.
الإجراءات التالية
مراجع إضافية:
- مستندات واجهة برمجة التطبيقات Datasets API في "منصة خرائط Google"
- الاطّلاع على بياناتك في الوقت الفعلي باستخدام أنماط "قيادة البيانات"
- مقدمة إلى الإحصاءات المكانية الجغرافية في BigQuery
- استخدام GeoJSON في BigQuery لإجراء الإحصاءات المكانية الجغرافية
المساهمون
المؤلفون الرئيسيون:
- ريان باومان، مدير هندسة الحلول في "منصة خرائط Google"