ST_RemoveIrrelevantPointsForView — 删除在指定矩形表示范围内与绘制无关的几何图形点。
geometry ST_RemoveIrrelevantPointsForView(
geometry geom, box2d bounds, boolean cartesian_hint = false)
;
返回一个 geometry,移除了在指定矩形表示范围内绘制时无关的点。
使用此函数可以对仅在特定范围内渲染的几何图形进行快速预处理。
只有(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))