16.1. الدرس: إعداد PostGIS

سيتيح لك إعداد دوال PostGIS الوصول إلى الدوال المكانية من داخل PostgreSQL.

هدف هذا الدرس: تثبيت الدوال المكانية وعرض تأثيرها بإيجاز.

ملاحظة

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

16.1.1. التثبيت على Ubuntu

يمكن تثبيت Postgis بسهولة عبر apt.

$ sudo apt install postgresql
$ sudo apt install postgis

حقًا، الأمر بهذه السهولة...

ملاحظة

تعتمد الإصدارات الدقيقة التي ستُثبَّت على إصدار Ubuntu الذي تستخدمه والمستودعات التي ضبطتها. بعد التثبيت يمكنك التحقق من الإصدار بتنفيذ الاستعلام select PostGIS_full_version(); باستخدام psql أو أداة أخرى.

لتثبيت إصدار محدد (مثل الإصدار 13 من PostgreSQL والإصدار 3 من PostGIS)، يمكنك استخدام الأوامر التالية.

$ sudo apt install wget ca-certificates
$ sudo lsb_release -a
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
$ sudo apt-get update
$ sudo apt install postgis postgresql-13-postgis-3

16.1.2. التثبيت على Windows

يمكن التثبيت على Windows من الحزم الثنائية باستخدام نوافذ التثبيت المعتادة في Windows.

زر أولًا صفحة التنزيل. ثم اتبع هذا الدليل.

يمكن العثور على مزيد من المعلومات حول التثبيت على Windows في موقع PostGIS.

16.1.3. التثبيت على منصات أخرى

تحتوي صفحة التنزيل في موقع PostGIS على معلومات حول التثبيت على منصات أخرى منها macOS وتوزيعات Linux الأخرى

16.1.4. إعداد قواعد البيانات لاستخدام PostGIS

بعد تثبيت PostGIS، ستحتاج إلى إعداد قاعدة بياناتك لاستخدام الامتدادات. إذا كنت قد ثبّت إصدار PostGIS أحدث من 2.0، فالأمر بسيط كتنفيذ الأمر التالي باستخدام psql على قاعدة البيانات address من تمريننا السابق.

$ psql -d address -c "CREATE EXTENSION postgis;"

ملاحظة

تبعًا لإصدارك، يمكنك العثور على مزيد من التعليمات حول كيفية تمكين الخصائص المكانية في قاعدة البيانات على https://postgis.net/docs/postgis_administration.html#create_spatial_db.

16.1.5. نظرة على دوال PostGIS المثبتة

يمكن النظر إلى PostGIS على أنه مجموعة من الدوال داخل قاعدة البيانات توسّع القدرات الأساسية لـ PostgreSQL بحيث يتمكن من التعامل مع البيانات المكانية. ونعني بالتعامل: التخزين والاسترجاع والاستعلام والمعالجة. ولتحقيق ذلك، يُثبَّت عدد من الدوال في قاعدة البيانات.

أصبحت قاعدة بيانات PostgreSQL address الآن مدعمة جغرافيًا بفضل PostGIS. سنتعمق في ذلك كثيرًا في الأقسام القادمة، لكن لنقدم لك لمحة سريعة. لنفترض أننا نريد إنشاء نقطة من نص. أولًا نستخدم أمر psql للبحث عن الدوال المتعلقة بالنقطة. إذا لم تكن متصلًا بالفعل بقاعدة البيانات address، فاتصل بها الآن. ثم شغّل:

\df *point*

هذا هو الأمر الذي نبحث عنه: st_pointfromtext. للتنقل عبر القائمة، استخدم السهم السفلي، ثم اضغط Q للخروج والعودة إلى صدفة psql.

جرّب تشغيل هذا الأمر:

select st_pointfromtext('POINT(1 1)');

النتيجة:

st_pointfromtext
--------------------------------------------
0101000000000000000000F03F000000000000F03F
(1 row)

ثلاثة أمور يجب ملاحظتها:

  • عرّفنا نقطة في الموقع 1,1 (مع افتراض EPSG:4326) باستخدام POINT(1 1)،

  • شغّلنا عبارة sql، لكن ليس على أي جدول، بل على بيانات أُدخلت من موجّه SQL فقط،

  • الصف الناتج لا يحمل معنى واضحًا.

الصف الناتج بصيغة OGC المسماة 'Well Known Binary' (WKB). سننظر في هذه الصيغة بالتفصيل في القسم التالي.

لاسترجاع النتائج كنص، يمكننا إجراء بحث سريع في قائمة الدوال عن دالة تُرجع نصًا:

\df *text

الاستعلام الذي نبحث عنه الآن هو st_astext. لندمجه مع الاستعلام السابق:

select st_astext(st_pointfromtext('POINT(1 1)'));

النتيجة:

 st_astext
------------
  POINT(1 1)
  (1 row)

هنا أدخلنا السلسلة النصية POINT(1,1)، وحوّلناها إلى نقطة باستخدام st_pointfromtext()، ثم أعدناها إلى صيغة مقروءة للإنسان باستخدام st_astext()، فأعادت لنا السلسلة الأصلية.

مثال أخير قبل أن ندخل فعلًا في تفاصيل استخدام PostGIS:

select st_astext(st_buffer(st_pointfromtext('POINT(1 1)'),1.0));

ماذا فعل ذلك؟ أنشأ نطاقًا عازلًا بمقدار درجة واحدة حول النقطة، وأعاد النتيجة كنص.

16.1.6. أنظمة الإسناد المكاني

إضافةً إلى دوال PostGIS، يحتوي الامتداد على مجموعة من تعريفات أنظمة الإسناد المكاني (SRS) كما عرّفتها European Petroleum Survey Group (EPSG). وتُستخدم هذه التعريفات أثناء عمليات مثل تحويلات نظام الإحداثيات المرجعي (CRS).

يمكننا فحص تعريفات SRS هذه في قاعدة بياناتنا لأنها مخزنة في جداول قاعدة بيانات عادية.

أولًا، لننظر إلى مخطط الجدول بإدخال الأمر التالي في موجّه psql:

\d spatial_ref_sys

يجب أن تكون النتيجة كالتالي:

Table "public.spatial_ref_sys"
   Column   |          Type           | Modifiers
 -----------+-------------------------+-----------
  srid      | integer                 | not null
  auth_name | character varying(256)  |
  auth_srid | integer                 |
  srtext    | character varying(2048) |
  proj4text | character varying(2048) |
  Indexes:
"spatial_ref_sys_pkey" PRIMARY KEY, btree (srid)

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

من أنظمة SRID التي قد تهمك EPSG:4326، وهو نظام الإسناد الجغرافي (خطوط العرض/الطول) الذي يستخدم المجسم الإهليلجي WGS 84. لنلقِ نظرة عليه:

select * from spatial_ref_sys where srid=4326;

النتيجة:

srid      | 4326
auth_name | EPSG
auth_srid | 4326
srtext    | GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS
84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,
0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,
AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
proj4text | +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs

الحقل srtext هو تعريف الإسقاط بصيغة النص المعروف well known text (قد تتعرف عليه من ملفات .prj في مجموعة ملفات shapefile لديك).

16.1.7. الخلاصة

أصبحت دوال PostGIS الآن مثبتة في نسختك من PostgreSQL. وبذلك ستتمكن من الاستفادة من الدوال المكانية الواسعة التي يوفرها PostGIS.

16.1.8. ما التالي؟

ستتعلم فيما يلي كيف تُمثَّل المعالم المكانية في قاعدة البيانات.