يقدّم هذا المستند بنية مرجعية ومثالاً لإنشاء عروض مرئية لبيانات الخرائط باستخدام بيانات الموقع الجغرافي في 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 لتعديل بياناتك بانتظام.
الخطوة 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"