مقدمة الكتيب
كتيب مختصر وسريع: يجمع أهم ما تحتاجه للبدء والعمل في 13 فصلًا مركّزًا. أما الشرح الكامل والتفصيلي لكل أداة ونافذة فتجده في الترجمة العربية الكاملة لوثائق QGIS الرسمية على هذا الموقع.
يأخذك هذا الكتيب من الصفر إلى مستوى الاحتراف في نظم المعلومات الجغرافية (GIS) باستخدام برنامج QGIS المجاني مفتوح المصدر، عبر 13 فصلًا مقسّمة على ثلاثة مستويات.
لمن هذا الكتيب؟ لطلاب الجغرافيا والهندسة والتخطيط والبيئة، ولكل من يريد تحويل البيانات المكانية إلى خرائط وتحليلات وقرارات. لا يُفترض أي معرفة سابقة بالبرنامج.
كيف تستخدمه؟
اقرأ الفصل، ثم نفّذ الخطوات بنفسك على QGIS مفتوحًا أمامك.
أسماء القوائم والأدوات مكتوبة بالإنجليزية كما تظهر في البرنامج، مثل Layer › Add Layer، والشرح بالعربية.
في نهاية كل مستوى تمرين تطبيقي؛ لا تنتقل للمستوى التالي قبل إنجازه.
الصور التوضيحية نوعان: لقطات حقيقية من واجهة 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 الخمسة
العتاد (Hardware): الحاسوب، أجهزة GPS، الطائرات المسيّرة، الماسحات.
البرمجيات (Software): مثل QGIS (مجاني) وArcGIS Pro (تجاري)، وقواعد البيانات مثل PostGIS.
البيانات (Data): أهم مكوّن وأغلاه؛ خرائط، صور أقمار صناعية، جداول بإحداثيات.
الأشخاص (People): المحللون والفنيون ومتخذو القرار.
الأساليب (Methods): خطوات العمل والمعايير التي تضمن نتائج صحيحة.

ما الذي يمكن أن تفعله GIS؟
| المجال | مثال تطبيقي | السؤال الذي تجيب عنه |
|---|---|---|
| التخطيط العمراني | اختيار موقع مدرسة جديدة | أين تقع الأحياء الأبعد عن المدارس الحالية؟ |
| الاتصالات | تخطيط شبكات الألياف الضوئية (FTTH) | أي المباني والأبراج تقع ضمن 500 م من كابل الألياف؟ |
| البيئة | رصد التصحر | كيف تغيّر الغطاء النباتي بين 2010 و2025؟ |
| النقل | تحسين مسارات الحافلات | ما أقصر طريق يمر بكل المحطات؟ |
| الزراعة | الري الدقيق | أي أجزاء المزرعة أكثر جفافًا؟ |
| الطوارئ | خرائط مخاطر السيول | أي المباني تقع في مجاري الأودية؟ |
لماذا QGIS؟
مجاني ومفتوح المصدر، بلا تراخيص.
يعمل على Windows وmacOS وLinux.
يدعم مئات صيغ البيانات (Shapefile، GeoPackage، GeoTIFF، PostGIS، KML…).
فيه أكثر من 1000 أداة تحليل جاهزة، وآلاف الإضافات (Plugins).
يمكن برمجته بلغة Python لأتمتة العمل.
خلاصة الفصل: 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، KML | GeoTIFF، JPEG2000، ASCII Grid |
الطبقات (Layers)
تنظيم GIS يشبه أوراقًا شفافة فوق بعضها: كل نوع من المعلومات في طبقة مستقلة، وكل الطبقات مرتبطة بنفس الإحداثيات فتتطابق.

صيغ الملفات الأشهر
GeoPackage (.gpkg): الصيغة الموصى بها في QGIS؛ ملف واحد يضم عدة طبقات متجهية وشبكية.
Shapefile (.shp): صيغة قديمة ومنتشرة، تتكون من عدة ملفات (shp، shx، dbf، prj) يجب نقلها معًا، وأسماء الحقول فيها لا تتجاوز 10 أحرف.
GeoJSON: نصية، شائعة في تطبيقات الويب.
CSV بإحداثيات: جدول عادي فيه عمودان للطول والعرض.
GeoTIFF (.tif): الصيغة القياسية للبيانات الشبكية.
بيانات التدريب المرفقة (في مجلد «بيانات التدريب»):
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) هو «اللغة» التي تصف بها الأرقام موقعًا على الأرض. إذا اختلف النظام بين طبقتين ولم يُعرَّف بشكل صحيح، لن تتطابقا، وستكون المساحات والمسافات خاطئة. هذا أكثر مصدر لأخطاء المبتدئين.
النظام الجغرافي: خطوط الطول والعرض
يحدد الموقع بزاويتين بالدرجات على شكل الأرض الكروي:
دائرة العرض (Latitude): من −90° (القطب الجنوبي) إلى +90° (القطب الشمالي)، والصفر عند خط الاستواء. يُمثّل بالمحور Y.
خط الطول (Longitude): من −180° إلى +180°، والصفر عند خط غرينتش. يُمثّل بالمحور X.

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

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

