GISarabia.org
PostGIS 3.6 · Official Manual · ترجمة عربية

فصل 9. الطوبولوجيا

الصفحة الأصلية بالإنجليزية postgis.net ↗

فصل 9. الطوبولوجيا

تُستخدم أنواع ودوال طوبولوجيا PostGIS لإدارة الكائنات الطوبولوجية مثل الأوجه والحواف والعقد.

يقدّم عرض ساندرو سانتيلي (Sandro Santilli) في مؤتمر PostGIS Day Paris 2011 ملخصًا جيدًا عن طوبولوجيا PostGIS ووجهتها المستقبلية: شرائح عرض الطوبولوجيا مع PostGIS 2.0.

يقدّم فنسنت بيكافيه (Vincent Picavet) ملخصًا ونظرة عامة جيدة عن ماهية الطوبولوجيا وكيفية استخدامها وأدوات FOSS4G المختلفة التي تدعمها في طوبولوجيا PostGIS في PGConf EU 2012.

من أمثلة قواعد بيانات GIS المبنية طوبولوجيًا قاعدة بيانات نظام الترميز والإسناد الجغرافي المتكامل طوبولوجيًا (TIGER) التابع لمكتب التعداد الأمريكي. إذا أردت تجربة طوبولوجيا PostGIS واحتجت إلى بعض البيانات، فاطّلع على Topology_Load_Tiger.

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

يمكن العثور على تفاصيل هذا المشروع في ويكي طوبولوجيا PostGIS

تُثبَّت جميع الدوال والجداول المرتبطة بهذه الوحدة في مخطط يُسمى topology.

الدوال المعرّفة في معيار SQL/MM تبدأ بالبادئة ST_، أما الدوال الخاصة بـ PostGIS فلا تحمل بادئة.

يُبنى دعم الطوبولوجيا افتراضيًا بدءًا من PostGIS 2.0، ويمكن تعطيله بتحديد خيار الإعداد --without-topology وقت البناء كما هو موضح في فصل 2, تثبيت PostGIS

9.1. أنواع الطوبولوجيا

خلاصة

يسرد هذا القسم أنواع بيانات PostgreSQL التي تثبّتها طوبولوجيا PostGIS. لاحظ أننا نصف سلوك التحويل (casting) لهذه الأنواع، وهو أمر بالغ الأهمية خاصةً عند تصميم دوالك الخاصة.

  • getfaceedges_returntype — نوع مركب يتكوّن من رقم تسلسلي ورقم حافة.
  • TopoGeometry — نوع مركب يمثّل شكلًا هندسيًا معرّفًا طوبولوجيًا.
  • validatetopology_returntype — نوع مركب يتكوّن من رسالة خطأ ومن id1 وid2 للإشارة إلى موضع الخطأ. وهو نوع القيمة المُعادة من ValidateTopology.

9.2. نطاقات (Domains) الطوبولوجيا

خلاصة

يسرد هذا القسم نطاقات (domains) PostgreSQL التي تثبّتها طوبولوجيا PostGIS. يمكن استخدام النطاقات مثل أنواع الكائنات، كقيم مُعادة من الدوال أو كأعمدة في الجداول. والفرق بين النطاق والنوع هو أن النطاق نوع موجود مرتبط به قيد تحقق (check constraint).

  • TopoElement — مصفوفة من عددين صحيحين تُستخدم عمومًا لتعريف أحد مكوّنات TopoGeometry.
  • TopoElementArray — مصفوفة من كائنات TopoElement.

9.3. إدارة الطوبولوجيا وTopoGeometry

خلاصة

