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

فصل 12. إضافات PostGIS

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

فصل 12. إضافات PostGIS

يوثّق هذا الفصل الميزات الموجودة في مجلد extras ضمن أرشيفات الشيفرة المصدرية لـ PostGIS ومستودع الشيفرة المصدرية. لا تُحزَّم هذه الميزات دائمًا مع الإصدارات الثنائية لـ PostGIS، لكنها عادةً مبنية على PL/pgSQL أو سكربتات shell قياسية يمكن تشغيلها كما هي.

12.1. مُوحِّد العناوين (Address Standardizer)

هذا تفرّع من مُوحِّد PAGC (الشيفرة الأصلية لهذا الجزء كانت مُوحِّد عناوين PAGC لـ PostgreSQL).

مُوحِّد العناوين هو محلّل عناوين أحادي السطر يأخذ عنوانًا مُدخلًا ويوحّده استنادًا إلى مجموعة من القواعد المخزنة في جدول، وإلى جدولَي lex وgaz المساعدين.

تُبنى الشيفرة في مكتبة امتداد PostgreSQL واحدة تُسمى address_standardizer يمكن تثبيتها باستخدام CREATE EXTENSION address_standardizer;. وإضافةً إلى امتداد address_standardizer، يُبنى امتداد بيانات نموذجية يُسمى address_standardizer_data_us يحتوي على جداول gaz وlex والقواعد للبيانات الأمريكية. يمكن تثبيت هذا الامتداد عبر: CREATE EXTENSION address_standardizer_data_us;

توجد شيفرة هذا الامتداد في extensions/address_standardizer ضمن PostGIS، وهي حاليًا مكتفية ذاتيًا.

لتعليمات التثبيت راجع: قسم 2.3, “تثبيت مُوحِّد العناوين واستخدامه”.

12.1.1. كيف يعمل المحلّل

يعمل المحلّل من اليمين إلى اليسار، فينظر أولًا في العناصر الكبرى: الرمز البريدي، والولاية/المقاطعة، والمدينة، ثم ينظر في العناصر الصغرى لتحديد ما إذا كان الأمر يتعلق برقم منزل وشارع أو تقاطع أو معلم. وهو لا يبحث حاليًا عن رمز الدولة أو اسمها، لكن قد يُضاف ذلك مستقبلًا.

رمز الدولة

يُفترض أنه US أو CA استنادًا إلى: الرمز البريدي كرمز أمريكي أو كندي، ثم الولاية/المقاطعة كأمريكية أو كندية، وإلا فـ US

الرمز البريدي (Postcode/zipcode)

يُتعرَّف عليها باستخدام تعابير نمطية متوافقة مع Perl. توجد هذه التعابير النمطية حاليًا في parseaddress-api.c، ومن السهل نسبيًا تعديلها عند الحاجة.

الولاية/المقاطعة

يُتعرَّف عليها باستخدام تعابير نمطية متوافقة مع Perl. توجد هذه التعابير النمطية حاليًا في parseaddress-api.c، لكن قد تُنقل مستقبلًا إلى ملفات تضمين لتسهيل صيانتها.

12.1.2. أنواع مُوحِّد العناوين

خلاصة

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

  • stdaddr — نوع مركّب يتكون من عناصر العنوان. وهو نوع القيمة المُعادة من الدالة standardize_address.

12.1.3. جداول مُوحِّد العناوين

خلاصة

يسرد هذا القسم صيغ جداول PostgreSQL التي يستخدمها address_standardizer لتوحيد العناوين. لاحظ أنه لا يلزم أن تحمل هذه الجداول الأسماء نفسها المذكورة هنا. فيمكن مثلًا أن تكون لديك جداول lex وgaz وقواعد مختلفة لكل دولة أو لمُرمِّز جغرافي مخصص لديك. وتُمرَّر أسماء هذه الجداول إلى دوال مُوحِّد العناوين.

يحتوي الامتداد المحزَّم address_standardizer_data_us على بيانات لتوحيد العناوين الأمريكية.

  • rules table — يحتوي جدول القواعد على مجموعة من القواعد التي تربط رموز تسلسل العنوان المُدخل بتسلسل مُخرَج موحَّد. تُعرَّف القاعدة بأنها مجموعة من رموز الإدخال يليها -1 (فاصل إنهاء)، ثم مجموعة من رموز الإخراج يليها -1، ثم رقم يدل على نوع القاعدة، ثم رتبة القاعدة.
  • lex table — يُستخدم جدول lex لتصنيف المُدخلات الأبجدية الرقمية وربطها بـ (أ) رموز الإدخال (انظر القسم المسمى “رموز الإدخال”) و(ب) صيغ موحَّدة.
  • gaz table — يُستخدم جدول gaz لتوحيد أسماء الأماكن وربط ذلك المُدخل بـ (أ) رموز الإدخال (انظر القسم المسمى “رموز الإدخال”) و(ب) صيغ موحَّدة.

