GISarabia.org
QGIS 3.44 LTR · EPSG:4326 / 32638 · 13 chapters

كتيب مختصر وسريع: نظم المعلومات الجغرافية GIS وبرنامج QGIS

من المبتدئ إلى المحترف، بلقطات حقيقية من البرنامج وتطبيقات على شبكة ألياف ضوئية في الرياض.

مقدمة الكتيب

كتيب مختصر وسريع: يجمع أهم ما تحتاجه للبدء والعمل في 13 فصلًا مركّزًا. أما الشرح الكامل والتفصيلي لكل أداة ونافذة فتجده في الترجمة العربية الكاملة لوثائق QGIS الرسمية على هذا الموقع.

يأخذك هذا الكتيب من الصفر إلى مستوى الاحتراف في نظم المعلومات الجغرافية (GIS) باستخدام برنامج QGIS المجاني مفتوح المصدر، عبر 13 فصلًا مقسّمة على ثلاثة مستويات.

لمن هذا الكتيب؟ لطلاب الجغرافيا والهندسة والتخطيط والبيئة، ولكل من يريد تحويل البيانات المكانية إلى خرائط وتحليلات وقرارات. لا يُفترض أي معرفة سابقة بالبرنامج.

كيف تستخدمه؟

  1. اقرأ الفصل، ثم نفّذ الخطوات بنفسك على QGIS مفتوحًا أمامك.

  2. أسماء القوائم والأدوات مكتوبة بالإنجليزية كما تظهر في البرنامج، مثل Layer › Add Layer، والشرح بالعربية.

  3. في نهاية كل مستوى تمرين تطبيقي؛ لا تنتقل للمستوى التالي قبل إنجازه.

  4. الصور التوضيحية نوعان: لقطات حقيقية من واجهة QGIS، ورسوم تشرح مفاهيم البيانات الجغرافية.

خريطة المستويات

المستوىالفصولماذا ستتقنالناتج المتوقع
مبتدئ1–5مفاهيم GIS، أنواع البيانات، الإحداثيات، واجهة QGISمشروع QGIS بطبقات معروضة ومحفوظة
متوسط6–9الترميز، التحرير، التحليل المكاني، إخراج الخرائطخريطة موضوعية جاهزة للطباعة
محترف10–13تحليل الرستر، الأتمتة، PyQGIS، PostGIS وخدمات الويبسير عمل مؤتمت ومشروع تحليلي متكامل

ما تحتاجه: جهاز بنظام Windows أو macOS أو Linux، وبرنامج QGIS بإصدار LTR (طويل الدعم)، وبيانات التدريب المرفقة في مجلد الكتيب.

المستوى 1المبتدئ

1ما هي نظم المعلومات الجغرافية GIS؟

نظم المعلومات الجغرافية (Geographic Information Systems) هي منظومة لجمع البيانات المرتبطة بموقع على سطح الأرض، وتخزينها، وتحليلها، وعرضها على شكل خرائط. الفكرة الأساسية: كل معلومة لها مكان، وربط المعلومة بمكانها يكشف أنماطًا لا تظهر في الجداول وحدها.

مثال بسيط: جدول فيه 16 موقع اتصالات وسعة كل منها لا يجيب عن سؤال «أي المواقع تبعد أكثر من 500 م عن أقرب كابل ألياف ضوئية؟». عندما نضع المواقع ومسارات الكابلات على الخريطة ونرسم حول الكابلات ممرًا بعرض 500 م، يظهر الجواب فورًا.

مكونات GIS الخمسة

  1. العتاد (Hardware): الحاسوب، أجهزة GPS، الطائرات المسيّرة، الماسحات.

  2. البرمجيات (Software): مثل QGIS (مجاني) وArcGIS Pro (تجاري)، وقواعد البيانات مثل PostGIS.

  3. البيانات (Data): أهم مكوّن وأغلاه؛ خرائط، صور أقمار صناعية، جداول بإحداثيات.

  4. الأشخاص (People): المحللون والفنيون ومتخذو القرار.

  5. الأساليب (Methods): خطوات العمل والمعايير التي تضمن نتائج صحيحة.

مكونات GIS الخمسة: البيانات والعتاد والبرمجيات والأشخاص والأساليب
مكونات GIS الخمسة

ما الذي يمكن أن تفعله GIS؟

المجالمثال تطبيقيالسؤال الذي تجيب عنه
التخطيط العمرانياختيار موقع مدرسة جديدةأين تقع الأحياء الأبعد عن المدارس الحالية؟
الاتصالاتتخطيط شبكات الألياف الضوئية (FTTH)أي المباني والأبراج تقع ضمن 500 م من كابل الألياف؟
البيئةرصد التصحركيف تغيّر الغطاء النباتي بين 2010 و2025؟
النقلتحسين مسارات الحافلاتما أقصر طريق يمر بكل المحطات؟
الزراعةالري الدقيقأي أجزاء المزرعة أكثر جفافًا؟
الطوارئخرائط مخاطر السيولأي المباني تقع في مجاري الأودية؟

لماذا QGIS؟

خلاصة الفصل: GIS = بيانات + موقع + تحليل + خريطة. وQGIS هو أداتك لتطبيق ذلك عمليًا.

2أنواع البيانات الجغرافية

كل بيانات GIS تُخزَّن بأحد نموذجين: المتجهي (Vector) الذي يصف الأشياء بنقاط وخطوط ومضلعات، والشبكي (Raster) الذي يقسّم المكان إلى خلايا منتظمة لكل خلية قيمة.

مقارنة بين النموذج المتجهي والشبكي لنفس المشهد
مقارنة بين النموذج المتجهي والشبكي لنفس المشهد

البيانات المتجهية (Vector)

تُمثّل المعالم بإحداثيات رؤوس (Vertices)، ولها ثلاثة أنواع هندسية:

النوعالوصفأمثلةما يُقاس
نقطة Pointزوج إحداثيات (X, Y)برج اتصالات، غرفة تفتيش، خزانة توزيعالموقع فقط
خط Lineسلسلة نقاط متصلةكابل ألياف ضوئية، طريق، نهرالطول
مضلع Polygonخط مغلق يحيط بمساحةدولة، بحيرة، قطعة أرضالمساحة والمحيط

كل معلم متجهي له بيانات وصفية (Attributes) مخزنة في جدول: المعلم الواحد = صف واحد، وكل عمود هو حقل (Field) مثل الاسم أو عدد السكان.

العلاقة بين المعالم على الخريطة وصفوف جدول البيانات الوصفية
العلاقة بين المعالم على الخريطة وصفوف جدول البيانات الوصفية

البيانات الشبكية (Raster)

شبكة من الخلايا (بكسلات) متساوية الحجم، وكل خلية تحمل قيمة رقمية: ارتفاع، حرارة، نوع غطاء أرضي، أو لون في صورة جوية. أهم خاصية هي الدقة المكانية (Resolution): طول ضلع الخلية على الأرض.

نفس نموذج الارتفاع بثلاث دقّات مكانية مختلفة
نفس نموذج الارتفاع بثلاث دقّات مكانية مختلفة

أمثلة شائعة: صور Sentinel-2 بدقة 10 م، نماذج الارتفاع الرقمية SRTM بدقة 30 م، والصور الجوية بدقة أقل من متر.

متى أستخدم كل نموذج؟

المعيارمتجهي Vectorشبكي Raster
الظواهر المناسبةمعالم ذات حدود واضحة (طرق، مبانٍ، حدود إدارية)ظواهر متصلة (ارتفاع، حرارة، أمطار)
الدقة الهندسيةعالية ولا تتأثر بالتكبيرمحدودة بحجم الخلية
حجم الملفصغير غالبًاكبير مع الدقة العالية
أشهر التحليلاتالنطاق العازل، التقاطع، الشبكاتالانحدار، الجبر الخرائطي، الملاءمة
أشهر الصيغGeoPackage، Shapefile، GeoJSON، KMLGeoTIFF، JPEG2000، ASCII Grid

الطبقات (Layers)

تنظيم GIS يشبه أوراقًا شفافة فوق بعضها: كل نوع من المعلومات في طبقة مستقلة، وكل الطبقات مرتبطة بنفس الإحداثيات فتتطابق.

البيانات منظمة على شكل طبقات فوق بعضها
البيانات منظمة على شكل طبقات فوق بعضها

صيغ الملفات الأشهر

بيانات التدريب المرفقة (في مجلد «بيانات التدريب»): gis_training.gpkg يضم 6 طبقات (الدول، مناطق السعودية، المدن، الأنهار، الطرق، البحيرات) من Natural Earth، وfiber_network.gpkg يضم شبكة ألياف ضوئية تدريبية في الرياض (fiber_cables الكابلات، central_offices المقاسم، roads_osm الطرق الرئيسية)، وtelecom_sites.csv بـ 16 موقع اتصالات، وdem_asir_training.tif نموذج ارتفاع بدقة 30 م. الطرق حقيقية من OpenStreetMap، ومسارات الكابلات مرسومة على هذه الطرق، أما المواقع والكابلات ونموذج الارتفاع فبيانات مولّدة للتدريب ولا تمثل شبكة مشغّل حقيقي.