يسرد هذا القسم دوال الطوبولوجيا الخاصة ببناء مخططات طوبولوجيا جديدة، والتحقق من صلاحية الطوبولوجيات، وإدارة أعمدة TopoGeometry

  • AddTopoGeometryColumn — تضيف عمود topogeometry إلى جدول موجود، وتسجّل هذا العمود الجديد كطبقة في topology.layer، وتُعيد قيمة layer_id الجديدة.
  • RenameTopoGeometryColumn — تُعيد تسمية عمود topogeometry
  • DropTopology — استخدمها بحذر: تحذف مخطط طوبولوجيا وتحذف مرجعه من الجدول topology.topology، وتحذف المراجع إلى الجداول في ذلك المخطط من الجدول geometry_columns.
  • RenameTopology — تُعيد تسمية طوبولوجيا
  • DropTopoGeometryColumn — تحذف عمود topogeometry من الجدول المسمّى table_name في المخطط schema_name وتلغي تسجيل الأعمدة من الجدول topology.layer.
  • FixCorruptTopoGeometryColumn — Fixes topogeometry corruption caused by upgrade to postgis_topology 3.6.0 and higher
  • Populate_Topology_Layer — تضيف الإدخالات المفقودة إلى الجدول topology.layer بقراءة البيانات الوصفية من جداول الطوبولوجيا.
  • TopologySummary — تأخذ اسم طوبولوجيا وتقدّم مجاميع موجزة لأنواع الكائنات في الطوبولوجيا.
  • ValidateTopology — تُعيد مجموعة من كائنات validatetopology_returntype تفصّل المشكلات في الطوبولوجيا.
  • ValidateTopologyRelation — تُعيد معلومات عن سجلات علاقات الطوبولوجيا غير الصالحة
  • ValidateTopologyPrecision — تُعيد الرؤوس غير الدقيقة في الطوبولوجيا.
  • MakeTopologyPrecise — التقاط رؤوس الطوبولوجيا إلى شبكة الدقة.
  • FindTopology — تُعيد سجل طوبولوجيا بوسائل مختلفة.
  • FindLayer — تُعيد سجلًا من topology.layer بوسائل مختلفة.
  • TotalTopologySize — إجمالي مساحة القرص التي تستخدمها الطوبولوجيا المحددة، بما في ذلك جميع الفهارس وبيانات TOAST.
  • UpgradeTopology — تُرقّي الطوبولوجيا المحددة لدعم المعرّفات الكبيرة (int8) للطوبولوجيا وللعناصر الأوّلية.

9.4. إدارة إحصاءات الطوبولوجيا

خلاصة

يناقش هذا القسم إدارة إحصاءات قاعدة البيانات أثناء بناء الطوبولوجيا.

تؤدي إضافة عناصر إلى طوبولوجيا إلى تنفيذ العديد من استعلامات قاعدة البيانات للعثور على الحواف الموجودة التي ستُقسَّم، وإضافة العقد، وتحديث الحواف التي ستتصل بعُقد مع الخطوط الجديدة. ولهذا السبب من المفيد أن تكون الإحصاءات عن البيانات في جداول الطوبولوجيا محدّثة.

لا تحدّث دوال تعبئة طوبولوجيا PostGIS وتحريرها الإحصاءات تلقائيًا، لأن تحديث الإحصاءات بعد كل تغيير في الطوبولوجيا سيكون مبالغة، لذا تقع مسؤولية ذلك على عاتق المستدعي.

[ملاحظة]

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

9.5. مُنشِئات الطوبولوجيا

خلاصة

يغطي هذا القسم دوال الطوبولوجيا الخاصة بإنشاء طوبولوجيات جديدة.

  • CreateTopology — تُنشئ مخطط طوبولوجيا جديدًا وتسجّله في الجدول topology.topology.
  • CopyTopology — تنشئ نسخة من طوبولوجيا (العقد والحواف والأوجه والطبقات وكائنات TopoGeometry) في مخطط جديد
  • ST_InitTopoGeo — تُنشئ مخطط طوبولوجيا جديدًا وتسجّله في الجدول topology.topology.
  • ST_CreateTopoGeo — تضيف مجموعة من الأشكال الهندسية إلى طوبولوجيا فارغة معطاة وتُعيد رسالة توضّح نجاح العملية.
  • TopoGeo_AddPoint — تضيف نقطة إلى طوبولوجيا موجودة باستخدام تسامح، مع احتمال تقسيم حافة موجودة.
  • TopoGeo_AddLineString — تضيف خطًا (LineString) إلى طوبولوجيا موجودة باستخدام تسامح، مع احتمال تقسيم حواف/أوجه موجودة.
  • TopoGeo_AddPolygon — تضيف مضلعًا إلى طوبولوجيا موجودة باستخدام تسامح، مع احتمال تقسيم حواف/أوجه موجودة. تُعيد معرّفات الأوجه.
  • TopoGeo_LoadGeometry — تحميل شكل هندسي إلى طوبولوجيا موجودة، مع الالتقاط والتقسيم حسب الحاجة.

9.6. محرّرات الطوبولوجيا

خلاصة

