ST_SetEffectiveArea — 使用 Visvalingam-Whyatt 算法为每个顶点设置有效面积。
geometry ST_SetEffectiveArea(
geometry geomA, float threshold = 0, integer set_area = 1)
;
使用 Visvalingam-Whyatt 算法为每个顶点设置有效面积。有效面积存储为顶点的 M 值。如果使用可选的“阈值”参数,则将返回一个简化的几何图形,其中仅包含有效面积大于或等于阈值的所有顶点。
此函数可用于在指定阈值时进行服务器端简化。另一种选择是使用零阈值。在这种情况下,将返回完整的几何图形,其中有效面积作为 M 值,客户端可以使用这些值来快速简化。
实际上,此函数仅对(多)线和(多)多边形有效,但您可以安全地对任何类型的几何图形调用它。由于简化是在逐个对象的基础上进行的,因此您也可以将 GeometryCollection 传递给此函数。
请注意,返回的几何图形可能会失去其简单性(请参阅 ST_IsSimple)。 |
请注意,拓扑可能无法保留,并且可能导致无效的几何图形。使用(请参阅 ST_SimplifyPreserveTopology)来保留拓扑。 |
输出几何图形将丢失 M 值中的所有先前信息。 |
此函数处理 3D,第三维将影响有效面积。 |
可用性:2.2.0
计算 LineString 的有效面积。由于我们使用的是零阈值,因此将返回输入几何图形中的所有顶点。
select ST_AsText(ST_SetEffectiveArea(geom)) all_pts, ST_AsText(ST_SetEffectiveArea(geom,30) ) thrshld_30 FROM (SELECT 'LINESTRING(5 2, 3 8, 6 20, 7 25, 10 10)'::geometry geom) As foo; -result all_pts | thrshld_30 -----------+-------------------+ LINESTRING M (5 2 3.40282346638529e+38,3 8 29,6 20 1.5,7 25 49.5,10 10 3.40282346638529e+38) | LINESTRING M (5 2 3.40282346638529e+38,7 25 49.5,10 10 3.40282346638529e+38)