ระเบิด MULTILINESTRING ออกเป็นแต่ละกลุ่มใน PostGIS 1.5


10

ฉันมีMULTILINESTRINGใน PostGIS ซึ่งประกอบด้วยหลายLINESTRINGๆ พิจารณาในแต่ละLINESTRINGที่จะมีชุดของPOINT's

P 1 , P 2 , ... P N

สร้างส่วนของเส้น

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

โดยที่ L Xเป็นส่วนของเส้นตรงที่เชื่อม P Xไปที่ P X + 1

การใช้ PostGIS 1.5 ฉันจะสามารถระเบิดกลุ่มMULTILINESTRINGแต่ละบรรทัดของแต่ละกลุ่มได้LINESTRINGอย่างไร

คำตอบ:


11

สองทางเลือกที่อยู่ในใจ หากคุณต้องการที่เฉพาะเจาะจงLINESTRINGแล้วคุณสามารถใช้ST_NumGeometries ()และST_GeometryN () หรือถ้าคุณต้องการรูปทรงย่อยทั้งหมดST_Dump ()เป็นวิธีที่จะไป

หลังจากอ่านคำถามคุณจะต้องทำสิ่งที่คล้ายกับโพสต์นี้จากรายการผู้ใช้ postgis :

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;

ผมอ่านคำตอบของคุณเป็นวิธีการที่จะได้รับLINESTRING's MULTILINESTRINGจาก แต่ผมต้องการที่จะไปในระดับที่ลึกฉันต้องการกลุ่มสายของแต่ละบุคคลซึ่งเมื่อรวมรูปแบบLINESTRING's MULTILINESTRINGอีกครั้งซึ่งเมื่อรวมรูปแบบเดิม มันสมเหตุสมผลไหม
Chau

1
อา! ใช่ตอนนี้ฉันมีกาแฟฉันเห็นว่านั่นคือสิ่งที่คุณเขียน ...
MerseyViking

1
ฉันไม่เข้าใจเพราะฉันไม่ดื่มกาแฟ;)
Chau

การเพิ่มของคุณใช้งานได้ดี แต่ขอบคุณมาก!
Chau
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.