أنظمة شائعة يجب أن تعرفها
| الرمز | الاسم | الوحدة | الاستخدام |
|---|---|---|---|
| EPSG:4326 | WGS 84 (جغرافي) | درجة | تخزين وتبادل البيانات، GPS |
| EPSG:3857 | Web Mercator | متر | خرائط الويب (OSM، Google) — للعرض فقط |
| EPSG:32637 / 32638 / 32639 | UTM النطاقات 37N / 38N / 39N | متر | القياس في غرب / وسط / شرق الجزيرة العربية |
| EPSG:32636 | UTM 36N | متر | مصر والأردن وسوريا |
| EPSG:8857 | Equal Earth | متر | خرائط عالمية بمساحات صحيحة |
الإسقاط في QGIS
في QGIS ثلاثة مستويات من CRS يجب التفريق بينها:
CRS الطبقة: النظام الذي حُفظت به البيانات فعليًا. يظهر في Layer Properties › Information.
CRS المشروع: النظام الذي تُعرض به كل الطبقات معًا. يظهر في الزاوية اليمنى السفلى من النافذة (مثل EPSG:4326)، ويُغيّر من Project › Properties › CRS.
إعادة الإسقاط الفورية (On-the-fly): يعيد QGIS إسقاط كل طبقة للعرض تلقائيًا دون تغيير الملف الأصلي.


لتغيير CRS البيانات فعليًا (لا العرض فقط) استخدم أداة Vector › Data Management Tools › Reproject Layer، أو انقر بزر الفأرة الأيمن على الطبقة ← Export › Save Features As واختر CRS جديدًا.
تنبيه مهم: أمر Set Layer CRS لا يُعيد الإسقاط، بل يُخبر QGIS فقط بـ«ما هو النظام الصحيح». استخدمه فقط إذا كان CRS الطبقة مفقودًا أو معرّفًا خطأً.
قاعدة ذهبية: قبل حساب أي مسافة أو مساحة أو نطاق عازل، أعد إسقاط الطبقة إلى نظام متري مناسب لمنطقتك (مثل UTM).
4تثبيت QGIS والتعرف على الواجهة
التثبيت
ادخل إلى الموقع الرسمي qgis.org واختر نظام تشغيلك.
اختر إصدار LTR (Long Term Release)؛ فهو الأكثر استقرارًا ومناسب للتعلم والعمل. الإصدار الأحدث (Latest) فيه ميزات جديدة لكنه أقل استقرارًا.
في Windows يمكنك استخدام المثبّت المستقل (MSI) أو مثبّت OSGeo4W الذي يسهّل التحديثات وإضافة المكتبات.
بعد التثبيت افتح QGIS Desktop من قائمة ابدأ.
لغة الواجهة: هذا الكتيب يستخدم الواجهة الإنجليزية. لتغييرها: Settings › Options › General › Override system locale ثم أعد تشغيل البرنامج.
الواجهة الرئيسية
عند فتح مشروع جديد (Project › New أو Ctrl+N) تظهر الواجهة التالية، وهي مقسّمة إلى ست مناطق:

| الرقم | المنطقة | وظيفتها |
|---|---|---|
| 1 | شريط القوائم Menu Bar | كل أوامر البرنامج: Project، Layer، Vector، Raster، Processing… |
| 2 | أشرطة الأدوات Toolbars | أزرار سريعة: التكبير والتحريك والتحديد والتحرير والقياس |
| 3 | لوحة المتصفح Browser | تصفّح الملفات وقواعد البيانات وخدمات الويب، واسحب الطبقة إلى الخريطة |
| 4 | لوحة الطبقات Layers | قائمة الطبقات المفتوحة؛ الترتيب من الأعلى للأسفل = ما يظهر فوق ما |
| 5 | لوحة الخريطة Map Canvas | مساحة عرض الخريطة والتفاعل معها |
| 6 | شريط الحالة Status Bar | إحداثيات المؤشر، مقياس الرسم، التدوير، وCRS المشروع (أقصى اليمين) |
أهم القوائم
Project: إنشاء وفتح وحفظ المشاريع (.qgz) وإنشاء تخطيطات الطباعة.
Layer: إضافة الطبقات وإنشاؤها.
Vector / Raster: أدوات التحليل الأكثر استخدامًا.
Processing: صندوق أدوات المعالجة (Toolbox) ومصمّم النماذج.
Plugins: تثبيت الإضافات مثل QuickMapServices وQuickOSM.
View › Panels: إظهار أي لوحة اختفت (الطبقات، المتصفح، Processing Toolbox…).
أدوات التنقل الأساسية
| الأداة | الوظيفة | الاختصار |
|---|---|---|
| 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: إضافة طبقات متجهية
افتح Layer › Data Source Manager (Ctrl+L).
من القائمة اليسرى اختر Vector.
في حقل Vector Dataset(s) اضغط زر … واختر الملف
gis_training.gpkg.اضغط Add، وستظهر نافذة لاختيار الطبقات: اختر
countriesوriversوcities.

طريقة أسرع: اسحب الملف من مستكشف الملفات وأفلته فوق لوحة الخريطة، أو ابحث عنه في لوحة Browser وانقر عليه مرتين.
الخطوة 2: ترتيب الطبقات
في لوحة Layers اسحب الطبقات ليصبح الترتيب من الأعلى: النقاط (cities)، ثم الخطوط (rivers)، ثم المضلعات (countries). القاعدة: النقاط فوق الخطوط فوق المضلعات فوق الرستر، وإلا غطّت الطبقات الممتلئة ما تحتها.
لعرض المدن الكبرى فقط: انقر بالزر الأيمن على cities ← Filter… واكتب التعبير:
"pop_max" > 1000000
الخطوة 3: استكشاف جدول البيانات الوصفية
انقر بالزر الأيمن على countries ← Open Attribute Table (أو F6).

