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

ST_Overlaps

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

الاسم

ST_Overlaps — تختبر ما إذا كان لشكلين هندسيين البعد نفسه ويتقاطعان، مع امتلاك كل منهما نقطة واحدة على الأقل ليست في الآخر

المختصر

boolean ST_Overlaps(geometry A, geometry B);

الوصف

تُعيد TRUE إذا كان الشكلان الهندسيان A وB «يتداخلان مكانيًا». يتداخل شكلان هندسيان إذا كان لهما البعد نفسه، وتقاطع داخلاهما في ذلك البعد، وكان لكل منهما نقطة واحدة على الأقل داخل الآخر (أو بصورة مكافئة، لا يغطي أيٌّ منهما الآخر). علاقة التداخل متماثلة وغير انعكاسية.

بالصيغة الرياضية: ST_Overlaps(A, B) ⇔ ( dim(A) = dim(B) = dim( Int(A) ⋂ Int(B) )) ∧ (A ⋂ B ≠ A) ∧ (A ⋂ B ≠ B)

[ملاحظة]

تتضمن هذه الدالة تلقائيًا مقارنةً للمستطيل المحيط تستفيد من أي فهارس مكانية متاحة على الأشكال الهندسية. لتجنب استخدام الفهرس، استخدم الدالة _ST_Overlaps.

تُنفَّذ بواسطة وحدة GEOS

[هام]

حُسّنت في: 3.0.0 فُعّل دعم GEOMETRYCOLLECTION

ملاحظة: هذا هو الإصدار «المسموح به» الذي يُعيد قيمة منطقية (boolean)، وليس عددًا صحيحًا.

تطبّق هذه الدالة مواصفة OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.2 // s2.1.13.3

تطبّق هذه الدالة مواصفة SQL/MM. SQL-MM 3: 5.1.32

أمثلة

تُعيد ST_Overlaps القيمة TRUE في الحالات التالية:

MULTIPOINT / MULTIPOINT

LINESTRING / LINESTRING

POLYGON / POLYGON

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

SELECT ST_Overlaps(a,b) AS overlaps,       ST_Crosses(a,b) AS crosses,
       ST_Intersects(a, b) AS intersects,  ST_Contains(b,a) AS b_contains_a
FROM (SELECT ST_GeomFromText('POINT (100 100)') As a,
             ST_GeomFromText('LINESTRING (30 50, 40 160, 160 40, 180 160)')  AS b) AS t

overlaps | crosses | intersects | b_contains_a
---------+----------------------+--------------
f        | f       | t          | t

الخط الذي يغطي مضلعًا جزئيًا يتقاطع معه ويعبره، لكنه لا يتداخل معه لأن بُعده مختلف.

SELECT ST_Overlaps(a,b) AS overlaps,        ST_Crosses(a,b) AS crosses,
       ST_Intersects(a, b) AS intersects,   ST_Contains(a,b) AS contains
FROM (SELECT ST_GeomFromText('POLYGON ((40 170, 90 30, 180 100, 40 170))') AS a,
             ST_GeomFromText('LINESTRING(10 10, 190 190)') AS b) AS t;

 overlap | crosses | intersects | contains
---------+---------+------------+--------------
 f       | t       | t          | f

المضلعان المتقاطعان دون أن يكون أيٌّ منهما محتوى في الآخر يتداخلان، لكنهما لا يتعابران لأن لتقاطعهما البعد نفسه.

SELECT ST_Overlaps(a,b) AS overlaps,       ST_Crosses(a,b) AS crosses,
       ST_Intersects(a, b) AS intersects,  ST_Contains(b, a) AS b_contains_a,
       ST_Dimension(a) AS dim_a, ST_Dimension(b) AS dim_b,
       ST_Dimension(ST_Intersection(a,b)) AS dim_int
FROM (SELECT ST_GeomFromText('POLYGON ((40 170, 90 30, 180 100, 40 170))') AS a,
             ST_GeomFromText('POLYGON ((110 180, 20 60, 130 90, 110 180))') AS b) As t;

 overlaps | crosses | intersects | b_contains_a | dim_a | dim_b | dim_int
----------+---------+------------+--------------+-------+-------+-----------
 t        | f       | t          | f            |     2 |     2 |       2