الاسم
ST_ContainsProperly — تختبر ما إذا كانت كل نقطة من B تقع في داخل A
المختصر
boolean ST_ContainsProperly(geometry geomA, geometry geomB);
الوصف
تُعيد true إذا وقعت كل نقطة من B في داخل A (أو بصورة مكافئة، لم تقع أي نقطة من B على حدود A أو خارجه).
بالصيغة الرياضية: ST_ContainsProperly(A, B) ⇔ Int(A) ⋂ B = B
يحتوي A الشكلَ B احتواءً تامًا إذا طابقت مصفوفة التقاطع DE-9IM للشكلين الهندسيين النمط [T**FF*FF*]
لا يحتوي A نفسه احتواءً تامًا، لكنه يحتوي نفسه.
من استخدامات هذا المسند حساب تقاطعات مجموعة من الأشكال الهندسية مع شكل مضلعي كبير. ولأن التقاطع عملية بطيئة نسبيًا، فقد يكون من الأكفأ استخدام containsProperly لتصفية الأشكال المختبَرة التي تقع كليًا داخل المنطقة. في هذه الحالات يُعرف مسبقًا أن التقاطع هو الشكل الهندسي المختبَر الأصلي تمامًا.
|
|
|
تتضمن هذه الدالة تلقائيًا مقارنةً للمستطيل المحيط تستفيد من أي فهارس مكانية متاحة على الأشكال الهندسية. لتجنب استخدام الفهرس، استخدم الدالة |
|
|
|
ميزة هذا المسند مقارنةً بـ ST_Contains وST_Intersects أنه يمكن حسابه بكفاءة أكبر، دون الحاجة إلى حساب الطوبولوجيا عند النقاط المفردة. |
تُنفَّذ بواسطة وحدة GEOS.
متاحة منذ: 1.4.0
|
|
|
حُسّنت في: 3.0.0 فُعّل دعم |
|
|
|
لا تستخدم هذه الدالة مع أشكال هندسية غير صالحة. ستحصل على نتائج غير متوقعة. |
أمثلة
--a circle within a circle
SELECT ST_ContainsProperly(smallc, bigc) As smallcontainspropbig,
ST_ContainsProperly(bigc,smallc) As bigcontainspropsmall,
ST_ContainsProperly(bigc, ST_Union(smallc, bigc)) as bigcontainspropunion,
ST_Equals(bigc, ST_Union(smallc, bigc)) as bigisunion,
ST_Covers(bigc, ST_ExteriorRing(bigc)) As bigcoversexterior,
ST_ContainsProperly(bigc, ST_ExteriorRing(bigc)) As bigcontainsexterior
FROM (SELECT ST_Buffer(ST_GeomFromText('POINT(1 2)'), 10) As smallc,
ST_Buffer(ST_GeomFromText('POINT(1 2)'), 20) As bigc) As foo;
--Result
smallcontainspropbig | bigcontainspropsmall | bigcontainspropunion | bigisunion | bigcoversexterior | bigcontainsexterior
------------------+------------------+------------------+------------+-------------------+---------------------
f | t | f | t | t | f
--example demonstrating difference between contains and contains properly
SELECT ST_GeometryType(geomA) As geomtype, ST_Contains(geomA,geomA) AS acontainsa, ST_ContainsProperly(geomA, geomA) AS acontainspropa,
ST_Contains(geomA, ST_Boundary(geomA)) As acontainsba, ST_ContainsProperly(geomA, ST_Boundary(geomA)) As acontainspropba
FROM (VALUES ( ST_Buffer(ST_Point(1,1), 5,1) ),
( ST_MakeLine(ST_Point(1,1), ST_Point(-1,-1) ) ),
( ST_Point(1,1) )
) As foo(geomA);
geomtype | acontainsa | acontainspropa | acontainsba | acontainspropba
--------------+------------+----------------+-------------+-----------------
ST_Polygon | t | f | f | f
ST_LineString | t | f | f | f
ST_Point | t | t | f | f
انظر أيضًا
ST_GeometryType, ST_Boundary, ST_Contains, ST_Covers, ST_CoveredBy, ST_Equals, ST_Relate, ST_Within