ما يمكنك فعله في الجدول:
الفرز: انقر على عنوان العمود (مثلًا
pop_estلترتيب الدول حسب السكان).التحديد: انقر على رقم الصف، فيظهر المعلم محدّدًا بالأصفر على الخريطة.
التكبير على المحدد: زر Zoom map to selected rows (Ctrl+J).
الاختيار بالتعبير: زر Select features using an expression ثم اكتب مثلًا
"is_arab" = 1.عرض المحدد فقط: القائمة أسفل اليسار ← Show Selected Features.
الخطوة 4: إضافة مواقع الاتصالات من CSV وشبكة الألياف
Layer › Add Layer › Add Delimited Text Layer.
اختر الملف
telecom_sites.csv، وتأكد أن الترميز (Encoding) هو UTF-8 حتى تظهر القيم العربية بشكل صحيح. الملف يضم الحقول:site_id،type(برج ماكرو / خلية صغيرة)،tech(4G / 5G)،fiber(متصل / غير متصل)،capacity_gbps،dist_to_fiber_m(طول المسار على الطرق إلى الحلقة الرئيسية).في Geometry Definition اختر Point coordinates: الحقل X =
lon، والحقل Y =lat، وGeometry CRS = EPSG:4326 - WGS 84 ثم Add.أضف من الملف
fiber_network.gpkgالطبقتينfiber_cables(الكابلات) وcentral_offices(المقاسم). الكابلات نوعان في الحقلtype: backbone (الحلقة الرئيسية، 144 شعيرة) وdistribution (كابلات التوزيع إلى الأبراج، 24 أو 48 شعيرة)، وكلها تمر على مسارات الطرق كما في الواقع.للتمييز السريع: لوّن الكابلات حسب
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.

الخطوة 6: حفظ المشروع
Project › Save As (Ctrl+Shift+S) واحفظ المشروع بصيغة .qgz. انتبه: ملف المشروع لا يحتوي البيانات، بل يحفظ مساراتها وإعدادات العرض. إذا نقلت المشروع لجهاز آخر فانقل مجلد البيانات معه. لتفادي مشاكل المسارات: Project › Properties › General › Save paths = Relative.
تمرين المستوى المبتدئ
أنشئ مشروعًا جديدًا وأضف طبقة
saudi_regionsوطبقةroads.افتح جدول
saudi_regionsواعرف: كم منطقة إدارية فيه؟ وما اسم الحقل الذي يحمل الاسم العربي؟استخدم Identify Features للنقر على منطقة الرياض وقراءة بياناتها.
اقس بأداة Measure Line المسافة بين الرياض وجدة (الجواب تقريبًا 850 كم بخط مستقيم).
أضف ملف مواقع الاتصالات وطبقة fiber_cables وخريطة OSM، ثم احفظ المشروع باسم
my_first_project.qgz.
المستوى 2المتوسط
6الترميز والتصنيف والتسميات
الترميز (Symbology) يحوّل الأرقام في الجدول إلى ألوان وأحجام على الخريطة. الخريطة التي تلوّن المناطق حسب قيمة رقمية تسمى خريطة موضوعية تدرّجية (Choropleth).
أنواع الترميز في QGIS
افتح خصائص الطبقة (نقر مزدوج عليها) ← تبويب Symbology، واختر النوع من القائمة العلوية:
| النوع | الاستخدام | مثال |
|---|---|---|
| Single Symbol | رمز واحد لكل المعالم | كل الأنهار بلون أزرق |
| Categorized | لون لكل قيمة نصية (فئات) | مواقع الاتصالات: متصل / غير متصل بالألياف |
| Graduated | تدرّج لوني أو حجمي لقيمة رقمية | الدول حسب عدد السكان |
| Rule-based | قواعد بتعابير مخصّصة | الطرق السريعة بلون والباقي بلون آخر |
| Heatmap | خريطة حرارية لكثافة النقاط | تركّز الحوادث المرورية |
تطبيق: خريطة السكان في الدول العربية
أضف طبقة
countriesوطبّق عليها الفلتر"is_arab" = 1.Symbology › Graduated، واختر العمود Value = pop_est.
اختر التدرّج اللوني Color ramp = YlOrRd.
اختر Mode = Natural Breaks (Jenks) وClasses = 5، ثم Classify ← OK.


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

Equal Interval: فئات بمدى متساوٍ. مناسب للبيانات الموزعة بانتظام (مثل النسب المئوية)، لكن قيمة متطرفة واحدة (مثل البحرين هنا) تجعل كل الدول الأخرى في فئة واحدة.
Quantile: عدد متساوٍ من المعالم في كل فئة. جيد للمقارنة والترتيب، لكنه قد يضع قيمًا متباعدة في نفس الفئة.
Natural Breaks (Jenks): يبحث عن الفواصل الطبيعية في البيانات؛ الخيار الافتراضي المناسب غالبًا.
Standard Deviation: يبيّن الانحراف عن المتوسط (فوقه وتحته).
خطأ شائع: لا تلوّن المضلعات بأعداد مطلقة (مثل عدد السكان) إذا كانت مساحاتها مختلفة جدًا؛ الأفضل استخدام معدل (كثافة = السكان ÷ المساحة). يمكنك كتابة هذا التعبير مباشرة في حقل Value بالضغط على زر ε:
"pop_est" / ($area / 1000000).
التسميات (Labels)
خصائص الطبقة ← تبويب Labels ← اختر Single Labels.
Value: اختر الحقل
name_arللأسماء العربية.Text: اختر خطًا يدعم العربية (مثل Arial أو Tahoma أو Noto Sans Arabic) وحجمًا مناسبًا.
Buffer: فعّل Draw text buffer بلون أبيض وحجم 1 مم لتبقى الكتابة مقروءة فوق أي لون.
Placement: للنقاط اختر Around Point، وللخطوط Curved لتتبع الكتابة اتجاه النهر أو الطريق.

