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

ST_Union

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

الاسم

ST_Union — تحسب شكلاً هندسياً يمثّل اتحاد مجموعات نقاط الأشكال المُدخلة.

المختصر

geometry ST_Union(geometry g1, geometry g2);

geometry ST_Union(geometry g1, geometry g2, float8 gridSize);

geometry ST_Union(geometry[] g1_array);

geometry ST_Union(geometry set g1field);

geometry ST_Union(geometry set g1field, float8 gridSize);

الوصف

تحسب اتحاد الأشكال المُدخلة، فتدمجها لإنتاج شكل ناتج بلا تداخلات. قد يكون الناتج شكلاً ذرّياً أو MultiGeometry أو Geometry Collection. وتأتي بعدة نسخ:

نسخة المُدخلين: تُعيد شكلاً هندسياً هو اتحاد شكلين مُدخلين. إذا كان أي من المُدخلين NULL فتُعاد NULL.

نسخة المصفوفة: تُعيد شكلاً هندسياً هو اتحاد مصفوفة من الأشكال.

النسخة التجميعية: تُعيد شكلاً هندسياً هو اتحاد مجموعة صفوف من الأشكال. الدالة ST_Union() دالة "تجميعية" بمصطلحات PostgreSQL. أي أنها تعمل على صفوف البيانات بالطريقة نفسها التي تعمل بها الدالتان SUM() وAVG()، ومثل معظم الدوال التجميعية فإنها تتجاهل الأشكال ذات القيمة NULL.

انظر ST_UnaryUnion للنسخة غير التجميعية أحادية المُدخل.

تستخدم نسختا المصفوفة والمجموعة من ST_Union خوارزمية الاتحاد المتتالي (Cascaded Union) السريعة الموضّحة في http://blog.cleverelephant.ca/2009/01/must-faster-unions-in-postgis-14.html

إذا أُعطي المعامل الاختياري gridSize (يتطلب GEOS-3.9.0 أو أحدث)، فمن المضمون أن تقع جميع رؤوس النتيجة على شبكة بالحجم المحدد. ولكي تعطي العملية نتائج متوقعة يجب أن تقع جميع رؤوس المدخلات مسبقًا على الشبكة المحددة، انظر ST_ReducePrecision.

[ملاحظة]

ST_Collect يمكن أحياناً استخدامها بدلاً من ST_Union إذا لم يكن مطلوباً أن تكون النتيجة خالية من التداخل. وST_Collect عادةً أسرع من ST_Union لأنها لا تُجري أي معالجة على الأشكال المجمّعة.

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

تُنشئ ST_Union خطاً متعدداً MultiLineString ولا تخيط خطوط LineString في خط واحد. استخدم ST_LineMerge لخياطة الخطوط.

ملاحظة: كانت هذه الدالة تُسمّى سابقاً GeomUnion()، وقد أُعيدت تسميتها من "Union" لأن UNION كلمة محجوزة في SQL.

حُسّنت في: 3.1.0 قبول المعامل gridSize.

تتطلب GEOS >= 3.9.0 لاستخدام المعامل gridSize

تغيّرت في: 3.0.0 لم تعد تعتمد على SFCGAL.

متاحة منذ: 1.4.0 - حُسّنت ST_Union. أُضيفت ST_Union(geomarray) وكذلك تجميع أسرع في PostgreSQL.

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

[ملاحظة]

النسخة التجميعية غير معرّفة صراحةً في مواصفة OGC.

تطبّق هذه الدالة مواصفة SQL/MM. SQL-MM 3: 5.1.19 قيمة Z (الارتفاع) عند وجود مضلعات.

تدعم هذه الدالة الأبعاد الثلاثية ولا تُسقط قيمة Z. غير أن النتيجة تُحسب باستخدام XY فقط. وتُنسخ قيم Z في النتيجة أو يُحسب متوسطها أو تُستوفى.

أمثلة

مثال تجميعي

SELECT id,
       ST_Union(geom) as singlegeom
FROM sometable f
GROUP BY id;
              

مثال غير تجميعي

select ST_AsText(ST_Union('POINT(1 2)' :: geometry, 'POINT(-2 3)' :: geometry))

st_astext
----------
MULTIPOINT(-2 3,1 2)

select ST_AsText(ST_Union('POINT(1 2)' :: geometry, 'POINT(1 2)' :: geometry))

st_astext
----------
POINT(1 2)

مثال ثلاثي الأبعاد - تدعم الأبعاد الثلاثية نوعاً ما (ومع أبعاد مختلطة!)

select ST_AsEWKT(ST_Union(geom))
from (
         select 'POLYGON((-7 4.2,-7.1 4.2,-7.1 4.3, -7 4.2))'::geometry geom
         union all
         select 'POINT(5 5 5)'::geometry geom
         union all
         select 'POINT(-2 3 1)'::geometry geom
         union all
         select 'LINESTRING(5 5 5, 10 10 10)'::geometry geom
     ) as foo;

st_asewkt
---------
GEOMETRYCOLLECTION(POINT(-2 3 1),LINESTRING(5 5 5,10 10 10),POLYGON((-7 4.2 5,-7.1 4.2 5,-7.1 4.3 5,-7 4.2 5)));

مثال ثلاثي الأبعاد دون خلط الأبعاد

select ST_AsEWKT(ST_Union(geom))
from (
         select 'POLYGON((-7 4.2 2,-7.1 4.2 3,-7.1 4.3 2, -7 4.2 2))'::geometry geom
         union all
         select 'POINT(5 5 5)'::geometry geom
         union all
         select 'POINT(-2 3 1)'::geometry geom
         union all
         select 'LINESTRING(5 5 5, 10 10 10)'::geometry geom
     ) as foo;

st_asewkt
---------
GEOMETRYCOLLECTION(POINT(-2 3 1),LINESTRING(5 5 5,10 10 10),POLYGON((-7 4.2 2,-7.1 4.2 3,-7.1 4.3 2,-7 4.2 2)))

--Examples using new Array construct
SELECT ST_Union(ARRAY(SELECT geom FROM sometable));

SELECT ST_AsText(ST_Union(ARRAY[ST_GeomFromText('LINESTRING(1 2, 3 4)'),
            ST_GeomFromText('LINESTRING(3 4, 4 5)')])) As wktunion;

--wktunion---
MULTILINESTRING((3 4,4 5),(1 2,3 4))