تقدّم هذه المستندات بنية مرجعية ومثالاً لإنشاء تصوّرات لبيانات الخرائط باستخدام بيانات الموقع الجغرافي في Google Cloud BigQuery ومنصة خرائط Google Datasets API، مثل تحليل البيانات البلدية المفتوحة أو إنشاء خريطة تغطية الاتصالات أو تصوُّر آثار حركة أسطول المركبات الجوّالة.
تُعدّ تصوّرات بيانات الخرائط أداة قوية لجذب المستخدمين والكشف عن الإحصاءات المكانية في بيانات الموقع الجغرافي. بيانات الموقع الجغرافي هي البيانات التي تتضمّن ميزات النقاط أو الخطوط أو المضلّعات. على سبيل المثال، تساعد خرائط الطقس المستهلكين في فهم الرحلات والتخطيط لها والاستعداد للعواصف، وتساعد خرائط ذكاء الأعمال المستخدمين في الكشف عن الإحصاءات من تحليل بياناتهم، وتساعد خرائط الاتصالات المستخدمين في فهم تغطية موفّري الخدمات وجودتها في منطقة نطاق الخدمة معيّنة.
ومع ذلك، يصعب على مطوّري التطبيقات إنشاء تصوّرات كبيرة لبيانات الخرائط تكون فعّالة وتوفّر تجربة مستخدم رائعة. يجب تحميل البيانات الكبيرة في ذاكرة التخزين المؤقت على جانب العميل، ما يؤدي إلى بطء أوقات تحميل الخريطة الأولى. يجب أن يكون التصوُّر فعّالاً على جميع الأجهزة، بما في ذلك الهواتف الجوّالة المنخفضة الأداء التي تعاني من قيود في الذاكرة ووحدة معالجة الرسومات. وأخيرًا، على المطوّرين اختيار مكتبة عرض بيانات كبيرة تكون قابلة للنقل وموثوقة وفعّالة مع البيانات الكبيرة.
البنية المرجعية
يتطلّب تطوير التطبيقات التي تتضمّن تصوّرات كبيرة للبيانات مكوّنَين رئيسيَّين.
- الواجهة الخلفية للعميل : تشمل جميع بيانات التطبيق وخدماته في الواجهة الخلفية، مثل المعالجة والتخزين.
- الواجهة الأمامية للعميل : تشمل واجهة مستخدم التطبيق التي تتضمّن مكوّن تصوُّر الخريطة.
في ما يلي مخطط نظام يوضّح كيفية تفاعل هذين المكوّنَين مع مستخدم التطبيق وGoogle Cloud و"منصة خرائط Google" لإنشاء تطبيق تصوُّر بيانات كبيرة.

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

الخطوة 4: ربط مجموعة البيانات بمعرّف خريطة
بعد إنشاء مجموعة البيانات، يمكنك إنشاء معرّف خريطة يتضمّن نمط خريطة مرتبطًا. في أداة تعديل نمط الخريطة، يمكنك ربط mapId والنمط بمجموعة البيانات. هذا هو المكان الذي يمكنك فيه أيضًا تطبيق ميزة تنسيق الخريطة المستند إلى السحابة الإلكترونية لتخصيص شكل الخريطة ومظهرها.
الخطوة 5: إنشاء تصوُّر الخريطة في تطبيق العميل
أخيرًا، يمكنك إضافة مجموعة البيانات إلى تطبيق تصوُّر البيانات من جهة العميل باستخدام Maps JS API. ابدأ عنصر إنشاء الخريطة باستخدام mapID المرتبط بمجموعة البيانات من الخطوة السابقة. بعد ذلك، اضبط نمط طبقة مجموعة البيانات وتفاعلها. راجِع دليل استخدام الأنماط المستندة إلى البيانات مع Datasets للحصول على مزيد من التفاصيل.
يمكنك تخصيص النمط وإضافة معالِجات الأحداث لتغيير النمط ديناميكيًا والمزيد باستخدام 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". باستخدام هذه البنية المرجعية، يمكنك إنشاء تطبيقات تصوُّر بيانات الموقع الجغرافي من أي بيانات في Google Cloud BigQuery تكون فعّالة على أي جهاز باستخدام Google Maps Datasets API.
الخطوات التالية
قراءات إضافية:
- مستندات Google Maps Platform Datasets API
- عرض بياناتك في الوقت الفعلي باستخدام ميزة "الأنماط المستندة إلى البيانات"
- مقدمة عن الإحصاءات الجغرافية المكانية في BigQuery
- استخدام GeoJSON في BigQuery للإحصاءات الجغرافية المكانية
المساهمون
المؤلفون الرئيسيون:
- ريان بومان، مدير هندسة حلول منصة خرائط Google