ST_Simplify — 返回几何图形的简化表示,使用 Douglas-Peucker算法。
geometry ST_Simplify(geometry geom, float tolerance);
geometry ST_Simplify(geometry geom, float tolerance, boolean preserveCollapsed);
使用Douglas-Peucker算法计算几何图形的简化表示。简化的tolerance是一个距离值,以输入SRS的单位为准。简化会移除在简化线条的公差距离内的顶点。即使输入是有效的,结果可能不是有效的。
该函数可用于任何类型的几何图形(包括GeometryCollections),但只有线和多边形元素会被简化。线性几何的端点将被保留。
preserveCollapsed标志保留那些在给定公差下本应被移除的小几何图形。例如,如果将一个1米长的线条使用10米的公差进行简化,当preserveCollapsed为true时,该线条将不会消失。这个标志对于渲染目的很有用,以防止地图上非常小的特征消失。
|
|
|
返回的几何图形可能会失去其简单性(参见ST_IsSimple),拓扑可能不会被保留,并且多边形结果可能是无效的(参见ST_IsValid)。使用ST_SimplifyPreserveTopology来保留拓扑并确保有效性。 |
|
|
|
该函数不保留多边形之间共享的边界。如果需要保留共享边界,请使用ST_CoverageSimplify。 |
可用性:1.2.2
A circle simplified with a medium tolerance becomes an octagon, and with a large tolerance disappears.
SELECT ST_NPoints(geom) AS np_before,
ST_NPoints(ST_Simplify(geom, 0.1)) AS np01_notbadcircle,
ST_NPoints(ST_Simplify(geom, 0.5)) AS np05_notquitecircle,
ST_NPoints(ST_Simplify(geom, 1)) AS np1_octagon,
ST_NPoints(ST_Simplify(geom, 10)) AS np10_gone,
(ST_Simplify(geom, 100) is null) AS np100_geometrygoesaway
FROM (SELECT ST_Buffer('POINT(1 3)', 10, 12) As geom) AS t;
-[ RECORD 1 ]------------ np_before | 49 np01_notbadcircle | 33 np05_notquitecircle | 17 np1_octagon | 9 np10_gone | null np100_geometrygoesaway | t
简化一组线。简化后,线可能会相交。
SELECT ST_Simplify('MULTILINESTRING ((20 180,20 150,50 150,50 100,110 150,150 140,170 120),(20 10,80 30,90 120),(90 120,130 130),(130 130,130 70,160 40,180 60,180 90,140 80),(50 40,70 40,80 70,70 60,60 60,50 50,50 40))'::geometry,
40);
MULTILINESTRING((20 180,50 100,170 120),(20 10,90 120),(90 120,130 130),(130 130,160 40,180 90,140 80),(50 40,80 70,50 40))
简化一个MultiPolygon。多边形的结果可能是无效的。
SELECT ST_Simplify('MULTIPOLYGON (((90 110,80 180,50 160,10 170,10 140,20 110,90 110)),((40 80,100 100,120 160,170 180,190 70,140 10,110 40,60 40,40 80),(180 70,170 110,142.5 128.5,128.5 77.5,90 60,180 70)))'::geometry,
40);
MULTIPOLYGON(((90 110,80 180,10 170,20 110,90 110)),((40 80,170 180,140 10,40 80),(180 70,142.5 128.5,90 60,180 70)))
ST_IsSimple, ST_SimplifyPreserveTopology, ST_SimplifyVW, ST_CoverageSimplify, Topology ST_Simplify