名前

ST_CoverageEdges — ポリゴンカバレッジの重複の無いエッジを計算します。

概要

geometry ST_CoverageEdges(geometry geom, integer edgetype = 0);

geometry ST_CoverageEdges(geometry[] geoms, integer edgetype = 0);

説明

ポリゴンカバレッジの重複の無いエッジをMULTILINESTRING表現で返します。ポリゴンカバレッジはオーバーラップが無いポリゴンの集合で、隣接するポリゴンは共有するエッジに沿って一致する頂点を持っています。

edgetypeパラメーターはどのエッジを返すかを選択するのに使われます。取りえる値は次の通りです:

  • 0 (ALL) - 全ての重複の無いエッジ (デフォルト)

  • 1 (EXTERIOR) - ポリゴンの外側のエッジのみ (非共有エッジ)

  • 2 (INTERIOR) - ポリゴンの内側のエッジのみ (共有エッジ)

Availability: 3.7.0

GEOS >= 3.15.0 が必要です

この例ではカバレッジの全ての一意のエッジを返します。

Code
WITH coverage(geom) AS (
  VALUES (
    'GEOMETRYCOLLECTION(
      POLYGON((0 0,10 0,10 10,0 10,0 0)),
      POLYGON((10 0,20 0,20 10,10 10,10 0))
    )'::geometry
  )
)
SELECT geom AS input_coverage,
       ST_CoverageEdges(geom) AS all_edges
FROM coverage;
出力:
-[ RECORD 1 ]--+----------------------------------------------------------------------------------------------
input_coverage | GEOMETRYCOLLECTION(POLYGON((0 0,10 0,10 10,0 10,0 0)),POLYGON((10 0,20 0,20 10,10 10,10 0)))
all_edges      | MULTILINESTRING((10 0,10 10),(10 10,0 10,0 0,10 0),(10 0,20 0,20 10,10 10))

この例ではカバレッジの内部の共有エッジだけを返します。

Code
WITH coverage(geom) AS (
  VALUES (
    'GEOMETRYCOLLECTION(
      POLYGON((0 0,10 0,10 10,0 10,0 0)),
      POLYGON((10 0,20 0,20 10,10 10,10 0))
    )'::geometry
  )
)
SELECT geom AS input_coverage,
       ST_CoverageEdges(geom, 2) AS shared_edges
FROM coverage;
出力:
-[ RECORD 1 ]--+----------------------------------------------------------------------------------------------
input_coverage | GEOMETRYCOLLECTION(POLYGON((0 0,10 0,10 10,0 10,0 0)),POLYGON((10 0,20 0,20 10,10 10,10 0)))
shared_edges   | MULTILINESTRING((10 0,10 10))