カテゴリ:

地理空間関数

ST_SIMPLIFY

線またはポリゴンを表す入力 GEOGRAPHY または GEOMETRY オブジェクトを指定すると、オブジェクトのより単純な近似を返します。この関数は、選択された頂点を識別して削除するため、頂点の少ない同様のオブジェクトが生成されます。

たとえば、入力オブジェクトが50個の頂点を持つポリゴンである場合、ST_SIMPLIFY はこれらの頂点の内、20個のみを持つ単純なポリゴンを返すことができます。

オブジェクトを簡略化する場合、この関数は頂点を削除し、その頂点の削除によって生じたエッジとエッジの間の距離が指定された許容範囲内にある場合にのみ、その頂点を削除します。

構文

ST_SIMPLIFY( <geography_expression>, <tolerance> [ , <preserve_collapsed> ] )
ST_SIMPLIFY( <geometry_expression>, <tolerance> )
Copy

引数

必須:

geography_expression . OR . geometry_expression

単純化する GEOGRAPHY または GEOMETRY オブジェクト。

GEOGRAPHY または GEOMETRY オブジェクトの型に応じて、ST_SIMPLIFY には次の効果があります。

オブジェクトの型

ST_SIMPLIFY の効果

LineString、 MultiLineString、ポリゴン、または MultiPolygon

ST_SIMPLIFY による単純化アルゴリズムの適用

ポイントまたは MultiPoint

ST_SIMPLIFY は、効果がありません。

GeometryCollection または FeatureCollection

GEOGRAPHY オブジェクトの場合、ST_SIMPLIFY は単純化アルゴリズムをコレクション内の各オブジェクトに適用します。 . . GEOMETRY オブジェクトの場合、ST_SIMPLIFY はこれらのタイプをサポートしていません。

tolerance

頂点の削除から生じる頂点とエッジ間の最大距離(メートル)。距離が頂点のこの許容値を超える場合、 ST_SIMPLIFY はその頂点を簡略化されたオブジェクトに保持します。

オプション:

preserve_collapsed

(GEOGRAPHY オブジェクトの場合のみ) TRUE の場合、許容値を考慮した際に小さすぎるオブジェクトを保持します。

たとえば、 preserve_collapsedFALSE で、 tolerance10 (メートル)の場合、1mの長さの線は、簡略化されたオブジェクトのポイントに縮小されます。 preserve_collapsedTRUE の場合、線は簡略化されたオブジェクトに保持されます。

デフォルト: FALSE

戻り値

この関数は、型 GEOGRAPHY または GEOMETRY の値を返します。

GEOGRAPHY 例

このセクションの例では、出力を WKT 形式で表示します。

alter session set GEOGRAPHY_OUTPUT_FORMAT='WKT';
Copy

次の例は、元の LineString よりも頂点が少ない簡略化された LineString を返します。簡略化されたオブジェクトでは、頂点と、頂点を置き換えるエッジ間の距離が1000メートル未満の場合、頂点は省略されます。

SELECT ST_SIMPLIFY(
    TO_GEOGRAPHY('LINESTRING(-122.306067 37.55412, -122.32328 37.561801, -122.325879 37.586852)'),
    1000);
+----------------------------------------------------------------------------------------------------+
| ST_SIMPLIFY(                                                                                       |
|     TO_GEOGRAPHY('LINESTRING(-122.306067 37.55412, -122.32328 37.561801, -122.325879 37.586852)'), |
|     1000)                                                                                          |
|----------------------------------------------------------------------------------------------------|
| LINESTRING(-122.306067 37.55412,-122.325879 37.586852)                                             |
+----------------------------------------------------------------------------------------------------+
Copy

GEOMETRY 例

このセクションの例では、出力を WKT 形式で表示します。

ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='WKT';
Copy

次の例は、元の LineString よりも頂点が少ない簡略化された LineString を返します。簡略化されたオブジェクトでは、頂点と、頂点を置き換えるエッジ間の距離が500メートル未満の場合、頂点は省略されます。

SELECT ST_SIMPIFY(
  TO_GEOMETRY('LINESTRING(1100 1100, 2500 2100, 3100 3100, 4900 1100, 3100 1900)'),
  500);

+----------------------------------------------------------------------------------------------------+
| ST_SIMPLIFY(TO_GEOMETRY('LINESTRING(1100 1100, 2500 2100, 3100 3100, 4900 1100, 3100 1900)'), 500) |
|----------------------------------------------------------------------------------------------------|
| LINESTRING(1100 1100,3100 3100,4900 1100,3100 1900)                                                |
+----------------------------------------------------------------------------------------------------+
Copy

次の例では、 tolerance 引数に応じて、36個の初期頂点を持つ楕円を16個または10個の頂点を持つ形状に単純化します。

SELECT ST_NUMPOINTS(geom) AS numpoints_before,
  ST_NUMPOINTS(ST_Simplify(geom, 0.5)) AS numpoints_simplified_05,
  ST_NUMPOINTS(ST_Simplify(geom, 1)) AS numpoints_simplified_1
  FROM
  (SELECT ST_BUFFER(to_geometry('LINESTRING(0 0, 1 1)'), 10) As geom);

+------------------+-------------------------+------------------------+
| NUMPOINTS_BEFORE | NUMPOINTS_SIMPLIFIED_05 | NUMPOINTS_SIMPLIFIED_1 |
|------------------+-------------------------+------------------------|
|               36 |                      16 |                     10 |
+------------------+-------------------------+------------------------+
Copy