تسميات مخصّصة بالتعابير: اضغط زر ε بجانب Value واكتب مثلًا:
"name_ar" || '\n' || format_number("pop_est" / 1000000, 1) || ' مليون'سيظهر اسم الدولة وتحته عدد السكان بالمليون.
حفظ النمط وإعادة استخدامه
في أسفل نافذة الخصائص اضغط Style › Save Style واحفظه بصيغة .qml، أو انقر بالزر الأيمن على الطبقة ← Styles › Copy Style ثم Paste Style على طبقة أخرى.
7إنشاء الطبقات وتحرير البيانات والإسناد الجغرافي
الرقمنة (Digitizing) هي رسم معالم جديدة على الخريطة وإدخال بياناتها. هذه مهارة أساسية عندما لا تتوفر البيانات التي تحتاجها جاهزة.
إنشاء طبقات جديدة
قبل أن ترسم أي معلم تحتاج طبقة فارغة تستقبله. إنشاء الطبقة يعني أن تقرر أربعة أشياء مسبقًا، ولا يسهل تغيير بعضها لاحقًا: صيغة التخزين، ونوع الشكل الهندسي، ونظام الإحداثيات، والحقول التي ستحمل البيانات الوصفية.
أين تجد أوامر الإنشاء؟
القائمة Layer › Create Layer، وفيها: New GeoPackage Layer… (Ctrl+Shift+N)، وNew Shapefile Layer…، وNew SpatiaLite Layer…، وNew Temporary Scratch Layer…، وNew GPX Layer….
شريط أدوات Data Source Manager: نفس الأزرار كأيقونات.
لوحة Browser: انقر بالزر الأيمن على مجلد ← New › GeoPackage…، أو على ملف GeoPackage موجود ← Create Database and Layer….
أي صيغة أختار؟
| الصيغة | متى تستخدمها | مزايا | قيود |
|---|---|---|---|
GeoPackage .gpkg | الخيار الافتراضي لأي عمل جديد | ملف واحد يضم عدة طبقات، أسماء حقول طويلة، فهرس مكاني، يدعم العربية | لا شيء يُذكر للاستخدام الفردي |
Shapefile .shp | عند تسليم البيانات لجهة تطلبه تحديدًا | مدعوم في كل البرامج تقريبًا | عدة ملفات لكل طبقة، أسماء الحقول ≤ 10 أحرف، نوع شكل واحد، حجم ≤ 2 GB |
| Temporary Scratch Layer | تجربة سريعة أو نتيجة وسيطة | لا ملفات، سريعة جدًا | تُفقد عند إغلاق المشروع ما لم تحفظها |
SpatiaLite .sqlite | قاعدة بيانات SQL خفيفة في ملف | استعلامات SQL مكانية | أقل انتشارًا من GeoPackage |
| GPX | نقاط ومسارات لأجهزة GPS | تنقلها لجهاز GPS مباشرة | حقول ثابتة، WGS 84 فقط |
| طبقة افتراضية (Virtual) | نتيجة استعلام SQL على طبقات موجودة | تتحدّث تلقائيًا ولا تكرّر البيانات | للقراءة غالبًا، تعتمد على الطبقات الأصلية |
إنشاء طبقة GeoPackage خطوة بخطوة

Layer › Create Layer › New GeoPackage Layer.
Database: اضغط … واختر ملف GeoPackage موجودًا لتضيف إليه طبقة، أو اكتب اسمًا جديدًا لإنشاء ملف جديد. يضيف QGIS الامتداد
.gpkgتلقائيًا.Table name: اسم الطبقة داخل الملف، بأحرف لاتينية صغيرة ودون مسافات (مثل
manholes).Geometry type: اختر Point أو LineString أو Polygon (أو الأنواع المتعددة Multi…)، أو No Geometry لجدول بلا أشكال. فعّل Include Z dimension فقط إن كنت ستخزّن ارتفاعات، وInclude M values للقياسات على الخطوط.
نظام الإحداثيات: اضغط زر الكرة الأرضية واختر نظامًا متريًا مناسبًا لمنطقتك (مثل نطاق UTM الخاص بها) إن كنت ستقيس أطوالًا ومساحات، أو
EPSG:4326لتبادل البيانات.الحقول: في قسم New Field اكتب Name، واختر Type (انظر الجدول التالي)، وحدّد Maximum length للنصوص إن أردت، ثم اضغط Add to Fields List. كرّر لكل حقل، ورتّبها بأزرار الأسهم.
اضغط 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

Layer › Create Layer › New Shapefile Layer.
File name: مسار الملف واسمه، وFile encoding: اختر UTF-8 لتُحفظ القيم العربية بشكل صحيح.
Geometry type: Point أو MultiPoint أو Line أو Polygon، أو No Geometry (ينتج ملف
.dbfفقط)، ثم الأبعاد الإضافية: None أو Z (+ M values) أو M values.اختر نظام الإحداثيات، ثم أضف الحقول: الأنواع المتاحة Text data وWhole number وDecimal number وDate وBoolean، مع Length وPrecision.
اضغط OK.
تبدأ قائمة الحقول عادة بحقل id يمكنك إبقاؤه أو حذفه. وتذكّر أن Shapefile يقتطع أسماء الحقول الأطول من 10 أحرف، لذا اختر أسماء قصيرة من البداية.
الطبقة المؤقتة (Temporary Scratch Layer)

