الاسم
ST_Within — تختبر ما إذا كانت كل نقطة من A تقع في B، وكان لداخليهما نقطة مشتركة
المختصر
boolean ST_Within(geometry A, geometry B);
الوصف
تُعيد TRUE إذا كان الشكل الهندسي A يقع داخل الشكل الهندسي B. يقع A داخل B إذا وفقط إذا كانت جميع نقاط A تقع داخل B (أي في داخله أو على حدّه) (أو بشكل مكافئ: لا تقع أي نقطة من A في خارج B)، وكان لداخلي A وB نقطة مشتركة واحدة على الأقل.
لكي يكون لهذه الدالة معنى، يجب أن يكون الشكلان الهندسيان المصدريان في نفس إسقاط الإحداثيات، أي لهما نفس SRID.
بالصيغة الرياضية: ST_Within(A, B) ⇔ (A ⋂ B = A) ∧ (Int(A) ⋂ Int(B) ≠ ∅)
علاقة الوقوع داخل علاقة انعكاسية: كل شكل هندسي يقع داخل نفسه. والعلاقة غير متماثلة (antisymmetric): إذا كان ST_Within(A,B) = true وST_Within(B,A) = true فيجب أن يكون الشكلان متساويين طوبولوجيًا (ST_Equals(A,B) = true).
ST_Within هي العلاقة العكسية لـ ST_Contains. لذا فإن ST_Within(A,B) = ST_Contains(B,A).
|
|
|
لأن الداخلين يجب أن يشتركا في نقطة، فمن دقائق هذا التعريف أن الخطوط والنقاط الواقعة كليًا على حدّ المضلعات أو الخطوط لا تُعدّ واقعة داخل الشكل الهندسي. لمزيد من التفاصيل انظر دقائق علاقات OGC: Covers وContains وWithin. يوفّر المسند ST_CoveredBy علاقة أكثر شمولًا. |
|
|
|
تتضمن هذه الدالة تلقائيًا مقارنةً للمستطيل المحيط تستفيد من أي فهارس مكانية متاحة على الأشكال الهندسية. لتجنّب استخدام الفهرس، استخدم الدالة |
تُنفَّذ بواسطة وحدة GEOS
حُسّنت في: 2.3.0 وُسّع تحسين الاختصار في اختبار نقطة داخل مضلع (PIP) لنوع geometry ليدعم MultiPoints ذات النقاط القليلة. كانت الإصدارات السابقة تدعم فقط نقطة داخل مضلع.
|
|
|
حُسّنت في: 3.0.0 فُعّل دعم |
|
|
|
لا تستخدم هذه الدالة مع أشكال هندسية غير صالحة. ستحصل على نتائج غير متوقعة. |
ملاحظة: هذا هو الإصدار «المسموح به» الذي يُعيد قيمة منطقية (boolean)، وليس عددًا صحيحًا.
تطبّق هذه الدالة مواصفة OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.2 // s2.1.13.3 - a.Relate(b, 'T*F**F***')
تطبّق هذه الدالة مواصفة SQL/MM. SQL-MM 3: 5.1.30
أمثلة
--a circle within a circle
SELECT ST_Within(smallc,smallc) As smallinsmall,
ST_Within(smallc, bigc) As smallinbig,
ST_Within(bigc,smallc) As biginsmall,
ST_Within(ST_Union(smallc, bigc), bigc) as unioninbig,
ST_Within(bigc, ST_Union(smallc, bigc)) as biginunion,
ST_Equals(bigc, ST_Union(smallc, bigc)) as bigisunion
FROM
(
SELECT ST_Buffer(ST_GeomFromText('POINT(50 50)'), 20) As smallc,
ST_Buffer(ST_GeomFromText('POINT(50 50)'), 40) As bigc) As foo;
--Result
smallinsmall | smallinbig | biginsmall | unioninbig | biginunion | bigisunion
--------------+------------+------------+------------+------------+------------
t | t | f | t | t | t
(1 row)