sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man konverterar polygondata till linjesegment med PostGIS

Generellt sett kan det inte vara enkelt att konvertera polygon till linje eftersom det finns ingen en-till-en-mappning och olika element av polygon mappar till olika linjesträngar (exteriör ring, inre ringar, etc.).

Med tanke på det kommer du att behöva dela upp var och en av dem separat efter möjliga tillvägagångssätt så här:

SELECT ST_AsText( ST_MakeLine(sp,ep) )
FROM
   -- extract the endpoints for every 2-point line segment for each linestring
   (SELECT
      ST_PointN(geom, generate_series(1, ST_NPoints(geom)-1)) as sp,
      ST_PointN(geom, generate_series(2, ST_NPoints(geom)  )) as ep
    FROM
       -- extract the individual linestrings
      (SELECT (ST_Dump(ST_Boundary(geom))).geom
       FROM mypolygontable
       ) AS linestrings
    ) AS segments;

beroende på vilken polygondata som lagras i mypolygontable , du kanske vill dumpa inte bara gränsen (som ovan med ST_Boundary ) men även andra element. Koden ovan med mer detaljerad översikt är hämtad från postgis-användarlistan:Dela en polygon till N radsträngar

Det finns också en generisk syn på problemet som förklaras i Explodera en linjesträng eller polygon till individuella vektorer i PostGIS



  1. Lägg till dag till tidsstämpel

  2. PHP/MySQL Infoga null-värden

  3. PostgreSQL rad till kolumner

  4. Oracle AQ köbeställning