طبقة في الذاكرة فقط، مثالية لرسم سريع أو لنتائج وسيطة. أنشئها من Layer › Create Layer › New Temporary Scratch Layer: اكتب Layer name، واختر Geometry type ونظام الإحداثيات. الحقول هنا اختيارية، وتدعم أنواعًا إضافية مثل Time.
انتبه: الطبقة المؤقتة تختفي عند إغلاق المشروع. تعرفها من أيقونة الشريحة بجانب اسمها؛ اضغطها، أو انقر بالزر الأيمن ← Make Permanent… لحفظها في GeoPackage قبل الإغلاق.
إنشاء طبقة من طبقة موجودة
كثيرًا ما تكون الطبقة الجديدة جزءًا من طبقة لديك، أو نسخة بصيغة أو نظام إحداثيات آخر:
حفظ نسخة: انقر بالزر الأيمن على الطبقة ← Export › Save Features As…، واختر الصيغة (مثل GeoPackage) والاسم ونظام الإحداثيات. هذه أيضًا طريقة إعادة الإسقاط الفعلية.
المعالم المحددة فقط: حدّد المعالم (يدويًا أو بتعبير)، ثم Export › Save Selected Features As….
اختيار الحقول: في نفس النافذة افتح Select fields to export and their export options وألغِ الحقول التي لا تحتاجها.
من الحافظة: انسخ معالم (Ctrl+C) ثم Edit › Paste Features As › New Vector Layer… أو Temporary Scratch Layer….
من أدوات المعالجة: كل أداة في Processing Toolbox (مثل Buffer أو Clip) تنشئ طبقة جديدة؛ حدّد مكان حفظها في خانة المخرج بدل [Create temporary layer].
إنشاء طبقة نقاط من جدول (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)

طبقة تُعرَّف باستعلام SQL على طبقات مفتوحة، دون نسخ بياناتها. افتح Layer › Add Layer › Add/Edit Virtual Layer، واكتب اسمًا واستعلامًا، مثل استخراج كابلات الحلقة الرئيسية فقط من طبقة fiber_cables في بيانات التدريب (عمود الشكل فيها اسمه geom):
SELECT cable_id, fibers, length_m, geom
FROM fiber_cables
WHERE type = 'backbone'أي تعديل على fiber_cables يظهر فورًا في الطبقة الافتراضية.
مثال تطبيقي: طبقة كابلات جديدة
Layer › Create Layer › New GeoPackage Layer.
Database: اختر ملف GeoPackage (جديدًا أو موجودًا)، وTable name: مثل
new_fiber_cables.Geometry type: اختر LineString لأن الكابل خط (ولغرف التفتيش أو الأبراج اختر Point)، واختر CRS متريًا مثل EPSG:32638 للرياض حتى تُحسب الأطوال بالمتر.
في New Field أضف الحقول:
cable_id(Text)،type(Text: backbone أو distribution)،fibers(Whole Number: عدد الشعيرات) ثم Add to Fields List ← OK.
قائمة تحقق قبل إنشاء أي طبقة
نوع الشكل صحيح؟ (نقطة لموقع، خط لمسار، مضلع لمساحة). لا يمكن تغييره لاحقًا دون إنشاء طبقة جديدة.
نظام الإحداثيات متري إن كنت ستقيس؟
أنواع الحقول مناسبة (أرقام كأرقام، تواريخ كتواريخ)؟
الصيغة دائمة (GeoPackage) وليست مؤقتة؟
مكان الحفظ داخل مجلد المشروع؟
للتفاصيل الكاملة: «إنشاء الطبقات» في دليل مستخدم QGIS المترجم.
التحرير خطوة بخطوة
حدّد الطبقة واضغط Toggle Editing (أيقونة القلم الأصفر). ستظهر أدوات شريط Digitizing مفعّلة.
اضغط Add Line Feature (Ctrl+.) وانقر لكل رأس على امتداد الطريق الذي سيُمدّ فيه الكابل، بدءًا من نقطة على الحلقة الرئيسية وانتهاءً بالبرج، وانقر بالزر الأيمن للإنهاء.
تظهر استمارة البيانات (Attribute Form): اكتب
cable_idمثل DS-10، وtype= distribution، وfibers= 48، ثم OK.احفظ التعديلات بـ Save Layer Edits، ثم أنهِ التحرير بالضغط مرة أخرى على Toggle Editing. لحساب طول الكابل أضف حقلًا بالتعبير
$length(الفصل 8).


أدوات التحرير الأكثر استخدامًا
| الأداة | الوظيفة |
|---|---|
| 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° شمالًا).
Layer › Georeferencer (أو Raster › Georeferencer في بعض الإصدارات).
اضغط Open Raster واختر الصورة.
اضغط Add Point وانقر على موقع معروف في الصورة (تقاطع طرق، رأس خليج، زاوية شبكة إحداثيات).
في نافذة Enter Map Coordinates اكتب X (خط الطول) وY (خط العرض) وCRS، أو اضغط From Map Canvas وانقر على نفس الموقع في خريطة QGIS.
كرّر لـ 4–6 نقاط تحكم (GCPs) موزّعة على أطراف الصورة.
Settings › Transformation Settings: اختر Transformation type = Polynomial 1 (يحتاج 3 نقاط على الأقل)، وTarget CRS، واسم ملف المخرج.
اضغط Start Georeferencing (المثلث الأخضر).


راقب عمود Residual في جدول النقاط: هو مقدار الخطأ لكل نقطة بالبكسل. الخطوط الحمراء في الصورة تمثّل هذه الأخطاء؛ احذف أو أعد وضع النقاط ذات الخطأ الكبير حتى يصبح متوسط الخطأ (Mean error) صغيرًا.
8الاستعلام والتحليل المكاني
التحليل المكاني هو ما يميّز GIS عن برامج الرسم: إنتاج معلومة جديدة من علاقات المواقع ببعضها. كل الأدوات موجودة في Processing › Toolbox (Ctrl+Alt+T)، وأشهرها في قائمة Vector.

