มีวิธีง่ายๆในการรับกล่อง bounding สำหรับทั้งตารางใน PostGIS หรือไม่
มีวิธีง่ายๆในการรับกล่อง bounding สำหรับทั้งตารางใน PostGIS หรือไม่
คำตอบ:
ST_Exentควรทำการหลอกลวง
ST_Extent - ฟังก์ชั่นรวมที่ส่งกลับกล่องขอบเขตที่ล้อมรอบแถวของรูปทรงเรขาคณิต
ใช้แบบนี้:
SELECT ST_Extent(the_geom) as table_extent FROM your_table;
ในฐานะที่เป็น@underdark ตอบ , ST_Extentจะทำผลงานได้ แต่เก็บไว้ในใจว่ามันไม่ได้กลับมาเป็นรูปทรงเรขาคณิต box2d
แต่ หากคุณต้องการประเภทรูปทรงเรขาคณิตคุณควรใช้สิ่งที่ชอบ
SELECT ST_SetSRID(ST_Extent(the_geom), THE_SRID) as table_extent FROM your_table;
นอกจากนี้หากสิ่งที่คุณต้องการคือรับกล่องขอบเขตของแต่ละแถวคุณสามารถใช้ST_Extent
และของปลอม GROUP BY
เช่นนี้:
SELECT ST_SetSRID(ST_Extent(the_geom),THE_SRID) as table_extent FROM your_table GROUP BY gid;
สมมติว่า gid เป็นคีย์หลักของตาราง
แต่ST_Envelopeจะทำงานได้ดีขึ้นตามที่ @ bugmenot123 ระบุไว้ในความคิดเห็น
SELECT ST_Envelope(geom) FROM your_table ;
ความเป็นไปได้อีกอย่างคือการใช้ST_Envelope
ฟังก์ชันซึ่งคืนค่าเรขาคณิตด้วย SRID
ST_Envelope - ส่งกลับรูปทรงเรขาคณิตที่เป็นตัวแทนของกล่องขอบเขตของรูปทรงเรขาคณิตที่ให้มา
พร้อมกับฟังก์ชั่นรวมที่ST_Union
จะได้รับการรวมกันของรูปทรงเรขาคณิตทั้งหมด (หรือสหภาพของซองจดหมายที่เกี่ยวข้อง) ดังนี้
SELECT ST_Envelope(ST_Union(geom)) AS table_extent FROM your_table
หรือ
SELECT ST_Envelope(ST_Union(ST_Envelope(geom))) AS table_extent FROM your_table
ตัวเลือกที่สองควรเร็วขึ้นเนื่องจากช่วยให้การดำเนินการสหภาพง่ายขึ้นโดยใช้ซองจดหมายของรูปทรงเรขาคณิตแต่ละแบบ
การไม่บังคับใช้การรวมตัวเชิงพื้นที่ควรเป็นวิธีที่เร็วกว่า:
select
min(ST_XMin(geom)) as l,
min(ST_YMin(geom)) as b,
max(ST_XMax(geom)) as r,
max(ST_YMax(geom)) as t
from x
ST_Envelope
! นั่นไม่ใช่สิ่งที่ถูกถาม