الاسم
ST_Split — تُعيد مجموعة من الأشكال الهندسية الناتجة عن تقسيم شكل هندسي بشكل آخر.
المختصر
geometry ST_Split(geometry input, geometry blade);
الوصف
تدعم الدالة تقسيم LineString بنقطة (Multi)Point أو بخط (Multi)LineString أو بحدود مضلع (Multi)Polygon، أو تقسيم (Multi)Polygon بخط LineString. عند استخدام (Multi)Polygon أداةً للقطع، تُستخدم مكوّناته الخطية (الحدود) لتقسيم المُدخل. والشكل الناتج دائماً مجموعة أشكال.
هذه الدالة عكس ST_Union بمعنى ما. فتطبيق ST_Union على المجموعة المُعادة يُفترض نظرياً أن يُنتج الشكل الأصلي (وإن كان ذلك قد لا يتحقق تماماً بسبب التقريب العددي).
|
|
|
إذا لم يتقاطع المُدخل وأداة القطع بسبب مشكلات الدقة العددية، فقد لا يُقسَّم المُدخل كما هو متوقع. ولتجنب ذلك قد يلزم التقاط المُدخل إلى أداة القطع أولاً باستخدام ST_Snap بتسامح صغير. |
متاحة منذ: 2.0.0 تتطلب GEOS
حُسّنت في: 2.2.0 أُضيف دعم تقسيم خط بخط متعدد أو بنقاط متعددة أو بحدود مضلع (متعدد).
حُسّنت في: 2.5.0 أُضيف دعم تقسيم مضلع بخط متعدد.
أمثلة
تقسيم مضلع بخط.
|
![]() قبل التقسيم
|
![]() بعد التقسيم
|
SELECT ST_AsText( ST_Split(
ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50), -- circle
ST_MakeLine(ST_Point(10, 10),ST_Point(190, 190)) -- line
));
-- result --
GEOMETRYCOLLECTION(
POLYGON((150 90,149.039264020162 80.2454838991936,146.193976625564 70.8658283817455,..),
POLYGON(..))
)
تقسيم MultiLineString بنقطة، حيث تقع النقطة تماماً على كلا عنصري LineString.
|
![]() قبل التقسيم
|
![]() بعد التقسيم
|
SELECT ST_AsText(ST_Split(
'MULTILINESTRING((10 10, 190 190), (15 15, 30 30, 100 90))',
ST_Point(30,30))) As split;
split
------
GEOMETRYCOLLECTION(
LINESTRING(10 10,30 30),
LINESTRING(30 30,190 190),
LINESTRING(15 15,30 30),
LINESTRING(30 30,100 90)
)
تقسيم LineString بنقطة لا تقع تماماً على الخط. يوضّح استخدام ST_Snap لالتقاط الخط إلى النقطة لإتاحة تقسيمه.
WITH data AS (SELECT
'LINESTRING(0 0, 100 100)'::geometry AS line,
'POINT(51 50)':: geometry AS point
)
SELECT ST_AsText( ST_Split( ST_Snap(line, point, 1), point)) AS snapped_split,
ST_AsText( ST_Split(line, point)) AS not_snapped_not_split
FROM data;
snapped_split | not_snapped_not_split
---------------------------------------------------------------------+---------------------------------------------
GEOMETRYCOLLECTION(LINESTRING(0 0,51 50),LINESTRING(51 50,100 100)) | GEOMETRYCOLLECTION(LINESTRING(0 0,100 100))



