6.2. الدرس: تحليل البيانات المتجهية

يمكن أيضًا تحليل البيانات المتجهية للكشف عن كيفية تفاعل المعالم المختلفة بعضها مع بعض في المكان. هناك العديد من الوظائف المختلفة المتعلقة بالتحليل، لذا لن نتناولها جميعًا. بل سنطرح سؤالًا ونحاول حله باستخدام الأدوات التي يوفرها QGIS.

هدف هذا الدرس: طرح سؤال وحله باستخدام أدوات التحليل.

6.2.1. ★☆☆ عملية نظم المعلومات الجغرافية

قبل أن نبدأ، من المفيد تقديم لمحة موجزة عن عملية يمكن استخدامها لحل مشكلة ما. والطريقة المتبعة هي:

  1. تحديد المشكلة

  2. الحصول على البيانات

  3. تحليل المشكلة

  4. عرض النتائج

6.2.2. ★☆☆ المشكلة

لنبدأ العملية بتحديد مشكلة لحلها. على سبيل المثال، أنت وكيل عقاري وتبحث عن عقار سكني في Swellendam لعملاء لديهم المعايير التالية:

  1. يجب أن يكون في Swellendam

  2. يجب أن يكون على مسافة قيادة معقولة من مدرسة (لنقل 1km)

  3. يجب أن تزيد مساحته على 100 متر مربع

  4. أقرب من 50m إلى طريق رئيسي

  5. أقرب من 500m إلى مطعم

6.2.3. ★☆☆ البيانات

للإجابة عن هذه الأسئلة، سنحتاج إلى البيانات التالية:

  1. العقارات السكنية (المباني) في المنطقة

  2. الطرق داخل البلدة وحولها

  3. مواقع المدارس والمطاعم

  4. مساحات المباني

هذه البيانات متاحة عبر OSM، وستجد أن مجموعة البيانات التي استخدمتها طوال هذا الدليل يمكن استخدامها أيضًا في هذا الدرس.

إذا أردت تنزيل بيانات من منطقة أخرى، فانتقل إلى الفصل التمهيدي لتقرأ كيفية فعل ذلك.

ملاحظة

رغم أن تنزيلات OSM تحتوي على حقول بيانات متسقة، فإن التغطية والتفاصيل تتفاوت. فإذا وجدت مثلًا أن المنطقة التي اخترتها لا تحتوي على معلومات عن المطاعم، فقد تحتاج إلى اختيار منطقة أخرى.

6.2.4. ★☆☆ تابع معنا: بدء مشروع والحصول على البيانات

نحتاج أولًا إلى تحميل البيانات التي سنعمل عليها.

  1. ابدأ مشروع QGIS جديدًا

  2. إذا أردت، يمكنك إضافة خريطة خلفية. افتح Browser وحمّل الخريطة الخلفية OSM من القائمة XYZ Tiles.

    ../../../_images/osm_swellendam.png
  3. ستجد في قاعدة بيانات GeoPackage training_data.gpkg معظم مجموعات البيانات التي سنستخدمها في هذا الفصل:

    1. buildings

    2. roads

    3. restaurants

    4. schools

    حمّلها، وحمّل أيضًا landuse.sqlite.

  4. قرّب إلى امتداد الطبقة لترى Swellendam، جنوب أفريقيا

    قبل المتابعة سنصفّي الطبقة roads، لكي نعمل على أنواع محددة فقط من الطرق.

    بعض الطرق في مجموعات بيانات OSM مُدرجة بالأنواع unclassified و tracks و path و footway. نريد استبعادها من مجموعة بياناتنا والتركيز على أنواع الطرق الأخرى الأنسب لهذا التمرين.

    علاوة على ذلك، قد لا تكون بيانات OSM محدثة في كل مكان، لذا سنستبعد أيضًا القيم NULL.

  5. انقر بزر الفأرة الأيمن على الطبقة roads واختر Filter....

  6. في نافذة الحوار التي تظهر، نصفّي هذه المعالم بالتعبير التالي:

    "highway" NOT IN ('footway', 'path', 'unclassified', 'track') AND "highway" IS NOT NULL
    

    يؤدي الجمع بين العاملين NOT و IN إلى استبعاد جميع المعالم التي تحمل قيم السمات هذه في الحقل highway.

    يؤدي IS NOT NULL مع العامل AND إلى استبعاد الطرق التي لا قيمة لها في الحقل highway.

    لاحظ الأيقونة indicatorFilter بجوار الطبقة roads. فهي تذكّرك بأن هذه الطبقة عليها مرشّح مفعّل، لذا قد لا تكون بعض المعالم متاحة في المشروع.

