16.2. الدرس: نموذج المعالم البسيطة

كيف يمكننا تخزين المعالم الجغرافية وتمثيلها في قاعدة بيانات؟ سنتناول في هذا الدرس إحدى الطرق، وهي نموذج المعالم البسيطة (Simple Feature Model) كما عرّفه OGC.

هدف هذا الدرس: معرفة ماهية نموذج SFS وكيفية استخدامه.

16.2.1. ما هو OGC

نشأ اتحاد Open Geospatial Consortium (OGC)، وهو منظمة دولية تطوعية لوضع المعايير بالتوافق، في عام 1994. يتعاون في OGC أكثر من 370 منظمة تجارية وحكومية وغير ربحية وبحثية حول العالم في عملية توافق مفتوحة تشجع على تطوير وتطبيق المعايير الخاصة بالمحتوى والخدمات الجغرافية المكانية، ومعالجة بيانات نظم المعلومات الجغرافية، ومشاركة البيانات. - Wikipedia

16.2.2. ما هو نموذج SFS

نموذج Simple Feature for SQL (SFS) هو طريقة غير طوبولوجية لتخزين البيانات الجغرافية المكانية في قاعدة بيانات، ويعرّف دوالًا للوصول إلى هذه البيانات ومعالجتها وإنشائها.

../../../_images/ogc_sfs.png

يعرّف النموذج البيانات الجغرافية المكانية من الأنواع Point و Linestring و Polygon (وتجميعاتها في كائنات Multi).

لمزيد من المعلومات، اطّلع على معيار OGC Simple Feature for SQL.

16.2.3. إضافة حقل شكل هندسي إلى الجدول

لنُضف حقل نقاط إلى جدول الأشخاص:

alter table people add column geom geometry;

16.2.4. إضافة قيد مبني على نوع الشكل الهندسي

ستلاحظ أن نوع حقل الشكل الهندسي لا يحدد ضمنيًا نوع الشكل الهندسي للحقل، ولذلك نحتاج إلى قيد:

alter table people
add constraint people_geom_point_chk
    check(st_geometrytype(geom) = 'ST_Point'::text
          OR geom IS NULL);

يضيف هذا قيدًا إلى الجدول بحيث لا يقبل إلا شكلًا هندسيًا من نوع نقطة أو قيمة فارغة (null).

16.2.5. ★★★ جرّب بنفسك:

أنشئ جدولًا جديدًا باسم cities وأضف إليه بعض الأعمدة المناسبة، بما فيها حقل شكل هندسي لتخزين المضلعات (حدود المدن). تأكد من أن له قيدًا يفرض أن تكون الأشكال الهندسية مضلعات.

16.2.6. تعبئة الجدول geometry_columns

عند هذه المرحلة يجب عليك أيضًا إضافة إدخال إلى الجدول geometry_columns:

insert into geometry_columns values
  ('','public','people','geom',2,4326,'POINT');

لماذا؟ تستخدم بعض التطبيقات geometry_columns لمعرفة الجداول التي تحتوي على بيانات أشكال هندسية في قاعدة البيانات.

ملاحظة

إذا تسببت عبارة INSERT أعلاه في خطأ، فشغّل هذا الاستعلام أولًا:

select * from geometry_columns;

إذا احتوى العمود f_table_name على القيمة people، فهذا الجدول مسجل بالفعل ولا تحتاج إلى فعل أي شيء آخر.

تشير القيمة 2 إلى عدد الأبعاد؛ وفي هذه الحالة بُعدان: X و Y.

تشير القيمة 4326 إلى الإسقاط الذي نستخدمه؛ وفي هذه الحالة WGS 84، الذي يُشار إليه بالرقم 4326 (راجع النقاش السابق حول EPSG).

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

أضف إدخال geometry_columns مناسبًا لطبقة المدن الجديدة

16.2.7. إضافة سجل شكل هندسي إلى الجدول باستخدام SQL

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

insert into people (name,house_no, street_id, phone_no, geom)
        values ('Fault Towers',
                 34,
                 3,
                 '072 812 31 28',
                 'SRID=4326;POINT(33 -33)');

ملاحظة

في الإدخال الجديد أعلاه، ستحتاج إلى تحديد الإسقاط (SRID) الذي تريد استخدامه. وذلك لأنك أدخلت الشكل الهندسي للنقطة الجديدة باستخدام سلسلة نصية عادية، وهي لا تضيف معلومات الإسقاط الصحيحة تلقائيًا. ومن البديهي أن النقطة الجديدة يجب أن تستخدم SRID نفسه الخاص بمجموعة البيانات التي تُضاف إليها، لذلك عليك تحديده.

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

ربما حان الوقت الآن لفتح QGIS ومحاولة عرض الجدول people. وينبغي أيضًا أن نجرب تعديل السجلات وإضافتها وحذفها ثم تنفيذ استعلامات select في قاعدة البيانات لنرى كيف تغيرت البيانات.

لتحميل طبقة PostgreSQL في QGIS، استخدم خيار القائمة Layer ► Add PostgreSQL Layers أو زر شريط الأدوات:

addPostgisLayer

سيفتح ذلك نافذة الحوار:

../../../_images/add_postgis_layer_dialog.png

انقر على الزر New لفتح نافذة الحوار هذه:

../../../_images/new_postgis_connection.png

ثم عرّف اتصالًا جديدًا، مثلًا:

Name: myPG
Service:
Host: localhost
Port: 5432
Database: address
User:
Password:

للتحقق من أن QGIS عثر على قاعدة البيانات address وأن اسم المستخدم وكلمة المرور صحيحان، انقر على Test Connect. إذا نجح الاتصال، فعّل المربعين بجوار Save Username و Save Password. ثم انقر على OK لإنشاء هذا الاتصال.

بالعودة إلى نافذة الحوار Add PostgreSQL Layers، انقر على Connect وأضف الطبقات إلى مشروعك كالمعتاد.

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

صُغ استعلامًا يعرض اسم الشخص واسم الشارع والموقع (من العمود geom) كنص عادي.

16.2.8. الخلاصة

رأيت كيف تضيف كائنات مكانية إلى قاعدة بياناتك وتعرضها في برامج نظم المعلومات الجغرافية.

16.2.9. ما التالي؟

سترى فيما يلي كيف تستورد البيانات إلى قاعدة بياناتك وتصدّرها منها.