الاستعلام بالصفات (Select by Attribute)
السؤال: «أي مواقع الجيل الخامس (5G) ما زالت غير متصلة بالألياف؟». استخدم Select Features by Expression (Ctrl+F3) على طبقة telecom_sites:
"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.
أعد الإسقاط أولًا: طبقة
fiber_cablesبالدرجات (EPSG:4326)، والنطاق العازل بالدرجات بلا معنى. استخدم Reproject Layer إلى EPSG:32638 (UTM 38N).افتح Vector › Geoprocessing Tools › Buffer.
Input layer = الكابلات المُعاد إسقاطها، Distance = 500 بالمتر، وفعّل Dissolve result ليصبح الممر مضلعًا واحدًا، ثم Run.
Vector › Research Tools › Select by Location: Select features from =
telecom_sites، العلاقة = are within، By comparing to = الممر الناتج. المواقع المحددة هي المرشحة للتوصيل السريع، وما بقي خارجه يحتاج مسارًا جديدًا أطول.


لاحظ أن نافذة Buffer تعرض علامة تحذير صفراء بجانب المسافة إذا كانت الطبقة بالدرجات (degrees)، تذكيرًا بضرورة إعادة الإسقاط.
أدوات المعالجة الجغرافية الأخرى
| الأداة | المسار | النتيجة | مثال |
|---|---|---|---|
| Clip | Vector › Geoprocessing | قص طبقة بحدود طبقة أخرى | طرق السعودية فقط من طبقة طرق المنطقة |
| Intersection | Vector › Geoprocessing | الجزء المشترك مع دمج الصفات | الأراضي الزراعية داخل نطاق الفيضان |
| Union | Vector › Geoprocessing | كل المساحات من الطبقتين مع قطعها عند التقاطع | دمج خريطتي استعمالات |
| Difference | Vector › Geoprocessing | المساحة غير المغطاة | الأحياء خارج نطاق الخدمة |
| Dissolve | Vector › Geoprocessing | دمج المعالم حسب قيمة حقل | دمج الدول حسب القارة |
| Count Points in Polygon | Vector › Analysis Tools | عدد النقاط داخل كل مضلع | عدد المدن في كل دولة |
| Distance to Nearest Hub | Processing Toolbox | أقرب معلم والمسافة إليه | أقرب مقسم لكل برج اتصالات |
الربط (Joins)
الربط بالصفات (Attribute Join): لربط جدول خارجي (مثل إحصائيات في Excel) بطبقة عبر حقل مشترك (مثل رمز الدولة
iso3). من خصائص الطبقة ← تبويب Joins ← زر +، واختر Join field وTarget field. الربط هنا مؤقت؛ لتثبيته صدّر الطبقة (Export).الربط المكاني (Spatial Join): Vector › Data Management Tools › Join Attributes by Location، لنقل صفات المضلع إلى النقاط الواقعة داخله (مثلًا: إضافة اسم الدولة لكل مدينة).
حاسبة الحقول (Field Calculator)
لإضافة عمود محسوب: افتح جدول البيانات ← زر Field Calculator (Ctrl+I)، فعّل Create a new field، الاسم area_km2، النوع Decimal، والتعبير:
$area / 1000000الدالة $area تحسب المساحة الإهليلية بالمتر المربع حتى لو كانت الطبقة بالدرجات (حسب إعداد Ellipsoid في خصائص المشروع)، بينما area($geometry) تحسب بوحدات CRS الطبقة مباشرة.
تمرين المستوى المتوسط (1)
أضف حقل
area_km2لطبقةsaudi_regionsورتّب المناطق حسب المساحة. ما أكبر منطقة؟احسب عدد المدن في كل منطقة بأداة Count Points in Polygon.
أنشئ ممرًا بعرض 300 م حول كابلات الحلقة الرئيسية (backbone) فقط، مع دمج النتائج، واحسب الطول الكلي لكابلات كل نوع بالكيلومتر.
اقصص طبقة
roadsبحدود السعودية، ثم احسب مجموع أطوال الطرق بالكيلومتر بـ$length / 1000وأداة Statistics (أيقونة Σ).
9إخراج الخرائط (Print Layout)
الخريطة النهائية المطبوعة تحتاج عناصر أساسية لا تظهر في لوحة الخريطة. تصمّم في نافذة مستقلة اسمها Layout Designer.
العناصر الإلزامية لأي خريطة
العنوان: ماذا تعرض الخريطة وأين ومتى.
إطار الخريطة (Map item).
مفتاح الخريطة (Legend).
مقياس الرسم (Scale Bar).
سهم الشمال (North Arrow).
المصدر ونظام الإحداثيات واسم المعدّ والتاريخ.
خطوات الإنشاء
Project › New Print Layout (Ctrl+P) وأعطِ التخطيط اسمًا.
من القائمة الجانبية اختر حجم الورقة: زر أيمن على الصفحة ← Page Properties (مثل A4 أفقي).
Add Item › Add Map وارسم مستطيلًا على الصفحة. لضبط المنطقة المعروضة: أداة Move Item Content (C)، أو من تبويب Item Properties اضغط Set Map Extent to Match Main Canvas Extent.
Add Item › Add Label للعنوان، واضبط الخط والمحاذاة.
Add Item › Add Legend: ألغِ Auto update لتعديل أسماء الطبقات وحذف غير اللازم منها.
Add Item › Add Scale Bar: اختر الوحدة (كم) وعدد الأجزاء وقيمة كل جزء (مثل 500 كم).
Add Item › Add North Arrow.
Layout › Export as Image / Export as PDF. اختر 300 DPI للطباعة و150 DPI للعرض على الشاشة.


