GISarabia.org
PostGIS › الدليل الرسمي › 7. مرجع PostGIS › 7.15. التغطيات
PostGIS 3.6 · Official Manual · ترجمة عربية

ST_CoverageInvalidEdges

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

الاسم

ST_CoverageInvalidEdges — دالة نافذة تحدد المواضع التي تخفق فيها المضلعات في تشكيل تغطية صالحة.

المختصر

geometry ST_CoverageInvalidEdges(geometry winset geom, float8 tolerance = 0);

الوصف

دالة نافذة تتحقق مما إذا كانت المضلعات في قسم النافذة تشكّل تغطية مضلعية صالحة. وتُعيد مؤشرات خطية تبيّن موضع الحواف غير الصالحة (إن وُجدت) في كل مضلع.

تكون مجموعة المضلعات الصالحة تغطية صالحة إذا تحققت الشروط الآتية:

  • عدم التداخل - لا تتداخل المضلعات (لا تتقاطع دواخلها)

  • تطابق الحواف - الرؤوس على طول الحواف المشتركة متطابقة

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

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

يجب أيضًا أن تكون المضلعات التي يُتحقق من صلاحية تغطيتها أشكالًا هندسية صالحة. ويمكن التحقق من ذلك باستخدام ST_IsValid.

متاحة منذ: 3.4.0

تتطلب GEOS >= 3.12.0

أمثلة

حواف غير صالحة ناتجة عن التداخل وعدم تطابق الرؤوس

WITH coverage(id, geom) AS (VALUES
  (1, 'POLYGON ((10 190, 30 160, 40 110, 100 70, 120 10, 10 10, 10 190))'::geometry),
  (2, 'POLYGON ((100 190, 10 190, 30 160, 40 110, 50 80, 74 110.5, 100 130, 140 120, 140 160, 100 190))'::geometry),
  (3, 'POLYGON ((140 190, 190 190, 190 80, 140 80, 140 190))'::geometry),
  (4, 'POLYGON ((180 40, 120 10, 100 70, 140 80, 190 80, 180 40))'::geometry)
)
SELECT id, ST_AsText(ST_CoverageInvalidEdges(geom) OVER ())
  FROM coverage;

 id |               st_astext
----+---------------------------------------
  1 | LINESTRING (40 110, 100 70)
  2 | MULTILINESTRING ((100 130, 140 120, 140 160, 100 190), (40 110, 50 80, 74 110.5))
  3 | LINESTRING (140 80, 140 190)
  4 | null
      
-- Test entire table for coverage validity
SELECT true = ALL (
    SELECT ST_CoverageInvalidEdges(geom) OVER () IS NULL
    FROM coverage
    );