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

ST_CoverageClean

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

الاسم

ST_CoverageClean — تحسب تغطية مضلعية نظيفة (متطابقة الحواف، غير متداخلة، خالية من الفجوات) انطلاقًا من مُدخل غير نظيف.

المختصر

geometry ST_CoverageClean(geometry winset geom, float8 gapMaximumWidth = 0, float8 snappingDistance = -1, text overlapMergeStrategy = 'MERGE_LONGEST_BORDER');

الوصف

دالة نافذة تعدّل حواف تغطية مضلعية لضمان عدم تداخل أي من المضلعات، وإزالة الفجوات الصغيرة بالالتقاط، وتطابق جميع الحواف المشتركة تطابقًا تامًا. والنتيجة تغطية نظيفة تجتاز اختبارات التحقق مثل ST_CoverageInvalidEdges

يتحكم gapMaximumWidth في تنظيف الفجوات بين المضلعات. تُغلق الفجوات الأصغر من هذا التسامح.

يتحكم snappingDistance في خطوة التقاط العقد، حين تُلتقط الرؤوس المتقاربة معًا. يطبّق الإعداد الافتراضي (-1) مسافة التقاط تلقائية مبنية على تحليل المُدخل. اضبطه على 0.0 لإيقاف كل عمليات الالتقاط.

يتحكم overlapMergeStrategy في الخوارزمية المستخدمة لتحديد المضلع المجاور الذي تُدمج فيه مناطق التداخل.

MERGE_LONGEST_BORDER تختار المضلع ذا الحد المشترك الأطول

MERGE_MAX_AREA تختار المضلع ذا المساحة القصوى

MERGE_MIN_AREA تختار المضلع ذا المساحة الدنيا

MERGE_MIN_INDEX تختار المضلع ذا أصغر فهرس إدخال

متاحة منذ: 3.6.0 - تتطلب GEOS >= 3.14.0

أمثلة

-- Populate demo table
CREATE TABLE example AS SELECT * FROM (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)
) AS v(id, geom);

-- Prove it is a dirty coverage
SELECT ST_AsText(ST_CoverageInvalidEdges(geom) OVER ())
  FROM example;

-- Clean the coverage
CREATE TABLE example_clean AS
  SELECT id, ST_CoverageClean(geom) OVER () AS GEOM
  FROM example;

-- Prove it is a clean coverage
SELECT ST_AsText(ST_CoverageInvalidEdges(geom) OVER ())
  FROM example_clean;