Postgis - การแปลงชนิดข้อมูล 'geometry_dump' เป็นประเภท 'geometry'


18

ฉันกำลังทำงานกับชุดข้อมูลของขอบเขตคุณสมบัติที่มี ST_Union () ทำงานอยู่ดังนั้นรูปหลายเหลี่ยมทั้งหมดจะปรากฏเป็นรูปหลายเหลี่ยมหลายเหลี่ยมในหนึ่งแถวของตาราง ฉันต้องการแยกสิ่งเหล่านี้ออกเพื่อให้ได้แถว / รูปหลายเหลี่ยมแยกสำหรับแต่ละรูปร่าง ฉันได้ลองใช้งาน ST_Dump () กับสิ่งนี้และดูเหมือนว่าจะแยกโพลีกอนออกจากชุดข้อมูล แต่ฉันไม่สามารถดูได้อีกใน GIS (ฉันกำลังใช้ QGIS) ประเภทข้อมูลสำหรับคอลัมน์นี้บอกว่ามันเป็น 'geometry_dump' และฉันคิดว่านี่เป็นเหตุผลที่ฉันไม่สามารถมองเห็นได้ เมื่อฉันเข้าถึงฐานข้อมูล Postgres จาก QGIS ตารางใหม่นี้จะแสดงรายการอยู่ใต้หัวเรื่องของชุดข้อมูลที่ไม่มีรูปเรขาคณิต

ไม่มีใครรู้ว่ามีบางสิ่งที่ฉันสามารถทำได้เพื่อแปลง 'geometry_dump' เป็น 'geometry' หรือไม่?

คำตอบ:


30

geometry_dumpชนิดข้อมูลเป็นเรื่องง่ายที่ประเภทคอมโพสิตที่มีสองสาขา:

  1. path[] - อาร์เรย์ 1 มิติถือตำแหน่งของเรขาคณิตภายในวัตถุที่ถูกทิ้งและ
  2. geom - ส่วนย่อยทางเรขาคณิตที่เรียบง่ายของต้นฉบับซึ่งเป็นสิ่งที่คุณต้องการ

ในการเข้าถึงgeomเพียงใช้(ST_Dump(the_geom)).geom(ต้องใช้วงเล็บเพิ่มเติมและเป็นบิตของ gotcha เมื่อเข้าถึงสมาชิกจากประเภทคอมโพสิต) ตัวอย่างเช่น:

WITH data AS (SELECT 'MULTIPOLYGON (((170 190, 110 150, 200 120, 170 190)), 
  ((220 160, 230 110, 280 120, 220 160)), 
  ((220 200, 260 240, 270 190, 220 200)))'::geometry AS the_geom)

SELECT ST_AsText( (ST_Dump(the_geom)).geom )
FROM data;
                 st_astext
--------------------------------------------
 POLYGON((170 190,110 150,200 120,170 190))
 POLYGON((220 160,230 110,280 120,220 160))
 POLYGON((220 200,260 240,270 190,220 200))
(3 rows)

คู่มือ PostGISมีตัวอย่างที่ดีอื่น ๆ สำหรับ ST_Dump


ขอบคุณนี่เป็นสิ่งที่ฉันต้องการ ฉันไม่เคยใช้หรือเจอกับไวยากรณ์ของ SQL กับสิ่งที่ต้องการ ".geom" ไชโย
Roman Trubka

วงเล็บพิเศษมีความสำคัญดังนี้: ถูกต้อง: "SELECT (ST_Dump (geom)) geom FROM table" ไม่ถูกต้อง: "SELECT ST_Dump (geom) .geom FROM table"
HeikkiVesanto
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.