2011-09-29 12 views

Odpowiedz

16

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

0

Jest to pierwsze trafienie w Google podczas wyszukiwania tego problemu. Nie wiem, czy minęło tyle czasu, zanim stworzono funkcję, ale dla przyszłych pracowników Google'a ST_ExteriorRings (geom) działało doskonale dla mnie. http://postgis.net/docs/ST_ExteriorRing.html

+0

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 ... –

Powiązane problemy