نصائح لإخراج احترافي
التوازن البصري: الخريطة هي العنصر الأكبر، والمفتاح والمقياس أصغر ولا ينافسانها.
أرقام مقروءة في المفتاح: من خصائص الطبقة ← Symbology ← Legend Format وPrecision لاختصار الأرقام الطويلة (مثل عرضها بالمليون).
الخطوط العربية: استخدم خطًا واحدًا أو اثنين فقط في كل التخطيط، وتأكد من دعمه للعربية.
الأطالس (Atlas): لإنتاج خريطة مستقلة لكل معلم تلقائيًا (مثلًا خريطة لكل منطقة من المناطق الـ 13)، فعّل Atlas › Atlas Settings › Generate an atlas واختر Coverage layer =
saudi_regions، ثم فعّل Controlled by Atlas في خصائص عنصر الخريطة. في العنوان استخدم التعبير[% "name_ar" %]ليتغير مع كل صفحة.
تمرين المستوى المتوسط (2)
أنشئ خريطة كثافة سكانية للدول العربية بـ 5 فئات (Natural Breaks).
أضف تسميات بالأسماء العربية مع هالة بيضاء.
صمّم تخطيط A4 أفقيًا بالعناصر الستة الإلزامية.
صدّر الخريطة PDF بدقة 300 DPI.
(إضافي) أنشئ أطلسًا من 13 صفحة لمناطق السعودية.
المستوى 3المحترف
10تحليل البيانات الشبكية ونماذج الارتفاع
نموذج الارتفاع الرقمي (DEM) هو رستر قيمة كل خلية فيه هي الارتفاع عن سطح البحر. منه نشتق خرائط الانحدار واتجاهه وتظليل التضاريس والأحواض المائية. مصادر DEM مجانية حقيقية: SRTM وCopernicus DEM بدقة 30 م (انظر الملاحق).

عرض DEM بشكل احترافي
أضف
dem_asir_training.tif(سحب وإفلات).Raster › Analysis › Hillshade: Azimuth = 315، Vertical angle = 45، Z factor = 1.
في خصائص طبقة DEM ← Symbology ← Singleband pseudocolor بتدرّج لوني، واجعل الشفافية حوالي 40% أو استخدم Blending mode = Multiply.
ضع طبقة DEM الملوّنة فوق طبقة Hillshade.

إذا كان DEM بالدرجات (EPSG:4326) فيجب ضبط Z factor أو إعادة إسقاطه أولًا (Raster › Projections › Warp (Reproject))، لأن الارتفاع بالمتر والمسافة الأفقية بالدرجات، فتخرج الانحدارات خاطئة تمامًا.
الانحدار واتجاهه
Raster › Analysis › Slope: درجة الانحدار (0° أرض مستوية، وكلما زادت القيمة زاد الانحدار).
Raster › Analysis › Aspect: اتجاه الانحدار بالدرجات من الشمال مع عقارب الساعة (0 شمال، 90 شرق، 180 جنوب، 270 غرب). مفيد لاختيار مواقع الألواح الشمسية ودراسة الغطاء النباتي.

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

أمثلة تعابير:
"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 م، واتجاه غير شمالي.
احسب Slope وAspect من DEM.
في Raster Calculator اكتب:
("slope@1" < 8) * ("dem@1" >= 1000) * ("dem@1" <= 2000) * ("aspect@1" > 45) * ("aspect@1" < 315)النتيجة رستر ثنائي: 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.
مثال: نموذج «ممر خدمة الألياف الضوئية» — يأخذ طبقة الكابلات وطبقة المواقع وعرض الممر، ويُخرج الممر وقائمة المواقع القابلة للتوصيل.
Processing › Graphical Modeler (Ctrl+Alt+G).
في تبويب Inputs اسحب Vector Layer وسمّه «طبقة كابلات الألياف» (نوع Line)، ثم Vector Layer ثانية «طبقة مواقع الاتصالات» (نوع Point)، ثم Number باسم «عرض الممر (م)» بقيمة افتراضية 500.
في تبويب Algorithms اسحب Reproject Layer: المدخل = طبقة الكابلات، Target CRS = EPSG:32638.
أضف Buffer: المدخل = مخرج Reproject، المسافة = المدخل الرقمي (Model Input)، وDissolve = نعم، واكتب اسمًا في حقل Buffered ليصبح مخرجًا نهائيًا «ممر خدمة الألياف».
أضف Extract by Location: المدخل = طبقة المواقع، والمقارنة بـ = مخرج Buffer، والعلاقة = intersect، وسمّ المخرج «مواقع قابلة للتوصيل».
اكتب اسم النموذج والمجموعة في Model Properties، ثم Save Model (ملف
.model3) وشغّله بالزر الأخضر. جرّب تغيير العرض إلى 300 أو 1000 م ولاحظ تغيّر عدد المواقع.

النموذج الجاهز محفوظ في مجلد الكتيب باسم
scripts/fiber_corridor.model3. لفتحه: في Processing Toolbox اضغط أيقونة النماذج ← Add Model to Toolbox.
لماذا النماذج مهمة؟ لأنها توثّق المنهجية بشكل مرئي، وتضمن تكرار النتائج نفسها، ويمكن مشاركتها مع زملائك، وتشغيلها دفعيًا كأي أداة أخرى. ومن القائمة Model › Export as Script Algorithm يمكن تحويل النموذج إلى كود Python.
صندوق الأدوات ومزوّدات الخوارزميات
في Processing Toolbox ستجد الأدوات مجمّعة حسب المزوّد: QGIS (native) وGDAL للرستر والتحويلات، وGRASS وSAGA (عبر إضافات) للتحليلات الهيدرولوجية والمتقدمة. استخدم مربع البحث أعلى اللوحة بدل التنقل في الشجرة.

