名前

ST_SnapToGrid — 入力ジオメトリーの全ての点を規則的なグリッドにスナップします。

概要

geometry ST_SnapToGrid(geometry geomA, float originX, float originY, float sizeX, float sizeY);

geometry ST_SnapToGrid(geometry geomA, float sizeX, float sizeY);

geometry ST_SnapToGrid(geometry geomA, float size);

geometry ST_SnapToGrid(geometry geomA, geometry pointOrigin, float sizeX, float sizeY, float sizeZ, float sizeM);

説明

1, 2, 3番目の形式では、入力ジオメトリーの全てのポイントを原点とセルサイズを定めたグリッドにスナップします。同じセルに落ちた、連続するポイントを削除します。引数ジオメトリーのジオメトリータイプを定義できないポイントしか残らなかった場合は、NULL を返します。コレクション内で崩壊したジオメトリーはそこから削除されます。精度を落とすのに使います。

4番目の形式は、1.1.0で導入されました。入力ジオメトリーの全てのポイントを原点 (第 2引数で指定するもので、ポイントでなければなりません) とセルサイズを定めたグリッドにスナップします。グリッドにスナップしたくない次元についてはサイズに 0を指定します。

[注記]

返されるジオメトリーは単純性が失われているかも知れません (ST_IsSimpleを参照してください)。

[注記]

1.1.0版より前では、この関数は常に 2次元ジオメトリーを返しました。1.1.0版からは、返されるジオメトリーの次元数は、入力値のうちで手のつけられていない最大の次元と同じになります。全てのグリッドの次元を定義するには、第 2引数にジオメトリーを取る形式を使って下さい。

Availability: 1.0.0RC1

Availability: 1.1.0 - Z 値と M 値に対応しました

この関数は3次元に対応し、Z値を削除しません。

ジオメトリーカラムの 10^-3 精度グリッドへのスナップ。

コード
UPDATE mytable
   SET geom = ST_SnapToGrid(geom, 0.001);

同じグリッドサイズでどれだけ LINESTRING を丸めるかの表示。

コード
SELECT ST_SnapToGrid('LINESTRING(1.1115678 2.123,4.111111 3.2374897,4.11112 3.23748667)'::geometry,
        0.001);
出力
LINESTRING(1.112 2.123,4.111 3.237)
Geometry figure for visual-st-snaptogrid-01

この例では 4次元ジオメトリーをスナップさせます。

コード
SELECT ST_SnapToGrid('LINESTRING(-1.1115678 2.123 2.3456 1.11111,
        4.111111 3.2374897 3.1234 1.1111,-1.11111112 2.123 2.3456 1.1111112)'::geometry,
        'POINT(1.12 2.22 3.2 4.4444)',
        0.1, 0.1, 0.1, 0.01);
出力
LINESTRING(-1.08 2.12 2.3 1.1144,4.12 3.22 3.1 1.1144,-1.08 2.12 2.3 1.1144)
Geometry figure for visual-st-snaptogrid-02

4次元ジオメトリーへの適用 - ST_SnapToGrid(geom,size) は X 軸と Y 軸のみを操作して、M 値と Z 値は値を変更しません。

コード
SELECT ST_SnapToGrid('LINESTRING(-1.1115678 2.123 3 2.3456,
        4.111111 3.2374897 3.1234 1.1111)'::geometry,
       0.01);
出力
LINESTRING(-1.11 2.12 3 2.3456,4.11 3.24 3.1234 1.1111)
Geometry figure for visual-st-snaptogrid-03