3أنظمة الإحداثيات والإسقاطات (CRS)

نظام الإحداثيات المرجعي (Coordinate Reference System) هو «اللغة» التي تصف بها الأرقام موقعًا على الأرض. إذا اختلف النظام بين طبقتين ولم يُعرَّف بشكل صحيح، لن تتطابقا، وستكون المساحات والمسافات خاطئة. هذا أكثر مصدر لأخطاء المبتدئين.

النظام الجغرافي: خطوط الطول والعرض

يحدد الموقع بزاويتين بالدرجات على شكل الأرض الكروي:

خطوط الطول والعرض وموقع الرياض
خطوط الطول والعرض وموقع الرياض

النظام الأشهر هو WGS 84 ورمزه EPSG:4326، وهو الذي تستخدمه أجهزة GPS وخرائط الهواتف. عيبه أن وحدته الدرجة، والدرجة ليست مسافة ثابتة (حوالي 111 كم لدرجة العرض، لكن درجة الطول تصغر كلما ابتعدنا عن الاستواء)؛ لذلك لا تحسب به مساحات أو مسافات.

الإسقاط (Projection)

الإسقاط معادلة رياضية تحوّل سطح الأرض الكروي إلى مستوٍ مسطّح بوحدات مترية. لا يوجد إسقاط مثالي: كل إسقاط يحافظ على خاصية (الشكل، أو المساحة، أو المسافة) على حساب غيرها.

العالم بثلاثة إسقاطات مختلفة
العالم بثلاثة إسقاطات مختلفة

في إسقاط ميركاتور تبدو غرينلاند أكبر من السعودية بكثير، مع أن مساحة غرينلاند (حوالي 2.17 مليون كم²) لا تزيد إلا قليلًا عن السعودية (حوالي 2.15 مليون كم²).

إسقاط UTM

إسقاط ميركاتور المستعرض العالمي (UTM) يقسّم العالم إلى 60 نطاقًا، عرض كل نطاق 6 درجات، وهو دقيق جدًا لقياس المسافات والمساحات داخل النطاق بالمتر. الوطن العربي يمتد تقريبًا من النطاق 28 إلى 40.

نطاقات UTM فوق الوطن العربي
نطاقات UTM فوق الوطن العربي

أنظمة شائعة يجب أن تعرفها

الرمزالاسمالوحدةالاستخدام
EPSG:4326WGS 84 (جغرافي)درجةتخزين وتبادل البيانات، GPS
EPSG:3857Web Mercatorمترخرائط الويب (OSM، Google) — للعرض فقط
EPSG:32637 / 32638 / 32639UTM النطاقات 37N / 38N / 39Nمترالقياس في غرب / وسط / شرق الجزيرة العربية
EPSG:32636UTM 36Nمترمصر والأردن وسوريا
EPSG:8857Equal Earthمترخرائط عالمية بمساحات صحيحة

الإسقاط في QGIS

في QGIS ثلاثة مستويات من CRS يجب التفريق بينها:

  1. CRS الطبقة: النظام الذي حُفظت به البيانات فعليًا. يظهر في Layer Properties › Information.

  2. CRS المشروع: النظام الذي تُعرض به كل الطبقات معًا. يظهر في الزاوية اليمنى السفلى من النافذة (مثل EPSG:4326)، ويُغيّر من Project › Properties › CRS.

  3. إعادة الإسقاط الفورية (On-the-fly): يعيد QGIS إسقاط كل طبقة للعرض تلقائيًا دون تغيير الملف الأصلي.

نافذة Layer Properties › Information تعرض CRS الطبقة والمصدر وعدد المعالم
نافذة Layer Properties › Information تعرض CRS الطبقة والمصدر وعدد المعالم
نافذة Project Properties › CRS لاختيار نظام إحداثيات المشروع
نافذة Project Properties › CRS لاختيار نظام إحداثيات المشروع

لتغيير CRS البيانات فعليًا (لا العرض فقط) استخدم أداة Vector › Data Management Tools › Reproject Layer، أو انقر بزر الفأرة الأيمن على الطبقة ← Export › Save Features As واختر CRS جديدًا.

تنبيه مهم: أمر Set Layer CRS لا يُعيد الإسقاط، بل يُخبر QGIS فقط بـ«ما هو النظام الصحيح». استخدمه فقط إذا كان CRS الطبقة مفقودًا أو معرّفًا خطأً.

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

4تثبيت QGIS والتعرف على الواجهة

التثبيت

  1. ادخل إلى الموقع الرسمي qgis.org واختر نظام تشغيلك.

  2. اختر إصدار LTR (Long Term Release)؛ فهو الأكثر استقرارًا ومناسب للتعلم والعمل. الإصدار الأحدث (Latest) فيه ميزات جديدة لكنه أقل استقرارًا.

  3. في Windows يمكنك استخدام المثبّت المستقل (MSI) أو مثبّت OSGeo4W الذي يسهّل التحديثات وإضافة المكتبات.

  4. بعد التثبيت افتح QGIS Desktop من قائمة ابدأ.

لغة الواجهة: هذا الكتيب يستخدم الواجهة الإنجليزية. لتغييرها: Settings › Options › General › Override system locale ثم أعد تشغيل البرنامج.

الواجهة الرئيسية

عند فتح مشروع جديد (Project › New أو Ctrl+N) تظهر الواجهة التالية، وهي مقسّمة إلى ست مناطق:

واجهة QGIS الرئيسية مع ترقيم المناطق الست
واجهة QGIS الرئيسية مع ترقيم المناطق الست
الرقمالمنطقةوظيفتها
1شريط القوائم Menu Barكل أوامر البرنامج: Project، Layer، Vector، Raster، Processing…
2أشرطة الأدوات Toolbarsأزرار سريعة: التكبير والتحريك والتحديد والتحرير والقياس
3لوحة المتصفح Browserتصفّح الملفات وقواعد البيانات وخدمات الويب، واسحب الطبقة إلى الخريطة
4لوحة الطبقات Layersقائمة الطبقات المفتوحة؛ الترتيب من الأعلى للأسفل = ما يظهر فوق ما
5لوحة الخريطة Map Canvasمساحة عرض الخريطة والتفاعل معها
6شريط الحالة Status Barإحداثيات المؤشر، مقياس الرسم، التدوير، وCRS المشروع (أقصى اليمين)

أهم القوائم

أدوات التنقل الأساسية

الأداةالوظيفةالاختصار
Pan Map (اليد)تحريك الخريطةاضغط مسافة مع السحب
Zoom In / Outتكبير / تصغيرعجلة الفأرة
Zoom Fullعرض كل الطبقاتCtrl+Shift+F
Zoom to Layerالتكبير على طبقة واحدةزر أيمن على الطبقة
Identify Featuresعرض بيانات معلم بالنقر عليهCtrl+Shift+I
Measure Lineقياس المسافاتCtrl+Shift+M

5مشروعك الأول في QGIS

في هذا الفصل ستبني مشروعًا يعرض دول الشرق الأوسط وشمال أفريقيا مع الأنهار والمدن الكبرى، ثم تضيف مواقع أبراج الاتصالات من ملف CSV وشبكة كابلات الألياف الضوئية فوق خريطة أساسية لمدينة الرياض.

الخطوة 1: إضافة طبقات متجهية

  1. افتح Layer › Data Source Manager (Ctrl+L).

  2. من القائمة اليسرى اختر Vector.

  3. في حقل Vector Dataset(s) اضغط زر … واختر الملف gis_training.gpkg.

  4. اضغط Add، وستظهر نافذة لاختيار الطبقات: اختر countries وrivers وcities.

نافذة Data Source Manager بصفحة Vector
نافذة Data Source Manager بصفحة Vector

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

الخطوة 2: ترتيب الطبقات

في لوحة Layers اسحب الطبقات ليصبح الترتيب من الأعلى: النقاط (cities)، ثم الخطوط (rivers)، ثم المضلعات (countries). القاعدة: النقاط فوق الخطوط فوق المضلعات فوق الرستر، وإلا غطّت الطبقات الممتلئة ما تحتها.

لعرض المدن الكبرى فقط: انقر بالزر الأيمن على cities ← Filter… واكتب التعبير:

SQL
"pop_max" > 1000000
المشروع بعد إضافة الدول والأنهار والمدن الكبرى
المشروع بعد إضافة الدول والأنهار والمدن الكبرى

الخطوة 3: استكشاف جدول البيانات الوصفية

انقر بالزر الأيمن على countries ← Open Attribute Table (أو F6).

جدول البيانات الوصفية لطبقة الدول
جدول البيانات الوصفية لطبقة الدول