يجب أن تبدو الخريطة بكل البيانات كالتالية:

../../../_images/osm_swellendam_2.png

6.2.5. ★☆☆ جرّب بنفسك: تحويل نظام الإحداثيات المرجعي للطبقات

لأننا سنقيس المسافات داخل طبقاتنا، نحتاج إلى تغيير نظام الإحداثيات المرجعي (CRS) للطبقات. ولفعل ذلك، نحتاج إلى تحديد كل طبقة على حدة، وحفظها في طبقة جديدة بالإسقاط الجديد، ثم استيراد تلك الطبقة الجديدة إلى خريطتنا.

لديك خيارات كثيرة مختلفة، فمثلًا يمكنك تصدير كل طبقة كمجموعة بيانات بصيغة ESRI Shapefile، أو إلحاق الطبقات بملف GeoPackage موجود، أو إنشاء ملف GeoPackage آخر وملؤه بالطبقات الجديدة المعاد إسقاطها. سنعرض الخيار الأخير، ليبقى training_data.gpkg نظيفًا. لا تتردد في اختيار سير العمل الأنسب لك.

ملاحظة

في هذا المثال نستخدم نظام الإحداثيات المرجعي WGS 84 / UTM zone 34S، لكن عليك استخدام نظام UTM أنسب لمنطقتك.

  1. انقر بزر الفأرة الأيمن على الطبقة roads في لوحة Layers

  2. انقر على Export --> Save Features As...

  3. في نافذة الحوار Save Vector Layer As اختر GeoPackage في Format

  4. انقر على ... بجوار File name، وسمِّ ملف GeoPackage الجديد vector_analysis

  5. غيّر Layer name إلى roads_34S

  6. غيّر CRS إلى WGS 84 / UTM zone 34S

  7. انقر على OK:

    ../../../_images/save_roads_34S.png

    سيؤدي هذا إلى إنشاء قاعدة بيانات GeoPackage جديدة وإضافة الطبقة roads_34S.

  8. كرّر هذه العملية لكل طبقة، بإنشاء طبقة جديدة في ملف GeoPackage vector_analysis.gpkg مع إلحاق _34S بالاسم الأصلي.

    على نظام macOS، اضغط على الزر Replace في نافذة الحوار التي تظهر للسماح لـ QGIS بالكتابة فوق ملف GeoPackage الموجود.

    ملاحظة

    عندما تختار حفظ طبقة في ملف GeoPackage موجود، فإن QGIS سوف يضيف تلك الطبقة بجوار الطبقات الموجودة فيه، ما لم توجد طبقة بالاسم نفسه.

  9. أزل كل طبقة من الطبقات القديمة من المشروع

  10. بعد إتمام العملية لجميع الطبقات، انقر بزر الفأرة الأيمن على أي طبقة ثم انقر على Zoom to layer extent لتركيز الخريطة على منطقة الاهتمام.

الآن بعد أن حوّلنا بيانات OSM إلى إسقاط UTM، يمكننا البدء بالحسابات.

6.2.6. ★☆☆ تابع معنا: تحليل المشكلة: المسافات من المدارس والطرق