يغطي هذا القسم دوال الطوبولوجيا الخاصة بإضافة الحواف والأوجه والعقد ونقلها وحذفها وتقسيمها. جميع هذه الدوال معرّفة في ISO SQL/MM.

  • ST_AddIsoNode — تضيف عقدة معزولة إلى وجه في طوبولوجيا وتُعيد معرّف العقدة الجديدة (nodeid). إذا كان الوجه null فإن العقدة تُنشأ مع ذلك.
  • ST_AddIsoEdge — تضيف حافة معزولة معرّفة بالشكل الهندسي alinestring إلى طوبولوجيا، تصل بين عقدتين معزولتين موجودتين anode وanothernode، وتُعيد معرّف الحافة الجديدة.
  • ST_AddEdgeNewFaces — تضيف حافة جديدة، وإذا أدى ذلك إلى تقسيم وجه، تحذف الوجه الأصلي وتستبدله بوجهين جديدين.
  • ST_AddEdgeModFace — تضيف حافة جديدة، وإذا أدى ذلك إلى تقسيم وجه، تعدّل الوجه الأصلي وتضيف وجهًا جديدًا.
  • ST_RemEdgeNewFace — تزيل حافة، وإذا كانت الحافة المزالة تفصل بين وجهين، تحذف الوجهين الأصليين وتستبدلهما بوجه جديد.
  • ST_RemEdgeModFace — تزيل حافة، وإذا كانت الحافة تفصل بين وجهين، تحذف أحد الوجهين وتعدّل الوجه الآخر ليغطي مساحة كليهما.
  • ST_ChangeEdgeGeom — تغيّر شكل حافة دون التأثير في بنية الطوبولوجيا.
  • ST_ModEdgeSplit — تقسّم حافة بإنشاء عقدة جديدة على امتداد حافة موجودة، مع تعديل الحافة الأصلية وإضافة حافة جديدة.
  • ST_ModEdgeHeal — تدمج حافتين بحذف العقدة التي تصل بينهما، مع تعديل الحافة الأولى وحذف الحافة الثانية. تُعيد معرّف العقدة المحذوفة.
  • ST_NewEdgeHeal — تدمج حافتين بحذف العقدة التي تصل بينهما، وحذف الحافتين كلتيهما، واستبدالهما بحافة اتجاهها مماثل لاتجاه الحافة الأولى المعطاة.
  • ST_MoveIsoNode — تنقل عقدة معزولة في طوبولوجيا من نقطة إلى أخرى. إذا كان الشكل الهندسي apoint الجديد موجودًا كعقدة فسيُطلق خطأ. تُعيد وصفًا لعملية النقل.
  • ST_NewEdgesSplit — تقسّم حافة بإنشاء عقدة جديدة على امتداد حافة موجودة، مع حذف الحافة الأصلية واستبدالها بحافتين جديدتين. تُعيد معرّف العقدة الجديدة المُنشأة التي تصل بين الحافتين الجديدتين.
  • ST_RemoveIsoNode — تزيل عقدة معزولة وتُعيد وصفًا للإجراء. إذا لم تكن العقدة معزولة (أي كانت بداية حافة أو نهايتها)، فسيُطلق استثناء.
  • ST_RemoveIsoEdge — تزيل حافة معزولة وتُعيد وصفًا للإجراء. إذا لم تكن الحافة معزولة، فسيُطلق استثناء.

9.7. دوال الوصول إلى الطوبولوجيا

  • GetEdgeByPoint — تبحث عن معرّف الحافة (edge-id) لحافة تتقاطع مع نقطة معطاة.
  • GetFaceByPoint — تبحث عن الوجه الذي يتقاطع مع نقطة معطاة.
  • GetFaceContainingPoint — تبحث عن الوجه الذي يحتوي نقطة.
  • GetNodeByPoint — تبحث عن معرّف العقدة (node-id) لعقدة عند موقع نقطي.
  • GetTopologyID — تُعيد معرّف طوبولوجيا في الجدول topology.topology بإعطائها اسم الطوبولوجيا.
  • GetTopologySRID — تُعيد قيمة SRID لطوبولوجيا في الجدول topology.topology بإعطائها اسم الطوبولوجيا.
  • GetTopologyName — تُعيد اسم طوبولوجيا (المخطط) بإعطائها معرّف الطوبولوجيا.
  • ST_GetFaceEdges — تُعيد مجموعة مرتّبة من الحواف التي تحدّ aface.
  • ST_GetFaceGeometry — تُعيد المضلع في الطوبولوجيا المعطاة ذا معرّف الوجه المحدد.
  • GetRingEdges — تُعيد المجموعة المرتّبة من معرّفات الحواف ذات الإشارة التي تُصادَف عند السير على جانب معطى من حافة.
  • GetNodeEdges — تُعيد مجموعة مرتّبة من الحواف الملاقية للعقدة المعطاة.

