Name

ST_Segmentize — Returnerar en modifierad geometri/geografi som inte har något segment som är längre än ett givet avstånd.

Synopsis

geometry ST_Segmentize(geometry geom, float max_segment_length);

geography ST_Segmentize(geography geog, float max_segment_length);

Beskrivning

Returnerar en modifierad geometri/geografi som inte har något segment som är längre än max_segment_length. Längden beräknas i 2D. Segmenten delas alltid upp i lika långa undersegment.

  • För geometri är den maximala längden i enheterna i det spatiala referenssystemet.

  • För geografi är den maximala längden i meter. Avstånden beräknas på sfären. Tillagda hörnpunkter skapas längs de sfäriska storcirkelbågar som definieras av segmentets ändpunkter.

[Note]

Detta förkortar endast långa segment. Den förlänger inte segment som är kortare än den maximala längden.

[Warning]

För indata som innehåller långa segment kan en relativt kort max_segment_length leda till att ett mycket stort antal hörnpunkter läggs till. Detta kan hända oavsiktligt om argumentet av misstag anges som ett antal segment i stället för en maximal längd.

Tillgänglighet: 1.2.2

Förbättrad: 3.0.0 Segmentize-geometri producerar nu lika långa undersegment

Förbättrad: 2.3.0 Segmentize-geografin producerar nu lika långa undersegment

Förbättrad: 2.1.0 stöd för geografi infördes.

Ändrad: 2.1.0 Som ett resultat av införandet av geografistöd orsakar användningen ST_Segmentize('LINESTRING(1 2, 3 4)', 0.5) ett tvetydigt funktionsfel. Indata måste vara korrekt typad som en geometri eller geografi. Använd ST_GeomFromText, ST_GeogFromText eller en cast till den nödvändiga typen (t.ex. ST_Segmentize('LINESTRING(1 2, 3 4)'::geometry, 0.5) )

Exempel

Segmentisering av en linje. Långa segment delas upp jämnt, medan korta segment inte delas upp.

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

Segmentisering av en polygon:

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

Segmentisering av en geografisk linje med en maximal segmentlängd på 2000 kilometer. Hörnpunkter läggs till längs den storcirkelbåge som förbinder ändpunkterna.

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)

En geografisk linje segmenterad längs en storcirkelbåge

Se även

ST_LineSubstring