5. تحميل البيانات المكانية¶
يوفّر PostGIS، المدعوم من مجموعة واسعة من المكتبات والتطبيقات، خيارات عديدة لتحميل البيانات.
سنحمّل أولًا بيانات العمل من ملف نسخة احتياطية لقاعدة البيانات، ثم نستعرض بعض الطرق القياسية لتحميل صيغ بيانات GIS المختلفة باستخدام أدوات شائعة.
5.1. تحميل ملف النسخة الاحتياطية¶
في متصفح PgAdmin، انقر بزر الفأرة الأيمن على أيقونة قاعدة البيانات nyc، ثم اختر الخيار Restore....
انتقل إلى موقع مجلد بيانات ورشة العمل (المتاح في حزمة البيانات الخاصة بالورشة)، واختر الملف
nyc_data.backup.
انقر على تبويب Restore options، ومرّر لأسفل إلى قسم Do not save واضبط Owner على Yes.
انقر على زر Restore. يجب أن تكتمل استعادة قاعدة البيانات دون أخطاء.
بعد اكتمال التحميل، انقر بزر الفأرة الأيمن على قاعدة البيانات nyc، واختر الخيار Refresh لتحديث معلومات العميل حول الجداول الموجودة في قاعدة البيانات.
ملاحظة
إذا أردت التدرّب على تحميل البيانات من الصيغ المكانية الأصلية، بدلًا من استخدام ملفات النسخ الاحتياطي لـ PostgreSQL التي تناولناها للتو، فسترشدك الأقسام القليلة التالية إلى التحميل باستخدام أدوات سطر أوامر مختلفة و QGIS DbManager. لاحظ أنه يمكنك تخطّي هذه الأقسام إذا كنت قد حمّلت البيانات مسبقًا باستخدام pgAdmin.
5.2. التحميل باستخدام ogr2ogr¶
ogr2ogr أداة سطر أوامر لتحويل البيانات بين صيغ بيانات GIS، بما فيها صيغ الملفات الشائعة وقواعد البيانات المكانية الشائعة.
- Windows:
يمكن تنزيل إصدارات ogr2ogr المبنية من GIS Internals.
تُضمَّن ogr2ogr ضمن تثبيت QGIS ويمكن الوصول إليها عبر OSGeo4W Shell -
يمكن تنزيل إصدارات ogr2ogr المبنية من MS4W.
- MacOS:
إذا ثبّتّ Postgres.app، فستجد
ogr2ogrفي المجلد/Applications/Postgres.app/Contents/Versions/*/bin.وأخيرًا، إذا كنت قد ثبّتّ HomeBrew فيمكنك تثبيت الحزمة gdal للوصول إلى
ogr2ogr
- Linux:
إذا ثبّتّ QGIS من الحزم، فيُفترض أن تكون
ogr2ogrمثبّتة وموجودة في PATH مسبقًا كجزء من الحزمتين gdal أو libgdal*.
يتضمن مجلد بيانات ورشة PostGIS مجلدًا فرعيًا 2000/ يحتوي على ملفات Shapefile من تعداد عام 2000، التي حلّت محلّها بيانات تعداد عام 2010. يمكننا التدرّب على تحميل البيانات باستخدام هذه الملفات، لتجنّب تعارض الأسماء مع البيانات التي حمّلناها مسبقًا من ملف النسخة الاحتياطية. تأكّد من أنك داخل المجلد الفرعي 2000/ في سطر الأوامر عند تنفيذ هذه التعليمات:
export PGPASSWORD=mydatabasepassword
بدلًا من تمرير كلمة المرور في سلسلة الاتصال، نضعها في متغيرات البيئة، كي لا تكون مرئية في قائمة العمليات أثناء تشغيل الأمر.
لاحظ أنك ستحتاج في Windows إلى استخدام set بدلًا من export.
ogr2ogr \
-nln nyc_census_blocks_2000 \
-nlt PROMOTE_TO_MULTI \
-lco GEOMETRY_NAME=geom \
-lco FID=gid \
-lco PRECISION=NO \
Pg:"dbname=nyc host=localhost user=pramsey port=5432" \
nyc_census_blocks_2000.shp
لمزيد من الوضوح البصري، تُعرض هذه الأسطر مع \، لكن يجب كتابتها في سطر واحد في سطر الأوامر لديك.
لدى ogr2ogr عدد هائل من الخيارات، ولا نستخدم هنا إلا عددًا قليلًا منها. إليك شرحًا للأمر سطرًا بسطر.
ogr2ogr \
اسم الملف التنفيذي! قد تحتاج إلى التأكد من أن موقع الملف التنفيذي موجود في PATH أو استخدام المسار الكامل للملف التنفيذي، بحسب إعداداتك.
-nln nyc_census_blocks_2000 \
يشير الخيار nln إلى "new layer name" (اسم الطبقة الجديدة)، ويحدد اسم الجدول الذي سيُنشأ في قاعدة البيانات الهدف.
-nlt PROMOTE_TO_MULTI \
يشير الخيار nlt إلى "new layer type" (نوع الطبقة الجديدة). في حالة ملفات Shapefile تحديدًا، كثيرًا ما يكون نوع الطبقة الجديدة "شكلًا هندسيًا متعدد الأجزاء"، لذا يجب إخبار النظام مسبقًا باستخدام "MultiPolygon" بدلًا من "Polygon" نوعًا للشكل الهندسي.
-lco GEOMETRY_NAME=geom \
-lco FID=gid \
-lco PRECISION=NO \
يشير الخيار lco إلى "layer create option" (خيار إنشاء الطبقة). لكل مشغّل خيارات إنشاء مختلفة، ونستخدم هنا ثلاثة خيارات خاصة بـ مشغّل PostgreSQL.
يحدد GEOMETRY_NAME اسم عمود الشكل الهندسي. نفضّل الاسم "geom" على الاسم الافتراضي، لكي تتوافق جداولنا مع أسماء الأعمدة القياسية في هذه الورشة.
يحدد FID اسم عمود المفتاح الأساسي. ونفضّل هنا أيضًا "gid" وهو الاسم القياسي المستخدم في الورشة.
يتحكم PRECISION في طريقة تمثيل الحقول الرقمية في قاعدة البيانات. الافتراضي عند تحميل ملف Shapefile هو استخدام النوع "numeric" في قاعدة البيانات، وهو أدق لكنه أحيانًا أصعب في التعامل من الأنواع الرقمية البسيطة مثل "integer" و"double precision". نستخدم القيمة "NO" لإيقاف استخدام النوع "numeric".
Pg:"dbname=nyc host=localhost user=pramsey port=5432" \
ترتيب الوسائط في ogr2ogr هو تقريبًا: الملف التنفيذي، ثم الخيارات، ثم موقع الوجهة، ثم موقع المصدر. إذن هذه هي الوجهة، أي سلسلة الاتصال بقاعدة بيانات PostgreSQL الخاصة بنا. الجزء "Pg:" هو اسم المشغّل، ثم تأتي سلسلة الاتصال بين علامتي اقتباس (لأنها قد تحتوي على مسافات).
nyc_census_blocks_2000.shp
مجموعة البيانات المصدر في هذه الحالة هي ملف Shapefile الذي نقرؤه. يمكن قراءة عدة طبقات في استدعاء واحد بوضع سلسلة اتصال هنا تليها قائمة بأسماء الطبقات، لكن لدينا في هذه الحالة ملف Shapefile واحد فقط لتحميله.
5.3. ملفات Shapefile؟ ما هذه؟¶
قد تسأل نفسك: "ما هذا الـ shapefile؟" يشير مصطلح "shapefile" عادةً إلى مجموعة ملفات بامتدادات .shp و .shx و .dbf وغيرها تشترك في اسم واحد (مثل nyc_census_blocks). أما ملف shapefile الفعلي فيخص تحديدًا الملفات ذات الامتداد .shp. ومع ذلك فإن ملف .shp وحده غير مكتمل للتوزيع دون الملفات الداعمة المطلوبة.
الملفات الإلزامية:
.shp— صيغة الشكل؛ الشكل الهندسي للمعالم نفسه.shx— صيغة فهرس الشكل؛ فهرس موضعي للشكل الهندسي للمعالم.dbf— صيغة البيانات الوصفية؛ بيانات وصفية في أعمدة لكل شكل، بصيغة dBase III
تشمل الملفات الاختيارية:
.prj— صيغة الإسقاط؛ معلومات نظام الإحداثيات والإسقاط، وهو ملف نصي بسيط يصف الإسقاط بصيغة النص المعروف (well-known text)
تجعل الأداة shp2pgsql بيانات Shapefile قابلة للاستخدام في PostGIS بتحويلها من بيانات ثنائية إلى سلسلة من أوامر SQL تُنفَّذ بعد ذلك في قاعدة البيانات لتحميل البيانات.
5.4. التحميل باستخدام shp2pgsql¶
تحوّل الأداة shp2pgsql ملفات Shapefile إلى SQL. وهي أداة تحويل جزء من الشيفرة المصدرية لـ PostGIS وتأتي مع حزم PostGIS. إذا ثبّتّ PostgreSQL محليًا على حاسوبك، فقد تجد أن shp2pgsql ثُبّتت معه، وأنها متاحة في مجلد الملفات التنفيذية لتثبيتك.
على خلاف ogr2ogr، لا تتصل shp2pgsql مباشرةً بقاعدة البيانات الهدف، بل تُخرج فقط تعليمات SQL المكافئة لملف Shapefile المُدخل. ويعود للمستخدم تمرير SQL إلى قاعدة البيانات، إما عبر "أنبوب" (pipe) أو بحفظ SQL في ملف ثم تحميله.
إليك مثالًا على الاستدعاء، يحمّل البيانات نفسها كما سبق:
export PGPASSWORD=mydatabasepassword
shp2pgsql \
-D \
-I \
-s 26918 \
nyc_census_blocks_2000.shp \
nyc_census_blocks_2000 \
| psql dbname=nyc user=postgres host=localhost
إليك شرحًا للأمر سطرًا بسطر.
shp2pgsql \
البرنامج التنفيذي! يقرأ ملف البيانات المصدر، ويُخرج SQL يمكن توجيهه إلى ملف أو تمريره عبر أنبوب إلى psql لتحميله مباشرةً في قاعدة البيانات.
-D \
يطلب العَلَم D من البرنامج توليد "صيغة التفريغ" (dump format) وهي أسرع كثيرًا في التحميل من "صيغة الإدراج" (insert format) الافتراضية.
-I \
يطلب العَلَم I من البرنامج إنشاء فهرس مكاني على الجدول بعد اكتمال التحميل.
-s 26918 \
يخبر العَلَم s البرنامج بقيمة "معرّف النظام المرجعي المكاني (SRID)" للبيانات. جميع البيانات المصدر لهذه الورشة بنظام "UTM 18"، وقيمة SRID له هي 26918 (انظر أدناه).
nyc_census_blocks_2000.shp \
ملف Shapefile المصدر المراد قراءته.
nyc_census_blocks_2000 \
اسم الجدول المستخدم عند إنشاء الجدول الهدف.
| psql dbname=nyc user=postgres host=localhost
تولّد الأداة تدفقًا من SQL. يأخذ المعامل "|" هذا التدفق ويستخدمه مُدخلًا لبرنامج طرفية قاعدة البيانات psql. ووسائط psql هي ببساطة سلسلة الاتصال بقاعدة البيانات الهدف.
5.5. SRID 26918؟ ما قصته؟¶
معظم خطوات الاستيراد واضحة بذاتها، لكن حتى المحترفين ذوي الخبرة في GIS قد يتعثرون في SRID.
يرمز "SRID" إلى "Spatial Reference IDentifier" (معرّف النظام المرجعي المكاني). وهو يحدد جميع معاملات نظام الإحداثيات الجغرافي والإسقاط لبياناتنا. ويتميز SRID بالملاءمة لأنه يجمع كل المعلومات المتعلقة بإسقاط الخريطة (التي قد تكون معقدة جدًا) في رقم واحد.
يمكنك الاطلاع على تعريف إسقاط خريطة ورشتنا بالبحث عنه إما في قاعدة بيانات على الإنترنت،
أو مباشرةً داخل PostGIS باستعلام على الجدول spatial_ref_sys.
SELECT srtext FROM spatial_ref_sys WHERE srid = 26918;
ملاحظة
الجدول spatial_ref_sys في PostGIS جدول قياسي وفق OGC يعرّف جميع الأنظمة المرجعية المكانية التي تعرفها قاعدة البيانات. وتضم البيانات المرفقة مع PostGIS أكثر من 3000 نظام مرجعي مكاني معروف، مع التفاصيل اللازمة للتحويل وإعادة الإسقاط بينها.
في الحالتين، سترى تمثيلًا نصيًا للنظام المرجعي المكاني 26918 (منسّقًا هنا للوضوح):
PROJCS["NAD83 / UTM zone 18N",
GEOGCS["NAD83",
DATUM["North_American_Datum_1983",
SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],
AUTHORITY["EPSG","6269"]],
PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],
UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],
AUTHORITY["EPSG","4269"]],
UNIT["metre",1,AUTHORITY["EPSG","9001"]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",-75],
PARAMETER["scale_factor",0.9996],
PARAMETER["false_easting",500000],
PARAMETER["false_northing",0],
AUTHORITY["EPSG","26918"],
AXIS["Easting",EAST],
AXIS["Northing",NORTH]]
إذا فتحت الملف nyc_neighborhoods.prj من مجلد البيانات، فسترى تعريف الإسقاط نفسه.
البيانات التي تتلقاها من الجهات المحلية — مثل مدينة نيويورك — تكون عادةً بإسقاط محلي يُشار إليه بـ "state plane" أو "UTM". وإسقاطنا هو "Universal Transverse Mercator (UTM) Zone 18 North" أو EPSG:26918.
5.6. أشياء لتجربتها: عرض البيانات باستخدام QGIS¶
QGIS برنامج مكتبي لعرض بيانات GIS وتحريرها للاطلاع السريع على البيانات. يمكنك عرض عدد من صيغ البيانات منها ملفات Shapefile وقواعد بيانات PostGIS. وتتيح واجهته الرسومية استكشاف بياناتك بسهولة، إضافةً إلى الاختبار البسيط والتنسيق السريع.
جرّب استخدام هذا البرنامج للاتصال بقاعدة بيانات PostGIS الخاصة بك. يمكن تنزيل التطبيق من https://qgis.org
ستحتاج أولًا إلى إنشاء اتصال بقاعدة بيانات PostGIS عبر القائمة Layer->Add Layer->PostGIS Layers->New ثم ملء الحقول المطلوبة. بعد إنشاء الاتصال، يمكنك إضافة طبقات بالنقر على connect واختيار جدول لعرضه.
5.7. تحميل البيانات باستخدام DbManager في QGIS¶
يأتي QGIS مع أداة تسمى DbManager تتيح لك الاتصال بأنواع مختلفة من قواعد البيانات، ومنها قاعدة بيانات مفعّل فيها PostGIS. بعد إعداد اتصال بقاعدة بيانات PostGIS، انتقل إلى Database->DbManager ووسّع الشجرة حتى قاعدة بياناتك كما هو موضح أدناه:
من هناك يمكنك استخدام خيار القائمة Import Layer/File لتحميل صيغ مكانية عديدة. وإضافةً إلى القدرة على تحميل البيانات من صيغ مكانية كثيرة وتصديرها إلى صيغ كثيرة، يمكنك أيضًا إضافة استعلامات مخصصة إلى لوحة الخريطة أو تعريف عروض (views) في قاعدة بياناتك، باستخدام أيقونة مفتاح الربط المميّزة.