9.8. معالجة الطوبولوجيا

خلاصة

يغطي هذا القسم الدوال الخاصة بمعالجة الطوبولوجيات بطرق غير قياسية.

  • Polygonize — تبحث عن جميع الأوجه المعرّفة بحواف الطوبولوجيا وتسجّلها.
  • AddNode — تضيف عقدة نقطية إلى جدول العقد في مخطط الطوبولوجيا المحدد وتُعيد معرّف العقدة الجديدة (nodeid). إذا كانت النقطة موجودة بالفعل كعقدة، يُعاد معرّف العقدة الموجودة.
  • AddEdge — تضيف حافة خطية (LineString) إلى جدول الحواف، ونقطتي البداية والنهاية المرتبطتين بها إلى جدول العقد النقطية في مخطط الطوبولوجيا المحدد، باستخدام الشكل الهندسي الخطي المحدد، وتُعيد معرّف الحافة (edgeid) الجديدة (أو الموجودة).
  • AddFace — تسجّل عنصرًا أوليًا من نوع وجه في طوبولوجيا وتحصل على معرّفه.
  • ST_Simplify — تُعيد نسخة geometry «مبسّطة» من TopoGeometry المعطى باستخدام خوارزمية Douglas-Peucker.
  • RemoveUnusedPrimitives — تزيل العناصر الأولية للطوبولوجيا غير اللازمة لتعريف كائنات TopoGeometry الموجودة.

9.9. دوال إنشاء TopoGeometry

خلاصة

يتناول هذا القسم دوال الطوبولوجيا الخاصة بإنشاء كائنات TopoGeometry جديدة.

  • CreateTopoGeom — تُنشئ كائن TopoGeometry جديدًا من مصفوفة عناصر طوبولوجية - tg_type: ‏1:‏ نقطة [متعددة]، 2: خط [متعدد]، 3: مضلع [متعدد]، 4: مجموعة أشكال
  • toTopoGeom — تحوّل شكلًا هندسيًا بسيطًا إلى TopoGeometry.
  • TopoElementArray_Agg — تُعيد topoelementarray لمجموعة من مصفوفات element_id وtype (عناصر طوبولوجية).
  • TopoElement — تحوّل TopoGeometry إلى topoelement.

9.10. دوال تحرير TopoGeometry

خلاصة

يتناول هذا القسم دوال الطوبولوجيا الخاصة بتحرير كائنات TopoGeometry الموجودة.

9.11. دوال الوصول إلى TopoGeometry

  • GetTopoGeomElementArray — تُعيد topoelementarray (مصفوفة من العناصر الطوبولوجية) تحتوي على العناصر الطوبولوجية ونوع كائن TopoGeometry المعطى (العناصر الأولية).
  • GetTopoGeomElements — تُعيد مجموعة من كائنات topoelement تحتوي على element_id وelement_type الطوبولوجيين لكائن TopoGeometry المعطى (العناصر الأولية).
  • ST_SRID — تُعيد معرّف النظام المرجعي المكاني لكائن TopoGeometry.

9.12. دوال إخراج TopoGeometry

  • AsGML — تُعيد تمثيل GML لكائن TopoGeometry.
  • AsTopoJSON — تُعيد تمثيل TopoJSON لكائن TopoGeometry.

9.13. العلاقات المكانية في الطوبولوجيا

خلاصة

يسرد هذا القسم دوال الطوبولوجيا المستخدمة للتحقق من العلاقات بين كائنات TopoGeometry والعناصر الطوبولوجية الأولية

  • Equals — تُعيد true إذا كان كائنا TopoGeometry يتكوّنان من العناصر الطوبولوجية الأولية نفسها.
  • Intersects — تُعيد true إذا تقاطع أي زوج من العناصر الأولية من كائني TopoGeometry.

9.14. استيراد الطوبولوجيات وتصديرها

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

استخدام أدوات التفريغ/الاستعادة القياسية في PostgreSQL مسألة إشكالية، لأن الطوبولوجيات تتكوّن من مجموعة جداول (4 للعناصر الأولية، وعدد اعتباطي للطبقات) ومن سجلات في جداول البيانات الوصفية (topology.topology وtopology.layer). إضافة إلى ذلك، فإن معرّفات الطوبولوجيا ليست فريدة عبر قواعد البيانات، لذا سيلزم تغيير هذا المعامل من طوبولوجيتك عند استعادتها.

