الاسم
ST_Polygonize — تحسب مجموعة من المضلعات المتكوّنة من خطوط مجموعة من الأشكال الهندسية.
المختصر
geometry ST_Polygonize(geometry set geomfield);
geometry ST_Polygonize(geometry[] geom_array);
الوصف
تُنشئ GeometryCollection تحتوي على المضلعات المتكوّنة من خطوط مجموعة من الأشكال الهندسية. وإذا لم تُكوّن خطوط المُدخل أي مضلعات، فتُعاد GeometryCollection فارغة.
تُنشئ هذه الدالة مضلعات تغطي جميع المساحات المحدَّدة. وإذا كان المقصود أن تُكوّن النتيجة شكلاً مضلّعياً صالحاً، فاستخدم ST_BuildArea لمنع ملء الثقوب.
|
|
|
يجب أن تكون خطوط المُدخل معقودة بشكل صحيح لكي تعمل هذه الدالة كما ينبغي. ولضمان عقد المُدخل استخدم ST_Node على الشكل المُدخل قبل التحويل إلى مضلعات. |
|
|
|
قد يصعب التعامل مع GeometryCollection في الأدوات الخارجية. استخدم ST_Dump لتحويل نتيجة التحويل إلى مضلعات إلى مضلعات منفصلة. |
تُنفَّذ بواسطة وحدة GEOS.
متاحة منذ: 1.0.0RC1
أمثلة
|
الخطوط المُدخلة
|
نتيجة التحويل إلى مضلعات
|
WITH data(geom) AS (VALUES
('LINESTRING (180 40, 30 20, 20 90)'::geometry)
,('LINESTRING (180 40, 160 160)'::geometry)
,('LINESTRING (80 60, 120 130, 150 80)'::geometry)
,('LINESTRING (80 60, 150 80)'::geometry)
,('LINESTRING (20 90, 70 70, 80 130)'::geometry)
,('LINESTRING (80 130, 160 160)'::geometry)
,('LINESTRING (20 90, 20 160, 70 190)'::geometry)
,('LINESTRING (70 190, 80 130)'::geometry)
,('LINESTRING (70 190, 160 160)'::geometry)
)
SELECT ST_AsText( ST_Polygonize( geom ))
FROM data;
------------------------------------------------------------------------------------------
GEOMETRYCOLLECTION (POLYGON ((180 40, 30 20, 20 90, 70 70, 80 130, 160 160, 180 40), (150 80, 120 130, 80 60, 150 80)),
POLYGON ((20 90, 20 160, 70 190, 80 130, 70 70, 20 90)),
POLYGON ((160 160, 80 130, 70 190, 160 160)),
POLYGON ((80 60, 120 130, 150 80, 80 60)))
تحويل جدول من الخطوط إلى مضلعات:
SELECT ST_AsEWKT(ST_Polygonize(geom_4269)) As geomtextrep
FROM (SELECT geom_4269 FROM ma.suffolk_edges) As foo;
-------------------------------------
SRID=4269;GEOMETRYCOLLECTION(POLYGON((-71.040878 42.285678,-71.040943 42.2856,-71.04096 42.285752,-71.040878 42.285678)),
POLYGON((-71.17166 42.353675,-71.172026 42.354044,-71.17239 42.354358,-71.171794 42.354971,-71.170511 42.354855,
-71.17112 42.354238,-71.17166 42.353675)))
--Use ST_Dump to dump out the polygonize geoms into individual polygons
SELECT ST_AsEWKT((ST_Dump(t.polycoll)).geom) AS geomtextrep
FROM (SELECT ST_Polygonize(geom_4269) AS polycoll
FROM (SELECT geom_4269 FROM ma.suffolk_edges)
As foo) AS t;
------------------------
SRID=4269;POLYGON((-71.040878 42.285678,-71.040943 42.2856,-71.04096 42.285752,
-71.040878 42.285678))
SRID=4269;POLYGON((-71.17166 42.353675,-71.172026 42.354044,-71.17239 42.354358
,-71.171794 42.354971,-71.170511 42.354855,-71.17112 42.354238,-71.17166 42.353675))