PostGIS 1.5'te MULTILINESTRING'i bireysel segmentlere ayırın


10

MULTILINESTRINGPostGIS içinde birkaç LINESTRING's oluşan bir var . Her düşünün LINESTRINGbir dizi var POINT's

P 1 , P 2 , ... P N

çizgi parçalarının oluşturulması

L 1 , L 2 , ... L N-1

L burada X, P bağlantı hattı bölümdür X P X + 1 .

PostGIS 1.5 kullanarak MULTILINESTRINGher birinin satır bölümlerini nasıl patlatabilirim LINESTRING?

Yanıtlar:


11

İki seçenek akla geliyor. Belirli bir şey istiyorsanız LINESTRING, ST_NumGeometries () ve ST_GeometryN () kullanabilirsiniz . Alternatif olarak, tüm alt geometrileri istiyorsanız, ST_Dump () yolu budur.

Aslında soruyu okuduktan sonra, benzer bir şey yapmak gerekecektir bu gelen yazı PostGIS kullanıcılar listesinde:

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
   -- eliminate 0 length linestring 
    where st_x(st_startpoint(geom))<> st_x(st_endpoint(geom))
   ) AS linestrings
) AS segments;

Ben iyi şekilde nasıl cevap okumak LINESTRING'a ta yapılıyor MULTILINESTRING. Ama daha derine inmek istiyorum, birleştiğinde LINESTRINGtekrar birleştiğinde orijinali oluşturan bireysel çizgi parçalarını istiyorum MULTILINESTRING. bu mantıklı mı?
Chau

1
Ah! Evet, şimdi bir kahve içtim, gördüğünüz gibi yazdım ...
MerseyViking

1
Kahve içmediğim için anlamıyorum;)
Chau

Eklemeniz iyi çalışıyor, bu yüzden çok teşekkürler!
Chau
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.