Name

ST_RemoveIrrelevantPointsForView — 指定した矩形表示範囲での描画に関係のないジオメトリのポイントを削除します。

Synopsis

geometry ST_RemoveIrrelevantPointsForView(geometry geom, box2d bounds, boolean cartesian_hint = false);

説明

指定した矩形表示範囲での描画に関係のないポイントを外したgeometryを返します。

この関数を使用すると、特定の範囲内のみで描画する必要があるジオメトリに対して素早い前処理を実行できます。

(MULTI)POLYGONと(MULTI)LINESTRINGのタイプのジオメトリだけが評価されます。他のジオメトリは変更されません。

この関数は次の点においてST_ClipByBox2D()と対照的です

  • この関数は、新しいインタセクトするポイントを計算することなくポイントの並べ替えを行うので、丸め誤差が回避され、通常は効率が向上し、

  • ポイント数が同じ又は近いジオメトリを返し、

  • 指定した描画範囲内では同じ描画結果になり、

  • 自己交差を発生させ、結果ジオメトリを不正にする可能性があります (下の例をご覧下さい)。

cartesian_hintTRUEに設定した場合には、アルゴリズムは、結果のポイント数をさらに減らすために、デカルト数学を含む、追加の最適化を適用します。結果の座標が他の (非デカルト)座標系に投影変換される場合には、この任意引数を使用することで、描画の不自然な諧調やノイズが現れる可能性があることに注意して下さい。

[Warning]

ポリゴンに対しては、この関数は現在は結果の妥当性を保証しません。この状況はST_IsValidで確認でき、ST_MakeValidで修復することができます。

例: ST_RemoveIrrelevantPointsForView()をポリゴンに適用しています。青いポイントが残り、灰色の描画範囲も残したうえで、結果の描画を行います (薄青の領域)。

例: ポイントが並べ替えられただけで、新しいポイントが計算されなかったという事実のため、ST_RemoveIrrelevantPointsForView()の結果に自己交差が含まれることがあります。

Availability: 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))