لتبسيط تصدير الطوبولوجيات واستعادتها، يُوفَّر برنامجان تنفيذيان: pgtopo_export وpgtopo_import. مثال على الاستخدام:

pgtopo_export dev_db topo1 | pgtopo_import topo1 | psql staging_db

9.14.1. استخدام مُصدِّر الطوبولوجيا

يأخذ السكربت pgtopo_export اسم قاعدة بيانات واسم طوبولوجيا ويُخرج ملف تفريغ يمكن استخدامه لاستيراد الطوبولوجيا (والطبقات المرتبطة بها) إلى قاعدة بيانات جديدة.

افتراضيًا، يكتب pgtopo_export ملف التفريغ إلى المخرج القياسي بحيث يمكن تمريره عبر أنبوب إلى pgtopo_import أو إعادة توجيهه إلى ملف (مع رفض الكتابة إلى الطرفية). ويمكنك اختياريًا تحديد اسم ملف المخرجات باستخدام مفتاح سطر الأوامر -f.

افتراضيًا، يتضمّن pgtopo_export تفريغًا لجميع الطبقات المعرّفة على الطوبولوجيا المعطاة. وقد يكون ذلك بيانات أكثر مما تحتاج، أو قد لا يعمل (إذا كانت لجداول طبقاتك اعتماديات معقدة)، وفي هذه الحالة يمكنك طلب تخطي الطبقات باستخدام المفتاح --skip-layers والتعامل معها بشكل منفصل.

يؤدي استدعاء pgtopo_export مع المفتاح --help (أو -h اختصارًا) دائمًا إلى طباعة نص استخدام مختصر.

صيغة ملف التفريغ هي أرشيف tar مضغوط لدليل pgtopo_export يحتوي على الأقل ملف pgtopo_dump_version يضم معلومات إصدار الصيغة. ومنذ الإصدار 1 يحتوي الدليل على ملفات CSV مفصولة بعلامات الجدولة تضم بيانات جداول العناصر الطوبولوجية الأولية (node وedge_data وface وrelation)، وسجلات الطوبولوجيا والطبقات المرتبطة بها، و(ما لم يُعطَ --skip-layers) تفريغًا لـ PostgreSQL بالصيغة المخصّصة للجداول المُبلَّغ عنها بوصفها طبقات للطوبولوجيا المعطاة.

9.14.2. استخدام مُستورِد الطوبولوجيا

يأخذ السكربت pgtopo_import تفريغًا لطوبولوجيا بصيغة pgtopo_export واسمًا يُعطى للطوبولوجيا المراد إنشاؤها، ويُخرج سكربت SQL يعيد بناء الطوبولوجيا والطبقات المرتبطة بها.

سيحتوي ملف SQL المولَّد على تعليمات تُنشئ طوبولوجيا بالاسم المعطى، وتحمّل فيها بيانات العناصر الأولية، وتستعيد جميع طبقات الطوبولوجيا وتسجّلها عبر ربط جميع قيم TopoGeometry ربطًا سليمًا بالطوبولوجيا الصحيحة الخاصة بها.

افتراضيًا، يقرأ pgtopo_import التفريغ من المدخل القياسي بحيث يمكن استخدامه مع pgtopo_export في خط أنابيب. ويمكنك اختياريًا تحديد اسم ملف المدخلات باستخدام مفتاح سطر الأوامر -f.

افتراضيًا، يُضمّن pgtopo_import في ملف SQL الناتج الشيفرةَ اللازمة لاستعادة جميع الطبقات الموجودة في التفريغ.

وقد يكون ذلك غير مرغوب فيه أو لا يعمل إذا كانت قاعدة البيانات الهدف تحتوي بالفعل جداول بالأسماء نفسها الموجودة في التفريغ. وفي هذه الحالة يمكنك طلب تخطي الطبقات باستخدام المفتاح --skip-layers والتعامل معها بشكل منفصل (أو لاحقًا).

يمكن توليد SQL يقتصر على تحميل الطبقات وربطها بطوبولوجيا مسمّاة باستخدام المفتاح --only-layers. وقد يفيد ذلك في تحميل الطبقات بعد حل تعارضات الأسماء، أو في ربط الطبقات بطوبولوجيا مختلفة (كنسخة مبسّطة مكانيًا من الطوبولوجيا الأصلية).

إذا كانت الطوبولوجيا الهدف موجودة بالفعل وأردت حذفها مسبقًا، يمكنك تمرير المفتاح --drop-topology (منذ PostGIS-3.6.0).