ST_Polygonize — 计算由一组几何图形的线条形成的多边形集合。
geometry ST_Polygonize(geometry set geomfield);
geometry ST_Polygonize(geometry[] geom_array);
创建一个 GeometryCollection,其中包含由一组几何图形的线条形成的多边形。 如果输入线条未形成任何多边形,则返回空的 GeometryCollection。
此函数创建覆盖所有分隔区域的多边形。 如果结果旨在形成有效的多边形几何体,请使用 ST_BuildArea 来防止填充孔。
|
|
|
输入线条必须正确节点才能使该功能正常工作。 为了确保输入已节点化,请在多边形化之前在输入几何体上使用 ST_Node。 |
|
|
|
使用外部工具可能很难处理几何集合。 使用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((80 60,120 130,150 80,80 60)),POLYGON((80 130,70 70,20 90,20 160,70 190,80 130)),POLYGON((160 160,80 130,70 190,160 160)))
多边形线串表:
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))