ST_Simplify — 使用 Douglas-Peucker 算法返回几何的简化表示。
geometry ST_Simplify(
geometry geom, float tolerance)
;
geometry ST_Simplify(
geometry geom, float tolerance, boolean preserveCollapsed)
;
使用 Douglas-Peucker 算法 计算几何的简化表示。简化tolerance
是一个距离值,单位与输入 SRS 的单位相同。简化会移除那些在简化线段的 tolerance 距离内的顶点。即使输入有效,结果也可能无效。
该函数可以调用任何类型的几何图形(包括 GeometryCollections),但只有线和多边形元素会被简化。线性几何的端点会保留。
preserveCollapsed
标志会保留在给定容差下会被移除的小几何图形。例如,如果一个 1 米长的线段以 10 米的容差进行简化,当 preserveCollapsed
为 true 时,该线段不会消失。此标志对于渲染目的很有用,可以防止非常小的要素从地图上消失。
返回的几何图形可能会失去其简单性(请参阅 ST_IsSimple),拓扑可能不会被保留,多边形结果可能无效(请参阅 ST_IsValid)。使用 ST_SimplifyPreserveTopology 来保留拓扑并确保有效性。 |
此函数不保留多边形之间共享的边界。如果需要,请使用 ST_CoverageSimplify。 |
可用性:1.2.2
一个简化过多的圆会变成一个三角形,中等程度的简化会变成一个八边形。
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_triangle, (ST_Simplify(geom, 100) is null) AS np100_geometrygoesaway FROM (SELECT ST_Buffer('POINT(1 3)', 10,12) As geom) AS t; np_before | np01_notbadcircle | np05_notquitecircle | np1_octagon | np10_triangle | np100_geometrygoesaway -----------+-------------------+---------------------+-------------+---------------+------------------------ 49 | 33 | 17 | 9 | 4 | 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))', 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)))', 40);