ما يمكنك فعله في الجدول:

الخطوة 4: إضافة مواقع الاتصالات من CSV وشبكة الألياف

  1. Layer › Add Layer › Add Delimited Text Layer.

  2. اختر الملف telecom_sites.csv، وتأكد أن الترميز (Encoding) هو UTF-8 حتى تظهر القيم العربية بشكل صحيح. الملف يضم الحقول: site_id، type (برج ماكرو / خلية صغيرة)، tech (4G / 5G)، fiber (متصل / غير متصل)، capacity_gbps، dist_to_fiber_m (طول المسار على الطرق إلى الحلقة الرئيسية).

  3. في Geometry Definition اختر Point coordinates: الحقل X = lon، والحقل Y = lat، وGeometry CRS = EPSG:4326 - WGS 84 ثم Add.

  4. أضف من الملف fiber_network.gpkg الطبقتين fiber_cables (الكابلات) وcentral_offices (المقاسم). الكابلات نوعان في الحقل type: backbone (الحلقة الرئيسية، 144 شعيرة) وdistribution (كابلات التوزيع إلى الأبراج، 24 أو 48 شعيرة)، وكلها تمر على مسارات الطرق كما في الواقع.

  5. للتمييز السريع: لوّن الكابلات حسب type والمواقع حسب fiber بترميز Categorized (تفاصيله في الفصل 6).

الخطوة 5: إضافة خريطة أساسية (Basemap)