12.1.4. دوال مُوحِّد العناوين

  • debug_standardize_address — تُعيد نصًا بتنسيق json يسرد رموز التحليل وعمليات التوحيد
  • parse_address — تأخذ عنوانًا من سطر واحد وتقسّمه إلى أجزاء
  • standardize_address — تُعيد صيغة stdaddr لعنوان مُدخل باستخدام جداول lex وgaz والقواعد.

12.2. مُرمِّز Tiger الجغرافي (Tiger Geocoder)

خلاصة

مُرمِّز جغرافي مبني على plpgsql ومكتوب للعمل مع تصدير قاعدة بيانات TIGER (نظام الترميز والإسناد الجغرافي المتكامل طوبولوجيًا) / الخطوط والعناوين الرئيسية الصادر عن مكتب الإحصاء الأمريكي.

يتكون المُرمِّز الجغرافي من أربعة مكونات: دوال تحميل البيانات، ومُوحِّد العناوين، والمُرمِّز الجغرافي للعناوين، والمُرمِّز الجغرافي العكسي.

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

يبني السكربت مخططًا يُسمى tiger ليضم جميع الدوال المتعلقة بـ tiger، وبيانات البحث القابلة لإعادة الاستخدام مثل بادئات أنواع الطرق ولواحقها والولايات، وجداول تحكم مختلفة لإدارة تحميل البيانات، وجداول أساسية هيكلية ترث منها جميع جداول tiger المحمَّلة.

يُنشأ أيضًا مخطط آخر يُسمى tiger_data يضم جميع بيانات الإحصاء لكل ولاية يُنزّلها المحمِّل من موقع مكتب الإحصاء ويحمّلها في قاعدة البيانات. وفي النموذج الحالي، تُسبق أسماء كل مجموعة من جداول الولاية برمز الولاية، مثل ma_addr وma_edges وغيرها، مع قيود تفرض احتواءها على بيانات تلك الولاية فقط. وكل من هذه الجداول يرث من الجداول addr وfaces وedges وغيرها الموجودة في tiger schema.

تشير جميع دوال الترميز الجغرافي إلى الجداول الأساسية فقط، لذا لا يُشترط أن يُسمى مخطط البيانات tiger_data، ولا يُمنع تقسيم البيانات أكثر في مخططات أخرى، مثل مخطط مختلف لكل ولاية، ما دامت جميع الجداول ترث من الجداول الموجودة في المخطط tiger.

للاطلاع على تعليمات تفعيل الامتداد في قاعدة بياناتك وتحميل البيانات باستخدامه، راجع قسم 2.4.1, “تفعيل المرمِّز الجغرافي Tiger في قاعدة بيانات PostGIS”.

[ملاحظة]

إذا كنت تستخدم مُرمِّز tiger الجغرافي (tiger_2010)، فيمكنك ترقية السكربتات باستخدام سكربتات upgrade_geocoder.bat / .sh المرفقة في extras/tiger. ومن أبرز التغييرات بين tiger_2010 وtiger_2011+ أن الجدولين county وstate لم يعودا مقسَّمين حسب الولاية. إذا كانت لديك بيانات من tiger_2010 وتريد استبدالها بـ tiger_2015، فراجع قسم 2.4.4, “ترقية تثبيت المرمِّز الجغرافي Tiger وبياناته”

[ملاحظة]

الجديد في إصدار PostGIS 2.2.0 هو دعم بيانات Tiger 2015 وتضمين مُوحِّد العناوين كجزء من PostGIS.

الجديد في إصدار PostGIS 2.1.0 هو إمكانية تثبيت مُرمِّز tiger الجغرافي بنموذج امتدادات PostgreSQL إذا كنت تستخدم PostgreSQL 9.1+. راجع قسم 2.4.1, “تفعيل المرمِّز الجغرافي Tiger في قاعدة بيانات PostGIS” للتفاصيل.

الدالة Pagc_Normalize_Address بديل مباشر للدالة المدمجة Normalize_Address. راجع قسم 2.3, “تثبيت مُوحِّد العناوين واستخدامه” لتعليمات التصريف والتثبيت.

التصميم:

