GISarabia.org
PostGIS › الدليل الرسمي › 7. مرجع PostGIS › 7.4. دوال الوصول إلى الأشكال الهندسية
PostGIS 3.6 · Official Manual · ترجمة عربية

ST_Dump

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

الاسم

ST_Dump — تُعيد مجموعة من صفوف geometry_dump لمكونات الشكل الهندسي.

المختصر

geometry_dump[] ST_Dump(geometry g1);

الوصف

دالة مُعيدة لمجموعة (SRF) تستخرج مكونات الشكل الهندسي. تُعيد مجموعة من صفوف geometry_dump، يحتوي كل منها على شكل هندسي (الحقل geom) ومصفوفة أعداد صحيحة (الحقل path).

بالنسبة إلى نوع شكل هندسي ذري (POINT,LINESTRING,POLYGON) يُعاد سجل واحد بمصفوفة path فارغة والشكل الهندسي المُدخل بوصفه geom. أما بالنسبة إلى مجموعة الأشكال أو الشكل المتعدد فيُعاد سجل لكل مكوّن من مكونات المجموعة، ويدل path على موضع المكوّن داخل المجموعة.

تفيد ST_Dump في تفكيك الأشكال الهندسية. وهي عكس ST_Collect / GROUP BY، إذ إنها تُنشئ صفوفًا جديدة. على سبيل المثال، يمكن استخدامها لتفكيك MULTIPOLYGONS إلى POLYGONS.

حُسّنت في: 2.0.0 أُضيف دعم الأسطح متعددة الوجوه والمثلثات وTIN.

متاحة منذ: PostGIS 1.0.0RC1. تتطلب PostgreSQL 7.3 أو أحدث.

[ملاحظة]

قبل الإصدار 1.3.4، كانت هذه الدالة تتعطل إذا استُخدمت مع أشكال هندسية تحتوي على منحنيات (CURVES). وقد أُصلح ذلك في 1.3.4 وما بعده

تدعم هذه الدالة الأقواس الدائرية (Circular Strings) والمنحنيات.

تدعم هذه الدالة الأسطح متعددة الوجوه (Polyhedral surfaces).

تدعم هذه الدالة المثلثات وأسطح الشبكات المثلثية غير المنتظمة (TIN).

تدعم هذه الدالة الأبعاد الثلاثية ولا تُسقط قيمة Z.

أمثلة قياسية

SELECT sometable.field1, sometable.field1,
      (ST_Dump(sometable.geom)).geom AS geom
FROM sometable;

-- Break a compound curve into its constituent linestrings and circularstrings
SELECT ST_AsEWKT(a.geom), ST_HasArc(a.geom)
  FROM ( SELECT (ST_Dump(p_geom)).geom AS geom
         FROM (SELECT ST_GeomFromEWKT('COMPOUNDCURVE(CIRCULARSTRING(0 0, 1 1, 1 0),(1 0, 0 1))') AS p_geom) AS b
        ) AS a;
          st_asewkt          | st_hasarc
-----------------------------+----------
 CIRCULARSTRING(0 0,1 1,1 0) | t
 LINESTRING(1 0,0 1)         | f
(2 rows)

أمثلة الأسطح متعددة الوجوه وTIN والمثلث

-- Polyhedral surface example
-- Break a Polyhedral surface into its faces
SELECT (a.p_geom).path[1] As path, ST_AsEWKT((a.p_geom).geom) As geom_ewkt
  FROM (SELECT ST_Dump(ST_GeomFromEWKT('POLYHEDRALSURFACE(
((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),  ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)),  ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1))
)') ) AS p_geom )  AS a;

 path |                geom_ewkt
------+------------------------------------------
    1 | POLYGON((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0))
    2 | POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0))
    3 | POLYGON((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0))
    4 | POLYGON((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0))
    5 | POLYGON((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0))
    6 | POLYGON((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1))
-- TIN --
SELECT (g.gdump).path, ST_AsEWKT((g.gdump).geom) as wkt
  FROM
    (SELECT
       ST_Dump( ST_GeomFromEWKT('TIN (((
                0 0 0,
                0 0 1,
                0 1 0,
                0 0 0
            )), ((
                0 0 0,
                0 1 0,
                1 1 0,
                0 0 0
            ))
            )') ) AS gdump
    ) AS g;
-- result --
 path |                 wkt
------+-------------------------------------
 {1}  | TRIANGLE((0 0 0,0 0 1,0 1 0,0 0 0))
 {2}  | TRIANGLE((0 0 0,0 1 0,1 1 0,0 0 0))