في لوحة Browser افتح XYZ Tiles وانقر مرتين على OpenStreetMap (إن لم يكن موجودًا: زر أيمن على XYZ Tiles ← New Connection، والرابط https://tile.openstreetmap.org/{z}/{x}/{y}.png). اسحب الطبقة إلى أسفل القائمة. يتغير CRS المشروع عادةً إلى EPSG:3857.

شبكة الألياف التدريبية فوق OpenStreetMap: الحلقة الرئيسية بالبرتقالي وكابلات التوزيع بالأزرق على مسارات الطرق، والمواقع المتصلة بالأخضر وغير المتصلة بالرمادي
شبكة الألياف التدريبية فوق OpenStreetMap: الحلقة الرئيسية بالبرتقالي وكابلات التوزيع بالأزرق على مسارات الطرق، والمواقع المتصلة بالأخضر وغير المتصلة بالرمادي

الخطوة 6: حفظ المشروع

Project › Save As (Ctrl+Shift+S) واحفظ المشروع بصيغة .qgz. انتبه: ملف المشروع لا يحتوي البيانات، بل يحفظ مساراتها وإعدادات العرض. إذا نقلت المشروع لجهاز آخر فانقل مجلد البيانات معه. لتفادي مشاكل المسارات: Project › Properties › General › Save paths = Relative.

تمرين المستوى المبتدئ

المستوى 2المتوسط

6الترميز والتصنيف والتسميات

الترميز (Symbology) يحوّل الأرقام في الجدول إلى ألوان وأحجام على الخريطة. الخريطة التي تلوّن المناطق حسب قيمة رقمية تسمى خريطة موضوعية تدرّجية (Choropleth).

أنواع الترميز في QGIS

افتح خصائص الطبقة (نقر مزدوج عليها) ← تبويب Symbology، واختر النوع من القائمة العلوية:

النوعالاستخداممثال
Single Symbolرمز واحد لكل المعالمكل الأنهار بلون أزرق
Categorizedلون لكل قيمة نصية (فئات)مواقع الاتصالات: متصل / غير متصل بالألياف
Graduatedتدرّج لوني أو حجمي لقيمة رقميةالدول حسب عدد السكان
Rule-basedقواعد بتعابير مخصّصةالطرق السريعة بلون والباقي بلون آخر
Heatmapخريطة حرارية لكثافة النقاطتركّز الحوادث المرورية

تطبيق: خريطة السكان في الدول العربية

  1. أضف طبقة countries وطبّق عليها الفلتر "is_arab" = 1.

  2. Symbology › Graduated، واختر العمود Value = pop_est.

  3. اختر التدرّج اللوني Color ramp = YlOrRd.

  4. اختر Mode = Natural Breaks (Jenks) وClasses = 5، ثم Classify ← OK.

تبويب Symbology بنوع Graduated وخمس فئات
تبويب Symbology بنوع Graduated وخمس فئات
النتيجة: خريطة تدرّجية لعدد السكان مع تسميات عربية
النتيجة: خريطة تدرّجية لعدد السكان مع تسميات عربية

طرق التصنيف: الاختيار يغيّر الرسالة

نفس البيانات يمكن أن تعطي خرائط مختلفة تمامًا حسب طريقة تقسيم الفئات:

الكثافة السكانية بثلاث طرق تصنيف
الكثافة السكانية بثلاث طرق تصنيف

خطأ شائع: لا تلوّن المضلعات بأعداد مطلقة (مثل عدد السكان) إذا كانت مساحاتها مختلفة جدًا؛ الأفضل استخدام معدل (كثافة = السكان ÷ المساحة). يمكنك كتابة هذا التعبير مباشرة في حقل Value بالضغط على زر ε: "pop_est" / ($area / 1000000).

التسميات (Labels)

  1. خصائص الطبقة ← تبويب Labels ← اختر Single Labels.

  2. Value: اختر الحقل name_ar للأسماء العربية.

  3. Text: اختر خطًا يدعم العربية (مثل Arial أو Tahoma أو Noto Sans Arabic) وحجمًا مناسبًا.

  4. Buffer: فعّل Draw text buffer بلون أبيض وحجم 1 مم لتبقى الكتابة مقروءة فوق أي لون.

  5. Placement: للنقاط اختر Around Point، وللخطوط Curved لتتبع الكتابة اتجاه النهر أو الطريق.

تبويب Labels بالحقل name_ar
تبويب Labels بالحقل name_ar

تسميات مخصّصة بالتعابير: اضغط زر ε بجانب Value واكتب مثلًا:

SQL
"name_ar" || '\n' || format_number("pop_est" / 1000000, 1) || ' مليون'

سيظهر اسم الدولة وتحته عدد السكان بالمليون.

حفظ النمط وإعادة استخدامه

في أسفل نافذة الخصائص اضغط Style › Save Style واحفظه بصيغة .qml، أو انقر بالزر الأيمن على الطبقة ← Styles › Copy Style ثم Paste Style على طبقة أخرى.

7إنشاء الطبقات وتحرير البيانات والإسناد الجغرافي

الرقمنة (Digitizing) هي رسم معالم جديدة على الخريطة وإدخال بياناتها. هذه مهارة أساسية عندما لا تتوفر البيانات التي تحتاجها جاهزة.

إنشاء طبقات جديدة

قبل أن ترسم أي معلم تحتاج طبقة فارغة تستقبله. إنشاء الطبقة يعني أن تقرر أربعة أشياء مسبقًا، ولا يسهل تغيير بعضها لاحقًا: صيغة التخزين، ونوع الشكل الهندسي، ونظام الإحداثيات، والحقول التي ستحمل البيانات الوصفية.

أين تجد أوامر الإنشاء؟

أي صيغة أختار؟

الصيغةمتى تستخدمهامزاياقيود
GeoPackage .gpkgالخيار الافتراضي لأي عمل جديدملف واحد يضم عدة طبقات، أسماء حقول طويلة، فهرس مكاني، يدعم العربيةلا شيء يُذكر للاستخدام الفردي
Shapefile .shpعند تسليم البيانات لجهة تطلبه تحديدًامدعوم في كل البرامج تقريبًاعدة ملفات لكل طبقة، أسماء الحقول ≤ 10 أحرف، نوع شكل واحد، حجم ≤ 2 GB
Temporary Scratch Layerتجربة سريعة أو نتيجة وسيطةلا ملفات، سريعة جدًاتُفقد عند إغلاق المشروع ما لم تحفظها
SpatiaLite .sqliteقاعدة بيانات SQL خفيفة في ملفاستعلامات SQL مكانيةأقل انتشارًا من GeoPackage
GPXنقاط ومسارات لأجهزة GPSتنقلها لجهاز GPS مباشرةحقول ثابتة، WGS 84 فقط
طبقة افتراضية (Virtual)نتيجة استعلام SQL على طبقات موجودةتتحدّث تلقائيًا ولا تكرّر البياناتللقراءة غالبًا، تعتمد على الطبقات الأصلية

إنشاء طبقة GeoPackage خطوة بخطوة

نافذة New GeoPackage Layer
نافذة New GeoPackage Layer (لقطة من وثائق QGIS الرسمية، CC BY-SA)
  1. Layer › Create Layer › New GeoPackage Layer.

  2. Database: اضغط … واختر ملف GeoPackage موجودًا لتضيف إليه طبقة، أو اكتب اسمًا جديدًا لإنشاء ملف جديد. يضيف QGIS الامتداد .gpkg تلقائيًا.

  3. Table name: اسم الطبقة داخل الملف، بأحرف لاتينية صغيرة ودون مسافات (مثل manholes).

  4. Geometry type: اختر Point أو LineString أو Polygon (أو الأنواع المتعددة Multi…)، أو No Geometry لجدول بلا أشكال. فعّل Include Z dimension فقط إن كنت ستخزّن ارتفاعات، وInclude M values للقياسات على الخطوط.

  5. نظام الإحداثيات: اضغط زر الكرة الأرضية واختر نظامًا متريًا مناسبًا لمنطقتك (مثل نطاق UTM الخاص بها) إن كنت ستقيس أطوالًا ومساحات، أو EPSG:4326 لتبادل البيانات.

  6. الحقول: في قسم New Field اكتب Name، واختر Type (انظر الجدول التالي)، وحدّد Maximum length للنصوص إن أردت، ثم اضغط Add to Fields List. كرّر لكل حقل، ورتّبها بأزرار الأسهم.

  7. اضغط OK. تظهر الطبقة فارغة في لوحة Layers، جاهزة للتحرير (القسم التالي).

ينشئ QGIS تلقائيًا حقل مفتاح أساسي اسمه fid، وحقل الشكل geometry مع فهرس مكاني. تجد هذه الخيارات تحت Advanced Options.

نوع الحقليُستخدم لـمثال
Text dataأسماء ورموز وأوصافname، status
Whole numberأعداد صحيحة ومعرّفاتfibers = 48
Decimal numberقياسات بكسورdepth_m = 1.2
Date / Date and timeتواريخ الإنشاء والصيانةinstalled
Booleanنعم/لاactive
Binary (BLOB)ملفات ثنائية (صور صغيرة)نادرًا

اختر نوع الحقل بعناية: الرقم المخزّن كنص لا يمكن ترتيبه أو جمعه أو تلوينه تدرّجيًا. وأسماء الحقول بالإنجليزية دون مسافات تتجنّب مشاكل التصدير والتعابير؛ ضع الاسم العربي في Layer Properties › Fields › Alias.

إنشاء طبقة Shapefile

نافذة New Shapefile Layer
نافذة New Shapefile Layer (لقطة من وثائق QGIS الرسمية، CC BY-SA)
  1. Layer › Create Layer › New Shapefile Layer.

  2. File name: مسار الملف واسمه، وFile encoding: اختر UTF-8 لتُحفظ القيم العربية بشكل صحيح.

  3. Geometry type: Point أو MultiPoint أو Line أو Polygon، أو No Geometry (ينتج ملف .dbf فقط)، ثم الأبعاد الإضافية: None أو Z (+ M values) أو M values.

  4. اختر نظام الإحداثيات، ثم أضف الحقول: الأنواع المتاحة Text data وWhole number وDecimal number وDate وBoolean، مع Length وPrecision.

  5. اضغط OK.

تبدأ قائمة الحقول عادة بحقل id يمكنك إبقاؤه أو حذفه. وتذكّر أن Shapefile يقتطع أسماء الحقول الأطول من 10 أحرف، لذا اختر أسماء قصيرة من البداية.

الطبقة المؤقتة (Temporary Scratch Layer)

نافذة New Temporary Scratch Layer
نافذة New Temporary Scratch Layer (لقطة من وثائق QGIS الرسمية، CC BY-SA)

طبقة في الذاكرة فقط، مثالية لرسم سريع أو لنتائج وسيطة. أنشئها من Layer › Create Layer › New Temporary Scratch Layer: اكتب Layer name، واختر Geometry type ونظام الإحداثيات. الحقول هنا اختيارية، وتدعم أنواعًا إضافية مثل Time.

انتبه: الطبقة المؤقتة تختفي عند إغلاق المشروع. تعرفها من أيقونة الشريحة بجانب اسمها؛ اضغطها، أو انقر بالزر الأيمن ← Make Permanent… لحفظها في GeoPackage قبل الإغلاق.

إنشاء طبقة من طبقة موجودة

كثيرًا ما تكون الطبقة الجديدة جزءًا من طبقة لديك، أو نسخة بصيغة أو نظام إحداثيات آخر:

إنشاء طبقة نقاط من جدول (CSV)

إن كانت لديك قائمة مواقع في Excel، احفظها بصيغة CSV (UTF-8) ثم أضفها بـ Layer › Add Layer › Add Delimited Text Layer كما في الفصل 5. الطبقة الناتجة للقراءة فقط؛ لتحريرها احفظها بـ Export › Save Features As… إلى GeoPackage. وإن كان في الجدول عمود بصيغة WKT (مثل POINT(46.7 24.7)) فاختر Well known text (WKT) بدل الإحداثيات.

الطبقة الافتراضية (Virtual Layer)

نافذة إنشاء طبقة افتراضية
نافذة إنشاء طبقة افتراضية (لقطة من وثائق QGIS الرسمية، CC BY-SA)

طبقة تُعرَّف باستعلام SQL على طبقات مفتوحة، دون نسخ بياناتها. افتح Layer › Add Layer › Add/Edit Virtual Layer، واكتب اسمًا واستعلامًا، مثل استخراج كابلات الحلقة الرئيسية فقط من طبقة fiber_cables في بيانات التدريب (عمود الشكل فيها اسمه geom):

SQL
SELECT cable_id, fibers, length_m, geom
FROM fiber_cables
WHERE type = 'backbone'

أي تعديل على fiber_cables يظهر فورًا في الطبقة الافتراضية.

مثال تطبيقي: طبقة كابلات جديدة

  1. Layer › Create Layer › New GeoPackage Layer.

  2. Database: اختر ملف GeoPackage (جديدًا أو موجودًا)، وTable name: مثل new_fiber_cables.

  3. Geometry type: اختر LineString لأن الكابل خط (ولغرف التفتيش أو الأبراج اختر Point)، واختر CRS متريًا مثل EPSG:32638 للرياض حتى تُحسب الأطوال بالمتر.

  4. في New Field أضف الحقول: cable_id (Text)، type (Text: backbone أو distribution)، fibers (Whole Number: عدد الشعيرات) ثم Add to Fields List ← OK.

قائمة تحقق قبل إنشاء أي طبقة

للتفاصيل الكاملة: «إنشاء الطبقات» في دليل مستخدم QGIS المترجم.

التحرير خطوة بخطوة

  1. حدّد الطبقة واضغط Toggle Editing (أيقونة القلم الأصفر). ستظهر أدوات شريط Digitizing مفعّلة.

  2. اضغط Add Line Feature (Ctrl+.) وانقر لكل رأس على امتداد الطريق الذي سيُمدّ فيه الكابل، بدءًا من نقطة على الحلقة الرئيسية وانتهاءً بالبرج، وانقر بالزر الأيمن للإنهاء.

  3. تظهر استمارة البيانات (Attribute Form): اكتب cable_id مثل DS-10، وtype = distribution، وfibers = 48، ثم OK.

  4. احفظ التعديلات بـ Save Layer Edits، ثم أنهِ التحرير بالضغط مرة أخرى على Toggle Editing. لحساب طول الكابل أضف حقلًا بالتعبير $length (الفصل 8).

وضع التحرير على طبقة كابلات الألياف: شريط Digitizing مفعّل والكابلات ممتدة على الطرق
وضع التحرير على طبقة كابلات الألياف: شريط Digitizing مفعّل والكابلات ممتدة على الطرق
استمارة إدخال بيانات كابل توزيع جديد
استمارة إدخال بيانات كابل توزيع جديد

أدوات التحرير الأكثر استخدامًا

الأداةالوظيفة
Vertex Toolتحريك الرؤوس أو إضافتها (نقر مزدوج على الخط) أو حذفها (Delete)
Move Featureنقل معلم كامل
Delete Selectedحذف المعالم المحددة
Split Featuresتقسيم مضلع أو خط بخط قطع
Reshape Featuresتعديل شكل حدود مضلع
Merge Selected Featuresدمج عدة معالم في معلم واحد
Undo / Redoالتراجع (Ctrl+Z) والإعادة (Ctrl+Shift+Z)

الالتقاط (Snapping) والطوبولوجيا

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

أخطاء طوبولوجية شائعة: فجوة، تداخل، قصور، تجاوز
أخطاء طوبولوجية شائعة: فجوة، تداخل، قصور، تجاوز

لتجنّبها: Project › Snapping Options (أو شريط Snapping)، فعّل أيقونة المغناطيس، واختر Vertex and Segment بتسامح 10 بكسلات، وفعّل Avoid Overlap للمضلعات. ولفحص طبقة موجودة: Vector › Geometry Tools › Check Validity، أو الإضافة المدمجة Topology Checker.

رقمنة الكابلات على الطرق: أضف طبقة roads_osm من fiber_network.gpkg، وفي Snapping Options اختر Advanced Configuration وفعّل الالتقاط على طبقة الطرق (Segment) وعلى طبقة الكابلات (Vertex). بهذا يلتصق كل رأس ترسمه بمحور الطريق، ويبدأ الكابل الجديد من رأس موجود فعليًا على الحلقة فلا تنشأ فجوات في الشبكة. ولرسم المسار آليًا على الطرق بدل الرسم اليدوي، استخدم أداة Shortest Path (Point to Point) في مجموعة Network Analysis مع طبقة roads_osm.

الإسناد الجغرافي (Georeferencing)

لديك خريطة ورقية ممسوحة ضوئيًا أو صورة بلا إحداثيات؟ الإسناد الجغرافي يربط نقاطًا في الصورة بإحداثياتها الحقيقية لتصبح طبقة رستر تتطابق مع باقي البيانات. للتدريب استخدم الملف scanned_map.jpg في مجلد بيانات التدريب (خريطة بلا إحداثيات تغطي من 30° إلى 60° شرقًا ومن 12° إلى 38° شمالًا).

  1. Layer › Georeferencer (أو Raster › Georeferencer في بعض الإصدارات).

  2. اضغط Open Raster واختر الصورة.

  3. اضغط Add Point وانقر على موقع معروف في الصورة (تقاطع طرق، رأس خليج، زاوية شبكة إحداثيات).

  4. في نافذة Enter Map Coordinates اكتب X (خط الطول) وY (خط العرض) وCRS، أو اضغط From Map Canvas وانقر على نفس الموقع في خريطة QGIS.

  5. كرّر لـ 4–6 نقاط تحكم (GCPs) موزّعة على أطراف الصورة.

  6. Settings › Transformation Settings: اختر Transformation type = Polynomial 1 (يحتاج 3 نقاط على الأقل)، وTarget CRS، واسم ملف المخرج.

  7. اضغط Start Georeferencing (المثلث الأخضر).

نافذة إدخال إحداثيات نقطة التحكم
نافذة إدخال إحداثيات نقطة التحكم
أداة Georeferencer مع الصورة وجدول نقاط التحكم GCP table أسفلها
أداة Georeferencer مع الصورة وجدول نقاط التحكم GCP table أسفلها

راقب عمود Residual في جدول النقاط: هو مقدار الخطأ لكل نقطة بالبكسل. الخطوط الحمراء في الصورة تمثّل هذه الأخطاء؛ احذف أو أعد وضع النقاط ذات الخطأ الكبير حتى يصبح متوسط الخطأ (Mean error) صغيرًا.

8الاستعلام والتحليل المكاني

التحليل المكاني هو ما يميّز GIS عن برامج الرسم: إنتاج معلومة جديدة من علاقات المواقع ببعضها. كل الأدوات موجودة في Processing › Toolbox (Ctrl+Alt+T)، وأشهرها في قائمة Vector.

أهم عمليات التحليل المكاني على البيانات المتجهية
أهم عمليات التحليل المكاني على البيانات المتجهية

الاستعلام بالصفات (Select by Attribute)

السؤال: «أي مواقع الجيل الخامس (5G) ما زالت غير متصلة بالألياف؟». استخدم Select Features by Expression (Ctrl+F3) على طبقة telecom_sites:

SQL
"tech" = '5G' AND "fiber" = 'غير متصل'

من الدوال المفيدة في محرّر التعابير: $area (المساحة)، $length (الطول)، "site_id" LIKE 'RUH-%'، "pop" IS NULL.

الاستعلام بالموقع (Select by Location)

السؤال: «أي المدن تقع داخل السعودية؟». Vector › Research Tools › Select by Location: Select features from = cities، العلاقة = are within، By comparing to = countries (مع تفعيل Selected features only بعد تحديد السعودية).

النطاق العازل (Buffer) — تطبيق كامل على شبكة الألياف

السؤال: «أي مواقع الاتصالات تقع ضمن 500 م من كابلات الألياف الموجودة، فيمكن توصيلها بتكلفة حفر منخفضة؟» الممر (Corridor) حول الكابل هو نطاق عازل حول خط، وهو أداة يومية في تخطيط شبكات FTTH.

  1. أعد الإسقاط أولًا: طبقة fiber_cables بالدرجات (EPSG:4326)، والنطاق العازل بالدرجات بلا معنى. استخدم Reproject Layer إلى EPSG:32638 (UTM 38N).

  2. افتح Vector › Geoprocessing Tools › Buffer.

  3. Input layer = الكابلات المُعاد إسقاطها، Distance = 500 بالمتر، وفعّل Dissolve result ليصبح الممر مضلعًا واحدًا، ثم Run.

  4. Vector › Research Tools › Select by Location: Select features from = telecom_sites، العلاقة = are within، By comparing to = الممر الناتج. المواقع المحددة هي المرشحة للتوصيل السريع، وما بقي خارجه يحتاج مسارًا جديدًا أطول.

نافذة أداة Buffer بمسافة 500 ودمج النتائج
نافذة أداة Buffer بمسافة 500 ودمج النتائج
النتيجة: ممر بعرض 500 م حول كابلات الألياف فوق خريطة الرياض، والمواقع الواقعة داخله محددة بالأصفر
النتيجة: ممر بعرض 500 م حول كابلات الألياف فوق خريطة الرياض، والمواقع الواقعة داخله محددة بالأصفر

لاحظ أن نافذة Buffer تعرض علامة تحذير صفراء بجانب المسافة إذا كانت الطبقة بالدرجات (degrees)، تذكيرًا بضرورة إعادة الإسقاط.

أدوات المعالجة الجغرافية الأخرى

الأداةالمسارالنتيجةمثال
ClipVector › Geoprocessingقص طبقة بحدود طبقة أخرىطرق السعودية فقط من طبقة طرق المنطقة
IntersectionVector › Geoprocessingالجزء المشترك مع دمج الصفاتالأراضي الزراعية داخل نطاق الفيضان
UnionVector › Geoprocessingكل المساحات من الطبقتين مع قطعها عند التقاطعدمج خريطتي استعمالات
DifferenceVector › Geoprocessingالمساحة غير المغطاةالأحياء خارج نطاق الخدمة
DissolveVector › Geoprocessingدمج المعالم حسب قيمة حقلدمج الدول حسب القارة
Count Points in PolygonVector › Analysis Toolsعدد النقاط داخل كل مضلععدد المدن في كل دولة
Distance to Nearest HubProcessing Toolboxأقرب معلم والمسافة إليهأقرب مقسم لكل برج اتصالات

الربط (Joins)

حاسبة الحقول (Field Calculator)

لإضافة عمود محسوب: افتح جدول البيانات ← زر Field Calculator (Ctrl+I)، فعّل Create a new field، الاسم area_km2، النوع Decimal، والتعبير:

SQL
$area / 1000000

الدالة $area تحسب المساحة الإهليلية بالمتر المربع حتى لو كانت الطبقة بالدرجات (حسب إعداد Ellipsoid في خصائص المشروع)، بينما area($geometry) تحسب بوحدات CRS الطبقة مباشرة.

تمرين المستوى المتوسط (1)

9إخراج الخرائط (Print Layout)

الخريطة النهائية المطبوعة تحتاج عناصر أساسية لا تظهر في لوحة الخريطة. تصمّم في نافذة مستقلة اسمها Layout Designer.

العناصر الإلزامية لأي خريطة

خطوات الإنشاء

  1. Project › New Print Layout (Ctrl+P) وأعطِ التخطيط اسمًا.

  2. من القائمة الجانبية اختر حجم الورقة: زر أيمن على الصفحة ← Page Properties (مثل A4 أفقي).

  3. Add Item › Add Map وارسم مستطيلًا على الصفحة. لضبط المنطقة المعروضة: أداة Move Item Content (C)، أو من تبويب Item Properties اضغط Set Map Extent to Match Main Canvas Extent.

  4. Add Item › Add Label للعنوان، واضبط الخط والمحاذاة.

  5. Add Item › Add Legend: ألغِ Auto update لتعديل أسماء الطبقات وحذف غير اللازم منها.

  6. Add Item › Add Scale Bar: اختر الوحدة (كم) وعدد الأجزاء وقيمة كل جزء (مثل 500 كم).

  7. Add Item › Add North Arrow.

  8. Layout › Export as Image / Export as PDF. اختر 300 DPI للطباعة و150 DPI للعرض على الشاشة.

نافذة Layout Designer أثناء تصميم خريطة السكان
نافذة Layout Designer أثناء تصميم خريطة السكان
الخريطة النهائية بعد التصدير كصورة
الخريطة النهائية بعد التصدير كصورة

نصائح لإخراج احترافي

تمرين المستوى المتوسط (2)

المستوى 3المحترف

10تحليل البيانات الشبكية ونماذج الارتفاع

نموذج الارتفاع الرقمي (DEM) هو رستر قيمة كل خلية فيه هي الارتفاع عن سطح البحر. منه نشتق خرائط الانحدار واتجاهه وتظليل التضاريس والأحواض المائية. مصادر DEM مجانية حقيقية: SRTM وCopernicus DEM بدقة 30 م (انظر الملاحق).

مشتقات نموذج الارتفاع: DEM، التظليل، الانحدار، اتجاه الانحدار
مشتقات نموذج الارتفاع: DEM، التظليل، الانحدار، اتجاه الانحدار

عرض DEM بشكل احترافي

  1. أضف dem_asir_training.tif (سحب وإفلات).

  2. Raster › Analysis › Hillshade: Azimuth = 315، Vertical angle = 45، Z factor = 1.

  3. في خصائص طبقة DEM ← Symbology ← Singleband pseudocolor بتدرّج لوني، واجعل الشفافية حوالي 40% أو استخدم Blending mode = Multiply.

  4. ضع طبقة DEM الملوّنة فوق طبقة Hillshade.

DEM ملوّن فوق تظليل التضاريس في QGIS
DEM ملوّن فوق تظليل التضاريس في QGIS

إذا كان DEM بالدرجات (EPSG:4326) فيجب ضبط Z factor أو إعادة إسقاطه أولًا (Raster › Projections › Warp (Reproject))، لأن الارتفاع بالمتر والمسافة الأفقية بالدرجات، فتخرج الانحدارات خاطئة تمامًا.

الانحدار واتجاهه

خريطة الانحدار في QGIS: الأخضر مستوٍ والأحمر شديد الانحدار
خريطة الانحدار في QGIS: الأخضر مستوٍ والأحمر شديد الانحدار

حاسبة الرستر (Raster Calculator)

Raster › Raster Calculator تسمح بكتابة معادلات على مستوى الخلية بين طبقة أو أكثر (الجبر الخرائطي Map Algebra). الطبقات تُكتب بالصيغة "اسم_الطبقة@رقم_النطاق".

نافذة Raster Calculator
نافذة Raster Calculator

أمثلة تعابير:

تعبير
"dem@1" > 2000                                  ← المناطق الأعلى من 2000 م (1 = نعم، 0 = لا)
("slope@1" < 10) * ("dem@1" < 1500)              ← أراضٍ منخفضة وقليلة الانحدار
("B8@1" - "B4@1") / ("B8@1" + "B4@1")            ← مؤشر الغطاء النباتي NDVI من صور Sentinel-2

مؤشر NDVI يُحسب من نطاقي الأشعة تحت الحمراء القريبة (NIR) والأحمر (Red):

معادلة
NDVI = \frac{NIR - Red}{NIR + Red}

قيمه من −1 إلى +1؛ فوق 0.3 غالبًا نبات كثيف، وقرب 0 تربة أو صخور، والسالب مياه.

أدوات رستر أساسية أخرى

الأداةالوظيفة
Reclassify by Tableتحويل القيم المستمرة إلى فئات (مثل 0–5° = 1، 5–15° = 2، أكثر = 3)
Clip Raster by Mask Layerقص الرستر بحدود مضلع
Zonal Statisticsإحصائيات الرستر داخل كل مضلع (متوسط الارتفاع لكل منطقة)
Contourاستخراج خطوط الكنتور بفاصل محدد (مثل 100 م)
Merge / Build Virtual Rasterدمج عدة ملفات رستر متجاورة
Polygonize / Rasterizeالتحويل بين الرستر والمتجهي
r.watershed / Fill sinks (SAGA/GRASS)تحليل الأحواض ومجاري الأودية

تطبيق: تحليل ملاءمة المواقع (Suitability)

المطلوب: أراضٍ مناسبة للبناء بالشروط: انحدار أقل من 8°، وارتفاع بين 1000 و2000 م، واتجاه غير شمالي.

  1. احسب Slope وAspect من DEM.

  2. في Raster Calculator اكتب:

تعبير
("slope@1" < 8) * ("dem@1" >= 1000) * ("dem@1" <= 2000) * ("aspect@1" > 45) * ("aspect@1" < 315)
  1. النتيجة رستر ثنائي: 1 = مناسب، 0 = غير مناسب. حوّله إلى مضلعات بـ Polygonize، واحذف المضلعات الصغيرة (مثل الأقل من 5 هكتارات) بتعبير $area < 50000.

هذا هو مبدأ التحليل متعدد المعايير (MCDA). في النسخة المتقدمة تُعطى كل طبقة درجات (1–5) وأوزانًا بدل نعم/لا، مثل 0.5 * slope_score + 0.3 * dist_road_score + 0.2 * landuse_score.

11مصمّم النماذج (Model Designer) والأتمتة

المحترف لا يكرّر نفس الخطوات يدويًا. QGIS يوفر ثلاث طرق للأتمتة دون برمجة، من الأبسط للأقوى.

1. التشغيل الدفعي (Batch Processing)

لتشغيل نفس الأداة على عشرات الملفات: في أي نافذة أداة اضغط Run as Batch Process… (أسفل النافذة)، ثم أضف الملفات بـ Autofill › Select Files وحدّد نمط أسماء المخرجات.

2. سجل المعالجة (History)

Processing › History يحفظ كل أداة شغّلتها مع معاملاتها الدقيقة، ويمكنك نسخها كأمر Python جاهز (مفيد جدًا للانتقال إلى الفصل 12).

3. مصمّم النماذج (Model Designer)

يربط عدة أدوات في سلسلة واحدة، مخرج كل أداة هو مدخل التالية، ثم يحوّل السلسلة إلى أداة جديدة تظهر في Processing Toolbox.

مثال: نموذج «ممر خدمة الألياف الضوئية» — يأخذ طبقة الكابلات وطبقة المواقع وعرض الممر، ويُخرج الممر وقائمة المواقع القابلة للتوصيل.

  1. Processing › Graphical Modeler (Ctrl+Alt+G).

  2. في تبويب Inputs اسحب Vector Layer وسمّه «طبقة كابلات الألياف» (نوع Line)، ثم Vector Layer ثانية «طبقة مواقع الاتصالات» (نوع Point)، ثم Number باسم «عرض الممر (م)» بقيمة افتراضية 500.

  3. في تبويب Algorithms اسحب Reproject Layer: المدخل = طبقة الكابلات، Target CRS = EPSG:32638.

  4. أضف Buffer: المدخل = مخرج Reproject، المسافة = المدخل الرقمي (Model Input)، وDissolve = نعم، واكتب اسمًا في حقل Buffered ليصبح مخرجًا نهائيًا «ممر خدمة الألياف».

  5. أضف Extract by Location: المدخل = طبقة المواقع، والمقارنة بـ = مخرج Buffer، والعلاقة = intersect، وسمّ المخرج «مواقع قابلة للتوصيل».

  6. اكتب اسم النموذج والمجموعة في Model Properties، ثم Save Model (ملف .model3) وشغّله بالزر الأخضر. جرّب تغيير العرض إلى 300 أو 1000 م ولاحظ تغيّر عدد المواقع.

النموذج في Model Designer: ثلاثة مدخلات، ثم Reproject ← Buffer + Dissolve ← Extract by Location، ومخرجان
النموذج في Model Designer: ثلاثة مدخلات، ثم Reproject ← Buffer + Dissolve ← Extract by Location، ومخرجان

النموذج الجاهز محفوظ في مجلد الكتيب باسم scripts/fiber_corridor.model3. لفتحه: في Processing Toolbox اضغط أيقونة النماذج ← Add Model to Toolbox.

لماذا النماذج مهمة؟ لأنها توثّق المنهجية بشكل مرئي، وتضمن تكرار النتائج نفسها، ويمكن مشاركتها مع زملائك، وتشغيلها دفعيًا كأي أداة أخرى. ومن القائمة Model › Export as Script Algorithm يمكن تحويل النموذج إلى كود Python.

صندوق الأدوات ومزوّدات الخوارزميات

في Processing Toolbox ستجد الأدوات مجمّعة حسب المزوّد: QGIS (native) وGDAL للرستر والتحويلات، وGRASS وSAGA (عبر إضافات) للتحليلات الهيدرولوجية والمتقدمة. استخدم مربع البحث أعلى اللوحة بدل التنقل في الشجرة.

لوحة Processing Toolbox على يمين النافذة بمجموعات الأدوات، والممر حول شبكة الألياف على الخريطة
لوحة Processing Toolbox على يمين النافذة بمجموعات الأدوات، والممر حول شبكة الألياف على الخريطة

إضافات ينصح بها المحترفون

Plugins › Manage and Install Plugins ثم ابحث بالاسم:

الإضافةالفائدة
QuickMapServicesخرائط أساسية وصور أقمار صناعية بنقرة
QuickOSMتنزيل بيانات OpenStreetMap (مدارس، طرق، مبانٍ) لأي منطقة
Semi-Automatic Classification (SCP)تنزيل وتصنيف صور Landsat وSentinel
ORS Tools / QNEAT3تحليل الشبكات: أقصر مسار ومناطق الوصول الزمني
qgis2webنشر الخريطة كصفحة ويب تفاعلية (Leaflet / OpenLayers)
DataPlotlyرسوم بيانية تفاعلية مرتبطة بالخريطة

12البرمجة بـ PyQGIS

PyQGIS هي واجهة Python التي تتحكم بكل شيء في QGIS: الطبقات، المعالم، الترميز، الأدوات، والتخطيطات. أمثلة هذا الفصل كلها على شبكة الألياف التدريبية. وكل صور البرنامج في الكتيب التُقطت بسكربت PyQGIS (الملفان scripts/steps.py وscripts/fiber_steps.py في مجلد الكتيب).

أين تكتب الكود؟

وحدة Python Console بعد حساب طول شبكة الألياف واستخراج المواقع غير المتصلة
وحدة Python Console بعد حساب طول شبكة الألياف واستخراج المواقع غير المتصلة

الأساسيات: الوصول للطبقات والمعالم

Python
sites = QgsProject.instance().mapLayersByName('telecom_sites')[0]
cables = QgsProject.instance().mapLayersByName('fiber_cables')[0]

print(sites.featureCount(), cables.crs().authid())
print([f.name() for f in sites.fields()])

for f in sites.getFeatures():
    print(f['site_id'], f['tech'], f['fiber'], f.geometry().asPoint())

تحميل طبقات من الكود

Python
gpkg = r'C:/path/to/fiber_network.gpkg'
cables = QgsVectorLayer(gpkg + '|layername=fiber_cables', 'كابلات الألياف', 'ogr')
roads = QgsVectorLayer(gpkg + '|layername=roads_osm', 'الطرق', 'ogr')
QgsProject.instance().addMapLayers([roads, cables])

الاستعلام والتحديد

Python
sites.selectByExpression('"fiber" = \'غير متصل\'')
print(sites.selectedFeatureCount())
iface.mapCanvas().zoomToSelected(sites)

# طلب مفلتر دون تحديد: مواقع الجيل الخامس
req = QgsFeatureRequest().setFilterExpression('"tech" = \'5G\'')
ids_5g = [f['site_id'] for f in sites.getFeatures(req)]

تشغيل أدوات Processing: ممر الألياف والمواقع القابلة للتوصيل

أي أداة في Toolbox يمكن تشغيلها باسمها الداخلي (يظهر عند الوقوف بالفأرة على الأداة، أو في History):

Python
import processing

utm = processing.run('native:reprojectlayer', {
    'INPUT': cables, 'TARGET_CRS': 'EPSG:32638', 'OUTPUT': 'memory:'
})['OUTPUT']

corridor = processing.run('native:buffer', {
    'INPUT': utm, 'DISTANCE': 500, 'SEGMENTS': 16,
    'DISSOLVE': True, 'OUTPUT': 'memory:fiber_corridor'
})['OUTPUT']
QgsProject.instance().addMapLayer(corridor)

ready = processing.run('native:extractbylocation', {
    'INPUT': sites, 'PREDICATE': [0], 'INTERSECT': corridor,
    'OUTPUT': 'memory:ready_sites'
})['OUTPUT']
print('مواقع قابلة للتوصيل:', ready.featureCount())

# معرفة معاملات أي أداة
processing.algorithmHelp('native:extractbylocation')

القياس: أطوال الكابلات حسب النوع

Python
da = QgsDistanceArea()
da.setEllipsoid('WGS84')
da.setSourceCrs(cables.crs(), QgsProject.instance().transformContext())

totals = {}
for f in cables.getFeatures():
    km = da.measureLength(f.geometry()) / 1000
    totals[f['type']] = totals.get(f['type'], 0) + km
print({k: round(v, 1) for k, v in totals.items()})

تعديل البيانات: إضافة حقل طول المسار وحسابه

Python
from qgis.PyQt.QtCore import QVariant

cables.startEditing()
cables.addAttribute(QgsField('route_km', QVariant.Double))
cables.updateFields()
idx = cables.fields().indexOf('route_km')
for f in cables.getFeatures():
    km = da.measureLength(f.geometry()) / 1000
    cables.changeAttributeValue(f.id(), idx, round(km, 2))
cables.commitChanges()

أقرب كابل لكل موقع غير متصل (فهرس مكاني)

Python
index = QgsSpatialIndex(utm.getFeatures())
geoms = {f.id(): f.geometry() for f in utm.getFeatures()}
xf = QgsCoordinateTransform(sites.crs(), utm.crs(), QgsProject.instance())

req = QgsFeatureRequest().setFilterExpression('"fiber" = \'غير متصل\'')
for f in sites.getFeatures(req):
    g = QgsGeometry(f.geometry())
    g.transform(xf)
    nid = index.nearestNeighbor(g.asPoint(), 1)[0]
    print(f['site_id'], round(g.distance(geoms[nid])), 'm')

هذه مسافة بخط مستقيم. المسافة الفعلية للحفر أطول لأنها تتبع الطرق، وهي محسوبة مسبقًا في الحقل dist_to_fiber_m.

الترميز من الكود

Python
cats = []
for value, color, width in (('backbone', '#e4572e', 1.4), ('distribution', '#1f77b4', 0.8)):
    sym = QgsLineSymbol.createSimple({'color': color, 'width': str(width)})
    cats.append(QgsRendererCategory(value, sym, value))
cables.setRenderer(QgsCategorizedSymbolRenderer('type', cats))
cables.triggerRepaint()

تصدير دفعي: ملف لكل نوع كابل

Python
import os
out_dir = r'C:/path/to/output'
for t in ('backbone', 'distribution'):
    cables.selectByExpression(f'"type" = \'{t}\'')
    path = os.path.join(out_dir, f'cables_{t}.gpkg')
    processing.run('native:saveselectedfeatures', {'INPUT': cables, 'OUTPUT': path})
cables.removeSelection()

تشغيل PyQGIS خارج الواجهة

للمهام المجدولة أو الخوادم يمكن تشغيل المكتبة من Python مباشرة (في Windows استخدم OSGeo4W Shell المرفق مع QGIS):

Python
from qgis.core import QgsApplication
qgs = QgsApplication([], False)
qgs.initQgis()
# ... الكود هنا ...
qgs.exitQgis()

أو باستخدام أداة سطر الأوامر qgis_process لتشغيل أي أداة أو نموذج دون فتح البرنامج:

سطر الأوامر
qgis_process run native:buffer -- INPUT=fiber_cables_utm.gpkg DISTANCE=500 DISSOLVE=true OUTPUT=fiber_corridor.gpkg

مرجع رسمي: PyQGIS Developer Cookbook وتوثيق واجهة البرمجة.

13قواعد البيانات المكانية وخدمات الويب والمشروع الختامي

في المؤسسات لا تُحفظ البيانات في ملفات متفرقة، بل في قاعدة بيانات مركزية يعمل عليها عدة مستخدمين في نفس الوقت، وتُنشر الخرائط للآخرين كخدمات ويب.

بنية GIS المؤسسية: المصادر تغذي PostGIS، ومنه QGIS Desktop وQGIS Server
بنية GIS المؤسسية

البيانات تدخل مرة واحدة إلى PostGIS، ومنها يعمل المحللون على QGIS Desktop، وينشر QGIS Server الخرائط للمتصفحات عبر معايير OGC.

PostgreSQL + PostGIS

للتعمق: قسم PostGIS بالعربية على هذا الموقع: شرح للبدء، وترجمة كاملة لدليل PostGIS 3.6 الرسمي ولورشة «مقدمة إلى PostGIS».

PostGIS امتداد مجاني لقاعدة بيانات PostgreSQL يضيف أنواع بيانات هندسية ومئات الدوال المكانية. مزاياه: عمل متزامن لعدة مستخدمين، صلاحيات، نسخ احتياطي، وتحليل سريع على ملايين المعالم بالفهارس المكانية.

الاتصال من QGIS:

  1. في لوحة Browser انقر بالزر الأيمن على PostgreSQL ← New Connection.

  2. أدخل Name، Host، Port (5432 افتراضيًا)، Database، ثم بيانات الدخول في تبويب Basic (أو الأفضل: إعداد مصادقة مشفّرة في تبويب Configurations).

  3. اضغط Test Connection ثم OK. الجداول المكانية تظهر كطبقات يمكن سحبها إلى الخريطة.

  4. لرفع طبقة إلى القاعدة: Database › DB Manager ← Import Layer/File، أو أداة Export to PostgreSQL في Processing.

استعلامات SQL مكانية (من DB Manager › SQL Window، ويمكن تحميل النتيجة كطبقة مباشرة):

SQL
-- المواقع التي تبعد 500 م أو أقل عن أي كابل ألياف
SELECT s.site_id, s.tech, s.fiber
FROM telecom_sites s
WHERE EXISTS (
  SELECT 1 FROM fiber_cables c
  WHERE ST_DWithin(s.geom::geography, c.geom::geography, 500)
);

-- أقرب كابل لكل موقع غير متصل والمسافة إليه بالمتر
SELECT s.site_id, c.cable_id,
       round(ST_Distance(s.geom::geography, c.geom::geography)) AS dist_m
FROM telecom_sites s
CROSS JOIN LATERAL (
  SELECT cable_id, geom FROM fiber_cables
  ORDER BY fiber_cables.geom <-> s.geom
  LIMIT 1
) c
WHERE s.fiber = 'غير متصل';

-- الطول الكلي للكابلات حسب النوع بالكيلومتر
SELECT type, round(SUM(ST_Length(geom::geography)) / 1000) AS km
FROM fiber_cables
GROUP BY type;

-- فهرس مكاني لتسريع الاستعلامات
CREATE INDEX fiber_cables_geom_idx ON fiber_cables USING GIST (geom);
الدالةالوظيفة
ST_Bufferنطاق عازل
ST_Intersects / ST_Contains / ST_Withinالعلاقات المكانية
ST_Distance / ST_DWithinالمسافات
ST_Area / ST_Lengthالمساحة والطول (استخدم ::geography للحساب بالمتر)
ST_Transformإعادة الإسقاط
ST_Unionدمج الأشكال

خدمات الويب الجغرافية (OGC)

الخدمةما تقدمهالاستخدام
WMSصورة جاهزة للخريطةعرض فقط
WMTS / XYZبلاطات صور مسبقة التجهيزخرائط أساسية سريعة
WFS / OGC API Featuresالمعالم المتجهية ببياناتهاتحليل وتحرير
WCSبيانات رستر خامتحليل القيم

للإضافة: Layer › Add Layer › Add WMS/WMTS Layer (Ctrl+Shift+W) أو Add WFS Layer، ثم New وأدخل رابط الخدمة ← Connect ← اختر الطبقة ← Add.

النشر من QGIS: QGIS Server لنشر مشروعك كخدمات WMS/WFS، أو إضافة qgis2web لتصدير خريطة ويب تفاعلية ثابتة، أو GeoServer للمؤسسات.

المشروع الختامي: تخطيط توسعة شبكة الألياف الضوئية في الرياض

هذا المشروع يجمع مهارات المستويات الثلاثة. السؤال: كيف نوصل المواقع غير المتصلة بالألياف بأقل طول حفر على الطرق، وبأي ترتيب نبدأ؟

  1. جمع البيانات: fiber_network.gpkg (الكابلات والمقاسم والطرق) وtelecom_sites.csv، وللتوسع بيانات حقيقية من QuickOSM: الطرق (highway=*) والمباني (building=*) لتقدير الطلب على خدمة FTTH.

  2. التجهيز: أعد إسقاط كل الطبقات إلى EPSG:32638، وافحص سلامة شبكة الطرق (Check Validity والتقاط التقاطعات)، واحفظ الكل في GeoPackage واحد أو PostGIS.

  3. الفرز الأولي: ممر 500 م حول الكابلات الحالية (نموذج الفصل 11) لفصل المواقع القريبة عن البعيدة.

  4. تحليل الشبكة: لكل موقع غير متصل احسب أقصر مسار على roads_osm من أقرب نقطة على الحلقة الرئيسية بأداة Shortest Path (Layer to Point) أو إضافة QNEAT3، فتحصل على مسارات مقترحة تمر على الطرق وطول كل منها.

  5. التكلفة والأولوية: أضف حقل تكلفة = طول المسار × تكلفة متر الحفر (استخدم قيمة من جهة عملك)، ثم رتّب المواقع بالجمع بين التكلفة والأهمية (مواقع 5G أولًا).

  6. الطلب على FTTH: نطاق 200 م حول المسارات المقترحة وعدّ المباني داخله (Join Attributes by Location مع الملخّص) لمعرفة المسار الذي يخدم أكبر عدد من المباني.

  7. الأتمتة والإخراج: ابنِ الخطوات 3–6 كنموذج أو سكربت PyQGIS، ثم أخرج خريطة A3 تعرض الشبكة الحالية والمسارات المقترحة مرقمة حسب الأولوية، مع جدول أطوال وتكاليف، وخريطة ويب بـ qgis2web.

معايير تقييم المشروع

المعيارالوزنما يُنظر إليه
صحة البيانات والإسقاط20%CRS متري موحّد، لا أخطاء هندسية
منهجية التحليل30%منطقية المعايير والأوزان وتبريرها
الأتمتة20%نموذج أو سكربت يعمل من البداية للنهاية
جودة الخريطة20%العناصر الستة، الوضوح، الترميز المناسب
التوثيق10%شرح المصادر والقيود والافتراضات

مراجعالملاحق

ملحق أ: قاموس المصطلحات

المصطلحالعربيةالمعنى باختصار
Attribute Tableجدول البيانات الوصفيةالجدول المرتبط بالمعالم
Basemapخريطة أساسيةخلفية مرجعية مثل OSM
Bufferنطاق عازلمساحة على مسافة ثابتة من معلم
Choroplethخريطة تدرّجيةتلوين المناطق حسب قيمة
CRSنظام الإحداثيات المرجعيتعريف معنى الأرقام المكانية
DEMنموذج ارتفاع رقميرستر الارتفاعات
Digitizingالرقمنةرسم معالم جديدة
EPSGرمز EPSGرقم تعريفي عالمي لأنظمة الإحداثيات
Featureمعلمعنصر واحد (نقطة/خط/مضلع) مع بياناته
GCPنقطة تحكم أرضيةنقطة معروفة الإحداثيات للإسناد
Geoprocessingالمعالجة الجغرافيةعمليات التحليل المكاني
Georeferencingالإسناد الجغرافيإعطاء صورة إحداثيات حقيقية
Hillshadeتظليل التضاريسمحاكاة الظل لإبراز التضاريس
Layerطبقةمجموعة بيانات من نوع واحد
Map Algebraالجبر الخرائطيمعادلات على خلايا الرستر
Projectionإسقاطتحويل سطح الأرض إلى مستوٍ
Rasterبيانات شبكيةخلايا منتظمة بقيم
Resolutionالدقة المكانيةحجم الخلية على الأرض
Snappingالالتقاطجذب المؤشر إلى الرؤوس والحواف
Symbologyالترميزطريقة عرض الطبقة
Topologyالطوبولوجياالعلاقات المكانية الصحيحة بين المعالم
Vectorبيانات متجهيةنقاط وخطوط ومضلعات
Vertexرأسنقطة من نقاط تشكيل الخط أو المضلع

ملحق ب: اختصارات لوحة المفاتيح

الاختصارالأمر
Ctrl+N / Ctrl+O / Ctrl+Sمشروع جديد / فتح / حفظ
Ctrl+LData Source Manager
Ctrl+Shift+V / Ctrl+Shift+Rإضافة طبقة متجهية / رستر
F6فتح جدول البيانات الوصفية
F7لوحة تنسيق الطبقة (Layer Styling)
Ctrl+Shift+Fالتكبير لكامل المشروع
Ctrl+Shift+Iأداة Identify
Ctrl+Shift+Mقياس المسافة
Ctrl+F3الاختيار بالتعبير
Ctrl+Alt+TProcessing Toolbox
Ctrl+Alt+GModel Designer
Ctrl+Alt+PPython Console
Ctrl+Pتخطيط طباعة جديد
Ctrl+Kمربع البحث السريع عن أي أداة أو طبقة
مسافة + سحبتحريك الخريطة مؤقتًا أثناء استخدام أي أداة

ملحق ج: مصادر بيانات مجانية

لكل مصدر دليل عربي مفصّل على هذا الموقع: اضغط اسم المصدر، أو ↗ لفتح موقعه الرسمي.

المصدرالبيانات
Natural Earth ↗حدود دول ومناطق ومدن وأنهار بمقاييس صغيرة (مصدر بيانات التدريب)
Geofabrik ↗بيانات OpenStreetMap جاهزة لكل دولة
GADM ↗الحدود الإدارية بمستويات متعددة
USGS EarthExplorer ↗صور Landsat ونماذج ارتفاع SRTM
Copernicus Browser ↗صور Sentinel-1 وSentinel-2 وCopernicus DEM
OpenTopography ↗نماذج ارتفاع عالمية
WorldPop ↗توزيع السكان الشبكي
HDX ↗بيانات إنسانية وحدود ومرافق لمعظم الدول
OpenStreetMap ↗طرق الرياض في بيانات التدريب (عبر Overpass API)، برخصة ODbL: © مساهمو OpenStreetMap

ملحق د: ملفات الكتيب

في مجلد «كتيب تعليمي للGIS» على جهازك:

المراجع

الأدلة الرسمية الأربعة الأولى مترجمة بالكامل إلى العربية على هذا الموقع.