هدف هذا المشروع بناء مُرمِّز جغرافي متكامل الوظائف يمكنه معالجة أي سلسلة عنوان في الولايات المتحدة، وباستخدام بيانات TIGER الإحصائية الموحَّدة، يُنتج شكلًا هندسيًا نقطيًا وتقييمًا يعكسان موقع العنوان المعطى ومدى احتمالية صحة الموقع. وكلما ارتفع رقم التقييم كانت النتيجة أسوأ.

الدالة reverse_geocode، التي قُدّمت في PostGIS 2.0.0، مفيدة لاستنتاج عنوان الشارع والشوارع المتقاطعة لموقع GPS.

ينبغي أن يكون المُرمِّز الجغرافي بسيط التثبيت والاستخدام لأي شخص على دراية بـ PostGIS، وأن يكون سهل التثبيت والاستخدام على جميع المنصات التي يدعمها PostGIS.

ينبغي أن يكون متينًا بما يكفي ليعمل على نحو صحيح رغم أخطاء التنسيق والإملاء.

ينبغي أن يكون قابلًا للتوسعة بما يكفي ليُستخدم مع تحديثات البيانات المستقبلية، أو مع مصادر بيانات بديلة بأقل قدر من تغييرات الشيفرة.

[ملاحظة]

يجب إضافة المخطط tiger إلى مسار البحث في قاعدة البيانات لكي تعمل الدوال على نحو صحيح.

  • Drop_Indexes_Generate_Script — تولّد سكربتًا يحذف جميع الفهارس غير المفتاح الأساسي وغير الفريدة في المخطط tiger والمخطط الذي يحدده المستخدم. يكون المخطط الافتراضي tiger_data إذا لم يُحدَّد مخطط.
  • Drop_Nation_Tables_Generate_Script — تولّد سكربتًا يحذف جميع الجداول في المخطط المحدد التي تبدأ أسماؤها بـ county_all أو state_all أو برمز الولاية متبوعًا بـ county أو state.
  • Drop_State_Tables_Generate_Script — تولّد سكربتًا يحذف جميع الجداول في المخطط المحدد التي تُسبق أسماؤها باختصار الولاية. يكون المخطط الافتراضي tiger_data إذا لم يُحدَّد مخطط.
  • Geocode — تأخذ عنوانًا كسلسلة نصية (أو عنوانًا موحَّدًا آخر) وتُخرج مجموعة من المواقع المحتملة تتضمن شكلًا هندسيًا نقطيًا بخطَّي الطول والعرض وفق NAD 83، وعنوانًا موحَّدًا لكل موقع، والتقييم. كلما انخفض التقييم زادت احتمالية التطابق. تُرتَّب النتائج بدءًا بأدنى تقييم. ويمكن اختياريًا تمرير الحد الأقصى للنتائج، وقيمته الافتراضية 10، وrestrict_region (قيمته الافتراضية NULL)
  • Geocode_Intersection — تأخذ شارعين متقاطعين وولاية ومدينة ورمزًا بريديًا، وتُخرج مجموعة من المواقع المحتملة على الشارع المتقاطع الأول عند التقاطع، وتتضمن أيضًا geomout كموقع النقطة بخطَّي الطول والعرض وفق NAD 83، وnormalized_address (addy) لكل موقع، والتقييم. كلما انخفض التقييم زادت احتمالية التطابق. تُرتَّب النتائج بدءًا بأدنى تقييم. ويمكن اختياريًا تمرير الحد الأقصى للنتائج، وقيمته الافتراضية 10. تستخدم بيانات Tiger (edges وfaces وaddr) ومطابقة السلاسل النصية التقريبية في PostgreSQL (soundex وlevenshtein).
  • Get_Geocode_Setting — تُعيد قيمة إعداد محدد مخزَّن في الجدول tiger.geocode_settings.
  • Get_Tract — تُعيد المنطقة الإحصائية (census tract) أو حقلًا من الجدول tract للمكان الذي يقع فيه الشكل الهندسي. تُعيد افتراضيًا الاسم المختصر للمنطقة الإحصائية.
  • Install_Missing_Indexes — تعثر على جميع الجداول ذات الأعمدة الرئيسية المستخدمة في عمليات الربط وشروط الترشيح في المُرمِّز الجغرافي والتي تفتقر إلى فهارس على تلك الأعمدة، وتضيفها.
  • Loader_Generate_Census_Script — تولّد سكربت shell للمنصة المحددة وللولايات المحددة ينزّل جداول بيانات Tiger الإحصائية tract وbg وtabblocks للولاية، ويجهّزها ويحمّلها في المخطط tiger_data. يُعاد سكربت كل ولاية كسجل منفصل.
  • Loader_Generate_Script — تولّد سكربت shell للمنصة المحددة وللولايات المحددة ينزّل بيانات Tiger ويجهّزها ويحمّلها في المخطط tiger_data. يُعاد سكربت كل ولاية كسجل منفصل. يدعم أحدث إصدار التغييرات البنيوية في Tiger 2010، ويحمّل أيضًا جداول المناطق الإحصائية ومجموعات الكتل والكتل.
  • Loader_Generate_Nation_Script — تولّد سكربت shell للمنصة المحددة يحمّل جداول البحث الخاصة بالمقاطعات والولايات.
  • Missing_Indexes_Generate_Script — تعثر على جميع الجداول ذات الأعمدة الرئيسية المستخدمة في عمليات الربط في المُرمِّز الجغرافي والتي تفتقر إلى فهارس على تلك الأعمدة، وتُخرج تعليمات SQL DDL لتعريف الفهارس لتلك الجداول.
  • Normalize_Address — تُعيد، بإعطائها عنوان شارع نصيًا، نوعًا مركبًا norm_addy تكون فيه لاحقة الطريق وبادئته ونوعه موحّدة، ويُقسَّم فيه الشارع واسم الشارع وغيرها إلى حقول منفصلة. تعمل هذه الدالة باستخدام بيانات البحث المرفقة مع tiger_geocoder فقط (دون الحاجة إلى بيانات تعداد tiger).
  • Pagc_Normalize_Address — تُعيد، بإعطائها عنوان شارع نصيًا، نوعًا مركبًا norm_addy تكون فيه لاحقة الطريق وبادئته ونوعه موحّدة، ويُقسَّم فيه الشارع واسم الشارع وغيرها إلى حقول منفصلة. تعمل هذه الدالة باستخدام بيانات البحث المرفقة مع tiger_geocoder فقط (دون الحاجة إلى بيانات تعداد tiger). تتطلب الامتداد address_standardizer.
  • Pprint_Addy — تُعيد، بإعطائها كائنًا من النوع المركب norm_addy، تمثيلًا منسّقًا للطباعة له. تُستخدم عادةً بالاقتران مع normalize_address.
  • Reverse_Geocode — تأخذ نقطة geometry في نظام مرجعي مكاني معروف وتُعيد سجلًا يحتوي على مصفوفة من العناوين الممكنة نظريًا ومصفوفة من الشوارع المتقاطعة. إذا كانت include_strnum_range = true فإنها تُدرج نطاق أرقام الشارع في الشوارع المتقاطعة.
  • Topology_Load_Tiger — تحمّل منطقة محددة من بيانات tiger إلى طوبولوجيا PostGIS، مع تحويل بيانات tiger إلى النظام المرجعي المكاني للطوبولوجيا والتقاطها وفق تسامح الدقة الخاصة بالطوبولوجيا.
  • Set_Geocode_Setting — تضبط إعدادًا يؤثر في سلوك دوال المُرمِّز الجغرافي.

