ST_RemoveIrrelevantPointsForView — 删除对于渲染几何图形的特定矩形视图而言不相关的点。
geometry ST_RemoveIrrelevantPointsForView(
geometry geom, box2d bounds, boolean cartesian_hint = false)
;
返回一个几何图形,其中不包含对于在给定矩形视图内渲染该几何图形而言不相关的点。
此函数可用于快速预处理仅应在特定边界内渲染的几何图形。
仅评估类型为(MULTI)POLYGON 和 (MULTI)LINESTRING 的几何图形。其他几何图形保持不变。
与 ST_ClipByBox2D()
相比,此函数
在不计算新的交点的情况下,将点排序,从而避免了舍入误差,并通常提高了性能,
返回一个点数相等或相似的几何图形,
在指定的视图内产生相同的渲染结果,并且
可能会引入自相交,这会使生成的几何图形无效(请参见下面的示例)。
如果将 cartesian_hint
设置为 true
,则该算法将应用涉及笛卡尔数学的额外优化,以进一步减少生成的点数。请注意,如果在渲染之前将生成的坐标投影到另一个(非笛卡尔)坐标系中,则使用此选项可能会引入渲染伪影。
对于多边形,此函数当前不确保结果有效。可以使用 ST_IsValid 检查这种情况,并使用 ST_MakeValid 修复。 |
可用性:3.5.0
SELECT ST_AsText( ST_RemoveIrrelevantPointsForView( ST_GeomFromText('MULTIPOLYGON(((10 10, 20 10, 30 10, 40 10, 20 20, 10 20, 10 10)),((10 10, 20 10, 20 20, 10 20, 10 10)))'), ST_MakeEnvelope(12,12,18,18), true)); st_astext --------- MULTIPOLYGON(((10 10,40 10,20 20,10 20,10 10)),((10 10,20 10,20 20,10 20,10 10)))
SELECT ST_AsText( ST_RemoveIrrelevantPointsForView( ST_GeomFromText('MULTILINESTRING((0 0, 10 0,20 0,30 0), (0 15, 5 15, 10 15, 15 15, 20 15, 25 15, 30 15, 40 15), (13 13,15 15,17 17))'), ST_MakeEnvelope(12,12,18,18), true)); st_astext --------- MULTILINESTRING((10 15,15 15,20 15),(13 13,15 15,17 17))
SELECT ST_AsText( ST_RemoveIrrelevantPointsForView( ST_GeomFromText('LINESTRING(0 0, 10 0,20 0,30 0)'), ST_MakeEnvelope(12,12,18,18), true)); st_astext --------- LINESTRING EMPTY
SELECT ST_AsText( ST_RemoveIrrelevantPointsForView( ST_GeomFromText('POLYGON((0 30, 15 30, 30 30, 30 0, 0 0, 0 30))'), ST_MakeEnvelope(12,12,18,18), true)); st_astext --------- POLYGON((15 30,30 0,0 0,15 30))
SELECT ST_AsText( ST_RemoveIrrelevantPointsForView( ST_GeomFromText('POLYGON((0 30, 15 30, 30 30, 30 0, 0 0, 0 30))'), ST_MakeEnvelope(12,12,18,18))); st_astext --------- POLYGON((0 30,30 30,30 0,0 0,0 30))