إضافات ينصح بها المحترفون
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: من Plugins › Python Console (Ctrl+Alt+P). اكتب الأوامر سطرًا بسطر في الأسفل.
محرّر السكربتات: في نافذة Console اضغط Show Editor لكتابة سكربت كامل وحفظه وتشغيله.
سكربت Processing: أداة مخصّصة تظهر في Toolbox بواجهة مثل أي أداة أخرى.

الأساسيات: الوصول للطبقات والمعالم
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())تحميل طبقات من الكود
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])الاستعلام والتحديد
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):
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')القياس: أطوال الكابلات حسب النوع
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()})تعديل البيانات: إضافة حقل طول المسار وحسابه
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()أقرب كابل لكل موقع غير متصل (فهرس مكاني)
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.
الترميز من الكود
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()تصدير دفعي: ملف لكل نوع كابل
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):
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قواعد البيانات المكانية وخدمات الويب والمشروع الختامي
في المؤسسات لا تُحفظ البيانات في ملفات متفرقة، بل في قاعدة بيانات مركزية يعمل عليها عدة مستخدمين في نفس الوقت، وتُنشر الخرائط للآخرين كخدمات ويب.

البيانات تدخل مرة واحدة إلى PostGIS، ومنها يعمل المحللون على QGIS Desktop، وينشر QGIS Server الخرائط للمتصفحات عبر معايير OGC.
PostgreSQL + PostGIS
للتعمق: قسم PostGIS بالعربية على هذا الموقع: شرح للبدء، وترجمة كاملة لدليل PostGIS 3.6 الرسمي ولورشة «مقدمة إلى PostGIS».
PostGIS امتداد مجاني لقاعدة بيانات PostgreSQL يضيف أنواع بيانات هندسية ومئات الدوال المكانية. مزاياه: عمل متزامن لعدة مستخدمين، صلاحيات، نسخ احتياطي، وتحليل سريع على ملايين المعالم بالفهارس المكانية.
الاتصال من QGIS:
في لوحة Browser انقر بالزر الأيمن على PostgreSQL ← New Connection.
أدخل Name، Host، Port (5432 افتراضيًا)، Database، ثم بيانات الدخول في تبويب Basic (أو الأفضل: إعداد مصادقة مشفّرة في تبويب Configurations).
اضغط Test Connection ثم OK. الجداول المكانية تظهر كطبقات يمكن سحبها إلى الخريطة.
لرفع طبقة إلى القاعدة: Database › DB Manager ← Import Layer/File، أو أداة Export to PostgreSQL في Processing.
استعلامات SQL مكانية (من DB Manager › SQL Window، ويمكن تحميل النتيجة كطبقة مباشرة):
-- المواقع التي تبعد 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 للمؤسسات.
المشروع الختامي: تخطيط توسعة شبكة الألياف الضوئية في الرياض
هذا المشروع يجمع مهارات المستويات الثلاثة. السؤال: كيف نوصل المواقع غير المتصلة بالألياف بأقل طول حفر على الطرق، وبأي ترتيب نبدأ؟
جمع البيانات:
fiber_network.gpkg(الكابلات والمقاسم والطرق) وtelecom_sites.csv، وللتوسع بيانات حقيقية من QuickOSM: الطرق (highway=*) والمباني (building=*) لتقدير الطلب على خدمة FTTH.التجهيز: أعد إسقاط كل الطبقات إلى EPSG:32638، وافحص سلامة شبكة الطرق (Check Validity والتقاط التقاطعات)، واحفظ الكل في GeoPackage واحد أو PostGIS.
الفرز الأولي: ممر 500 م حول الكابلات الحالية (نموذج الفصل 11) لفصل المواقع القريبة عن البعيدة.
تحليل الشبكة: لكل موقع غير متصل احسب أقصر مسار على
roads_osmمن أقرب نقطة على الحلقة الرئيسية بأداة Shortest Path (Layer to Point) أو إضافة QNEAT3، فتحصل على مسارات مقترحة تمر على الطرق وطول كل منها.التكلفة والأولوية: أضف حقل تكلفة = طول المسار × تكلفة متر الحفر (استخدم قيمة من جهة عملك)، ثم رتّب المواقع بالجمع بين التكلفة والأهمية (مواقع 5G أولًا).
الطلب على FTTH: نطاق 200 م حول المسارات المقترحة وعدّ المباني داخله (Join Attributes by Location مع الملخّص) لمعرفة المسار الذي يخدم أكبر عدد من المباني.
الأتمتة والإخراج: ابنِ الخطوات 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+L | Data 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+T | Processing Toolbox |
| Ctrl+Alt+G | Model Designer |
| Ctrl+Alt+P | Python 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» على جهازك:
بيانات التدريب/—gis_training.gpkg،fiber_network.gpkg(الكابلات والمقاسم وطرق OSM)،telecom_sites.csv،riyadh_roads_osm.geojson،dem_asir_training.tif،scanned_map.jpg، ومخرجات hillshade وslope وaspect.shots/— لقطات الشاشة الأصلية من QGIS بدقة كاملة.scripts/— سكربتات PyQGIS التي بنت الأمثلة (للدراسة في الفصل 12)، وسكربت تنزيل الطرق من OpenStreetMapfetch_roads.py، ونموذجfiber_corridor.model3.
المراجع
الأدلة الرسمية الأربعة الأولى مترجمة بالكامل إلى العربية على هذا الموقع.