هناك بضعة مُرمِّزات جغرافية أخرى مفتوحة المصدر لـ PostGIS، تتميز، على عكس مُرمِّز tiger الجغرافي، بدعم الترميز الجغرافي لدول متعددة

  • يستخدم Nominatim بيانات OpenStreetMap المنسّقة كمعجم جغرافي (gazeteer). ويتطلب osm2pgsql لتحميل البيانات، وPostgreSQL 8.4+ وPostGIS 1.5+ ليعمل. وهو محزَّم كواجهة خدمة ويب ويبدو أنه مصمم ليُستدعى كخدمة ويب. ومثل مُرمِّز tiger الجغرافي، يتضمن مكوّنًا للترميز الجغرافي وآخر للترميز الجغرافي العكسي. ولا يتضح من توثيقه ما إذا كانت لديه واجهة SQL خالصة مثل مُرمِّز tiger الجغرافي، أم أن جزءًا كبيرًا من المنطق مُنفَّذ في واجهة الويب.

  • يستخدم GIS Graphy أيضًا PostGIS، ويعمل مثل Nominatim مع بيانات OpenStreetMap (OSM). ويأتي مع محمِّل لتحميل بيانات OSM، وهو قادر مثل Nominatim على الترميز الجغرافي لغير الولايات المتحدة أيضًا. وعلى غرار Nominatim، يعمل كخدمة ويب ويعتمد على Java 1.5 وتطبيقات Servlet وSolr. وGisGraphy متعدد المنصات ولديه أيضًا مُرمِّز جغرافي عكسي ضمن ميزات أخرى جيدة.