Name

ST_SetEffectiveArea — 使用Visvalingam-Whyatt算法设置每个顶点的有效面积。

Synopsis

geometry ST_SetEffectiveArea(geometry geomA, float threshold = 0, integer set_area = 1);

描述

使用Visvalingam-Whyatt算法设置每个顶点的有效面积。将有效面积存储为顶点的M值。如果使用可选的“thhold”参数,将返回一个简化的几何体,其中只包含有效面积大于或等于阈值的顶点。

当指定阈值时,此函数可用于服务器端简化。另一种选择是使用零的阈值。在这种情况下,完整的几何体将返回有效区域作为M值,客户端可以使用它来非常快速地简化。

我实际上只对(多)线和(多)多边形做了一些事情,但你可以安全地用任何类型的几何体调用它。由于简化是在逐个对象的基础上进行的,因此您还可以将GeometryCollection提供给此函数。

[Note]

请注意,返回的几何可能会失去简单性(请参见 ST_IsSimple )

[Note]

注意:拓扑可能不会保留,并可能导致无效的几何图形。使用(请参见 ST_SimplifyPreserveTopology )以保持拓扑结构。

[Note]

输出几何将丢失M值中的所有先前信息

[Note]

此函数处理3D和第三个维度将影响有效区域

可用性:2.2.0

示例

计算线条的有效面积。由于我们使用的阈值为零,因此将返回输入几何体中的所有顶点。

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)

                

另请参阅

ST_SimplifyVW