ST_Segmentize — 与えた長さを超える線分を持たないよう変更したジオメトリ/ジオグラフィを返します。
geometry ST_Segmentize(
geometry geom, float max_segment_length)
;
geography ST_Segmentize(
geography geog, float max_segment_length)
;
max_segment_length
を超える長さの線分を持たないよう変更したジオメトリ/ジオグラフィを返します。長さは2次元で計算されます。線分は常に等長の線分に分割されます。
ジオメトリについては、最大長の単位は空間参照系の単位です。
ジオグラフィについては、最大長の単位はメートルです。距離は球面で計算します。追加される頂点は、線分の端点間で定まる球面の大円弧に沿うように作られます。
この関数は長い線分を短くするだけです。最大長より短い線分を長くすることはしません。 |
長い線分を含む入力では、比較的短い |
Availability: 1.2.2
Enhanced: 3.0.0 ジオメトリの分割において、現在は、同じ長さに分割しています
Enhanced: 2.3.0 ジオグラフィの分割において、現在は、同じ長さに分割しています
Enhanced: 2.1.0 ジオグラフィ対応が導入されました。
Changed: 2.1.0 ジオグラフィ対応の導入の結果、ST_Segmentize('LINESTRING(1 2, 3 4)', 0.5)
とすると、あいまい関数エラーが発生します。入力ではジオメトリかジオグラフィかを確実に指定する必要があります。ST_GeomFromText、ST_GeogFromText、使いたい型へのキャスト (例: ST_Segmentize('LINESTRING(1 2, 3 4)'::geometry, 0.5) )
を行います
ラインの分割。長い線分は均等に分割され、短い線分は分割されません。
SELECT ST_AsText(ST_Segmentize( 'MULTILINESTRING((0 0, 0 1, 0 9),(1 10, 1 18))'::geometry, 5 ) ); --------------------------------------------------- MULTILINESTRING((0 0,0 1,0 5,0 9),(1 10,1 14,1 18))
ポリゴンの分割:
SELECT ST_AsText( ST_Segmentize(('POLYGON((0 0, 0 8, 30 0, 0 0))'::geometry), 10)); ------------------------------------------------------- POLYGON((0 0,0 8,7.5 6,15 4,22.5 2,30 0,20 0,10 0,0 0))
2000キロメートルの最大線分長を使ったジオグラフィのラインの分割。頂点は、端点間をつなぐ大円弧に沿って追加されます。
SELECT ST_AsText( ST_Segmentize(('LINESTRING (0 0, 60 60)'::geography), 2000000)); ------------------------------------------------------------- LINESTRING(0 0,4.252632294621186 8.43596525986862,8.69579947419404 16.824093489701564,13.550465473227048 25.107950473646188,19.1066053508691 33.21091076089908,25.779290201459894 41.01711439406505,34.188839517966954 48.337222885886,45.238153936612264 54.84733442373889,60 60)