Ogólnie, konwersja wielokąt linii może nie być prosta, ponieważ there is no one-to-one mapping i różnych elementów wielokąta mapie do innego LINESTRING (pierścień zewnętrzny, pierścienie wewnętrzne, etc.).
Biorąc pod uwagę, że trzeba będzie podzielić każdy z tych oddzielnie następującej możliwym podejściem jak to:
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;
zależności od tego wielokąt dane są przechowywane w mypolygontable
, może chcesz zrzucić nie tylko granicę (jak powyżej przy użyciu ST_Boundary
), ale także inne elementy. Powyższy kod z bardziej szczegółowym przeglądem jest pobierana z listy postgis-users: Split a polygon to N linestrings
Istnieje również ogólne podejście do problemu wyjaśniono w Exploding a linestring or polygon into individual vectors in PostGIS
Choć odpowiedź jest 100% poprawne, to może również stać się 100% bezużyteczny jeśli linkujące jest przesuwany, zmieniane, połączone w jednym lub innej strony głównej prostu znika ... **: - (** Dlatego proszę [edytuj] odpowiedź i skopiuj odpowiednie kroki z linku do swojej odpowiedzi, tym samym gwarantując twoją odpowiedź na 100% długości życia tej strony! **; -) ** Zawsze możesz zostawić link na dole odpowiedzi jako źródło Twojego materiału ... –