الاسم
ST_IsValidDetail — تُعيد صفًا من نوع valid_detail يبيّن ما إذا كان الشكل الهندسي صالحًا، وإن لم يكن فالسبب والموقع.
المختصر
valid_detail ST_IsValidDetail(geometry geom, integer flags);
الوصف
تُعيد صفًا من نوع valid_detail يحتوي على قيمة منطقية (valid) تبيّن ما إذا كان الشكل الهندسي صالحًا، وقيمة varchar (reason) تبيّن سبب عدم صلاحيته، وشكل هندسي (location) يشير إلى موضع عدم الصلاحية.
مفيدة لتحسين الجمع بين ST_IsValid وST_IsValidReason لإنشاء تقرير مفصّل عن الأشكال الهندسية غير الصالحة.
المعامل الاختياري flags حقل بتات (bitfield). ويمكن أن يأخذ القيم التالية:
-
0: استخدام دلالات الصلاحية المعتادة في OGC SFS.
-
1: اعتبار أنواع معيّنة من الحلقات المتلامسة ذاتيًا (الأغلفة المقلوبة والثقوب المنقلبة للخارج) صالحة. ويُعرف هذا أيضًا بـ"علَم ESRI"، لأنه نموذج الصلاحية الذي تستخدمه تلك الأدوات. لاحظ أن هذا غير صالح وفق نموذج OGC.
تُنفَّذ بواسطة وحدة GEOS.
متاحة منذ: 2.0.0
أمثلة
--First 3 Rejects from a successful quintuplet experiment
SELECT gid, reason(ST_IsValidDetail(geom)), ST_AsText(location(ST_IsValidDetail(geom))) as location
FROM
(SELECT ST_MakePolygon(ST_ExteriorRing(e.buff), array_agg(f.line)) As geom, gid
FROM (SELECT ST_Buffer(ST_Point(x1*10,y1), z1) As buff, x1*10 + y1*100 + z1*1000 As gid
FROM generate_series(-4,6) x1
CROSS JOIN generate_series(2,5) y1
CROSS JOIN generate_series(1,8) z1
WHERE x1
> y1*0.5 AND z1 < x1*y1) As e
INNER JOIN (SELECT ST_Translate(ST_ExteriorRing(ST_Buffer(ST_Point(x1*10,y1), z1)),y1*1, z1*2) As line
FROM generate_series(-3,6) x1
CROSS JOIN generate_series(2,5) y1
CROSS JOIN generate_series(1,10) z1
WHERE x1
> y1*0.75 AND z1 < x1*y1) As f
ON (ST_Area(e.buff)
> 78 AND ST_Contains(e.buff, f.line))
GROUP BY gid, e.buff) As quintuplet_experiment
WHERE ST_IsValid(geom) = false
ORDER BY gid
LIMIT 3;
gid | reason | location
------+-------------------+-------------
5330 | Self-intersection | POINT(32 5)
5340 | Self-intersection | POINT(42 5)
5350 | Self-intersection | POINT(52 5)
--simple example
SELECT * FROM ST_IsValidDetail('LINESTRING(220227 150406,2220227 150407,222020 150410)');
valid | reason | location
-------+--------+----------
t | |