يتيح لك QGIS حساب المسافات بين أي كائنات متجهية.

  1. تأكد من أن الطبقتين roads_34S و buildings_34S فقط هما الظاهرتان (لتبسيط الخريطة أثناء العمل)

  2. انقر على Processing ► Toolbox لفتح النواة التحليلية لـ QGIS. باختصار، جميع الخوارزميات (للتحليل المتجهي و الشبكي) متاحة في صندوق الأدوات هذا.

  3. نبدأ بحساب المنطقة المحيطة بالطبقة roads_34S باستخدام خوارزمية Buffer. يمكنك العثور عليها في المجموعة Vector Geometry.

    ../../../_images/processing_buffer_1.png

    أو يمكنك كتابة buffer في قائمة البحث في الجزء العلوي من صندوق الأدوات:

    ../../../_images/processing_buffer_2.png
  4. انقر عليها نقرًا مزدوجًا لفتح نافذة حوار الخوارزمية

  5. اختر roads_34S في Input layer، واضبط Distance على 50، واستخدم القيم الافتراضية لبقية المعاملات.

    ../../../_images/vector_buffer_setup.png
  6. القيمة الافتراضية لـ Distance بالأمتار لأن مجموعة بيانات الإدخال لدينا في نظام إحداثيات مُسقَط يستخدم المتر وحدةَ قياس أساسية. يمكنك استخدام القائمة المنسدلة لاختيار وحدات مُسقَطة أخرى مثل الكيلومترات والياردات وغيرها.

    ملاحظة

    إذا حاولت إنشاء نطاق عازل لطبقة في نظام إحداثيات جغرافي، فستحذّرك أدوات المعالجة وتقترح عليك إعادة إسقاط الطبقة إلى نظام إحداثيات متري.

  7. افتراضيًا، تُنشئ Processing طبقات مؤقتة وتضيفها إلى لوحة Layers. يمكنك أيضًا إلحاق النتيجة بقاعدة بيانات GeoPackage عن طريق:

    1. النقر على الزر ... واختيار Save to GeoPackage...

    2. تسمية الطبقة الجديدة roads_buffer_50m

    3. حفظها في الملف vector_analysis.gpkg

    ../../../_images/buffer_saving.png
  8. انقر على Run، ثم أغلق نافذة الحوار Buffer

    ستبدو خريطتك الآن على هذا النحو تقريبًا:

    ../../../_images/roads_buffer_result.png

إذا كانت طبقتك الجديدة في أعلى قائمة Layers، فمن المحتمل أن تحجب جزءًا كبيرًا من خريطتك، لكنها تعطيك جميع المناطق في منطقتك التي تقع ضمن 50m من طريق.

لاحظ وجود مناطق منفصلة داخل النطاق العازل، تقابل كلٌّ منها طريقًا منفردًا. للتخلص من هذه المشكلة:

  1. ألغِ تحديد الطبقة roads_buffer_50m وأعد إنشاء النطاق العازل مع تفعيل Dissolve results.

    ../../../_images/dissolve_buffer_setup.png
  2. احفظ المخرجات باسم roads_buffer_50m_dissolved

  3. انقر على Run وأغلق نافذة الحوار Buffer

بعد إضافة الطبقة إلى لوحة Layers، ستبدو على هذا النحو:

../../../_images/dissolve_buffer_results.png

لم تعد هناك الآن تقسيمات غير ضرورية.

ملاحظة

يشرح Short Help على الجانب الأيمن من نافذة الحوار طريقة عمل الخوارزمية. إذا احتجت إلى مزيد من المعلومات، فانقر على الزر Help في الجزء السفلي لفتح دليل أكثر تفصيلًا للخوارزمية.

6.2.7. ★☆☆ جرّب بنفسك: المسافة من المدارس

استخدم النهج نفسه المتبع أعلاه وأنشئ نطاقًا عازلًا للمدارس.

يجب أن يكون نصف قطره 1 km. احفظ الطبقة الجديدة في الملف vector_analysis.gpkg باسم schools_buffer_1km_dissolved.

6.2.8. ★☆☆ تابع معنا: المناطق المتداخلة

حدّدنا الآن المناطق التي يبعد فيها الطريق أقل من 50 مترًا، والمناطق التي توجد فيها مدرسة ضمن 1 km (خط مستقيم، وليس عبر الطريق). لكن من الواضح أننا نريد فقط المناطق التي يتحقق فيها هذان المعياران معًا. لذلك سنحتاج إلى استخدام الأداة Intersect. يمكنك العثور عليها في المجموعة Vector Overlay في Processing Toolbox.

  1. استخدم طبقتي النطاق العازل في Input layer و Overlay layer، واختر ملف GeoPackage vector_analysis.gpkg في Intersection مع Layer name road_school_buffers_intersect. اترك الباقي كما هو مقترح (افتراضي).

    ../../../_images/school_roads_intersect.png
  2. انقر على Run.

    في الصورة أدناه، المناطق الزرقاء هي التي يتحقق فيها معيارا المسافة كلاهما.

    ../../../_images/intersect_result.png
  3. يمكنك إزالة طبقتي النطاق العازل والإبقاء فقط على الطبقة التي تُظهر مكان تداخلهما، لأن هذا ما أردنا معرفته أصلًا:

    ../../../_images/final_intersect_result.png

