الاسم
ST_CollectionExtract — تُعيد، من مجموعة أشكال مُعطاة، شكلًا هندسيًا متعددًا يحتوي فقط على عناصر من نوع محدد.
المختصر
geometry ST_CollectionExtract(geometry collection);
geometry ST_CollectionExtract(geometry collection, integer type);
الوصف
تُعيد، من مجموعة أشكال مُعطاة، شكلًا هندسيًا متعددًا متجانسًا.
إذا لم يُحدَّد type، فتُعيد شكلًا متعددًا يحتوي فقط على الأشكال ذات البعد الأعلى. فتُفضَّل المضلعات على الخطوط، والخطوط على النقاط.
إذا حُدِّد type، فتُعيد شكلًا متعددًا يحتوي فقط على ذلك النوع. وإذا لم توجد أشكال فرعية من النوع المطلوب، يُعاد شكل هندسي فارغ EMPTY. لا تُدعم إلا النقاط والخطوط والمضلعات. أرقام الأنواع هي:
-
1 == POINT
-
2 == LINESTRING
-
3 == POLYGON
بالنسبة للأشكال الذرية المُدخلة، يُعاد الشكل دون تغيير إذا طابق نوع المُدخل النوع المطلوب. وإلا فالنتيجة شكل هندسي فارغ EMPTY من النوع المحدد. ويمكن عند الحاجة تحويلها إلى أشكال متعددة باستخدام ST_Multi.
|
|
|
لا يُتحقق من صلاحية نتائج MultiPolygon. فإذا كانت مكوّنات المضلع متجاورة أو متداخلة ستكون النتيجة غير صالحة. (قد يحدث هذا مثلًا عند تطبيق هذه الدالة على نتيجة ST_Split.) يمكن التحقق من هذه الحالة باستخدام ST_IsValid وإصلاحها باستخدام ST_MakeValid. |
متاحة منذ: 1.5.0
|
|
|
قبل الإصدار 1.5.3 كانت هذه الدالة تُعيد المُدخلات الذرية دون تغيير بغض النظر عن نوعها. وفي 1.5.3 كانت الأشكال المفردة غير المطابقة تُعيد نتيجة NULL. ومنذ 2.0.0 تُعيد الأشكال المفردة غير المطابقة نتيجة فارغة EMPTY من النوع المطلوب. |
أمثلة
استخراج النوع ذي البعد الأعلى:
SELECT ST_AsText(ST_CollectionExtract(
'GEOMETRYCOLLECTION( POINT(0 0), LINESTRING(1 1, 2 2) )'));
st_astext
---------------
MULTILINESTRING((1 1, 2 2))
استخراج النقاط (النوع 1 == POINT):
SELECT ST_AsText(ST_CollectionExtract(
'GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(0 0)))',
1 ));
st_astext
---------------
MULTIPOINT((0 0))
استخراج الخطوط (النوع 2 == LINESTRING):
SELECT ST_AsText(ST_CollectionExtract(
'GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(LINESTRING(0 0, 1 1)),LINESTRING(2 2, 3 3))',
2 ));
st_astext
---------------
MULTILINESTRING((0 0, 1 1), (2 2, 3 3))