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

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

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