الاسم
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))