6.2.9. ★☆☆ تابع معنا: استخراج المباني

لديك الآن المنطقة التي يجب أن تتداخل معها المباني. بعد ذلك تريد استخراج المباني الواقعة في تلك المنطقة.

  1. ابحث عن عنصر القائمة Vector Selection ► Extract by location داخل Processing Toolbox

  2. اختر buildings_34S في Extract features from. حدّد intersect في Where the features (geometric predicate)، واختر طبقة تقاطع النطاقات العازلة في By comparing to the features from. احفظ في vector_analysis.gpkg، وسمِّ الطبقة well_located_houses.

    ../../../_images/location_select_dialog.png
  3. انقر على Run وأغلق نافذة الحوار

  4. ستجد على الأرجح أن شيئًا لم يتغير كثيرًا. في هذه الحالة، انقل الطبقة well_located_houses إلى أعلى قائمة الطبقات، ثم كبّر العرض.

    ../../../_images/select_zoom_result.png

    المباني الحمراء هي التي تطابق معاييرنا، بينما المباني الخضراء هي التي لا تطابقها.

  5. لديك الآن طبقتان منفصلتان ويمكنك إزالة buildings_34S من قائمة الطبقات.

6.2.10. ★★☆ جرّب بنفسك: تصفية المباني أكثر

لدينا الآن طبقة تُظهر جميع المباني الواقعة ضمن 1km من مدرسة وضمن 50m من طريق. نحتاج الآن إلى تقليص هذا التحديد لإظهار المباني الواقعة ضمن 500m من مطعم فقط.

باستخدام العمليات الموضحة أعلاه، أنشئ طبقة جديدة باسم houses_restaurants_500m تُصفّي الطبقة well_located_houses أكثر لتُظهر فقط المباني الواقعة ضمن 500m من مطعم.

6.2.11. ★☆☆ تابع معنا: تحديد المباني ذات المساحة المناسبة

لمعرفة المباني ذات المساحة المناسبة (أكثر من 100 متر مربع)، نحتاج إلى حساب مساحتها.

  1. حدّد الطبقة houses_restaurants_500m وافتح Field Calculator بالنقر على الزر calculateField Open Field Calculator في شريط الأدوات الرئيسي أو في نافذة جدول البيانات الوصفية

  2. اختر Create a new field، واضبط Output field name على AREA، واختر Decimal number (real) في Output field type، واختر $area من المجموعة Geometry.

    ../../../_images/buildings_area_calculator.png

    سيحتوي الحقل الجديد AREA على مساحة كل مبنى بالمتر المربع.

  3. انقر على OK. أُضيف الحقل AREA في نهاية جدول البيانات الوصفية.

  4. انقر على الزر toggleEditing Toggle Editing لإنهاء التحرير، واحفظ تعديلاتك عند المطالبة.

  5. في التبويب Source من خصائص الطبقة، اضبط Provider Feature Filter على "AREA >= 100.

    ../../../_images/buildings_area_query.png
  6. انقر على OK.

يجب أن تُظهر خريطتك الآن فقط المباني التي تطابق معاييرنا الأولية والتي تزيد مساحتها على 100 متر مربع.

6.2.12. ★☆☆ جرّب بنفسك:

احفظ حلّك كطبقة جديدة، مستخدمًا الطريقة التي تعلمتها أعلاه. يجب حفظ الملف داخل قاعدة بيانات GeoPackage نفسها، باسم solution.

6.2.13. الخلاصة

باستخدام نهج حل المشكلات في نظم المعلومات الجغرافية (GIS) مع أدوات التحليل المتجهي في QGIS، تمكّنت من حل مشكلة متعددة المعايير بسرعة وسهولة.

6.2.14. ما التالي؟

في الدرس التالي، سنتعرف على كيفية حساب أقصر مسافة على طول الطرق من نقطة إلى أخرى.