วิธีรับรูปทรงเรขาคณิตของตาราง PostGIS ที่ว่างเปล่า


10

ฉันมีเว็บแอปพลิเคชันที่จำเป็นต้องรู้ประเภทเรขาคณิตของเขตข้อมูล Geom ของตาราง PostGIS ก่อนที่จะแทรกแถวเข้าไป ฉันใช้แบบสอบถามต่อไปนี้เพื่อกำหนดประเภทเรขาคณิตของคอลัมน์ geom:

SELECT GeometryType(geom) FROM my_schema.building LIMIT 1

สิ่งนี้จะส่งกลับประเภทรูปทรงเรขาคณิตของแถวจริงดังนั้นจึงไม่ทำงานเมื่อตารางของฉันว่างเปล่า ฉันจะกำหนดประเภทเรขาคณิตของคอลัมน์เรขาคณิตได้อย่างไร

คำตอบ:


17

แบบสอบถามสามารถเรียกใช้กับgeometry_columnsตารางด้วยวิธีนี้

SELECT type 
FROM geometry_columns 
WHERE f_table_schema = 'my_schema' 
AND f_table_name = 'building' 
and f_geometry_column = 'geom';

(หรือหากคุณใช้ประเภทภูมิศาสตร์ให้ใช้geometry_columnsกับgeography_columnsและf_geometry_columnด้วยf_geography_column)


sql ในคำตอบจะกลับมาgeometryสำหรับประเภทในขณะที่เรายังไม่ทราบว่ารูปทรงเรขาคณิตนั้นเป็นจุดหรือเส้น
giser

1
ซึ่งหมายความว่าคอลัมน์รูปทรงเรขาคณิตของคุณถูกตั้งค่าเป็นประเภท "รูปทรงเรขาคณิต" (นั่นคือยอมรับรูปทรงเรขาคณิตทุกชนิด) ในกรณีนี้คุณจะต้องตรวจสอบรูปทรงเรขาคณิตแต่ละรูปแบบโดยใช้ ST_GeometryType
atlefren

SELECT GeometryType(geom) FROM my_schema.building LIMIT 1ชอบนี่เป็นโพสต์ OP ไหม มันไม่ทำงานหากตารางว่างเปล่า
giser

และอีกสิ่งหนึ่งถ้าคอลัมน์รูปทรงเรขาคณิตทั้งหมดถูกตั้งค่าให้geometryพิมพ์สำหรับตารางทั้งหมดฉันสามารถสร้างมุมมองที่มีตารางทั้งหมดที่อาจมีอยู่ได้points lines polyognหรือไม่
giser

1
ขวา. การเปรียบเทียบ: การประกาศว่าคอลัมน์ geom เป็นประเภท "เรขาคณิต" เป็นเหมือนการกำหนดลิ้นชักสำหรับถุงเท้าที่มีสีใด ๆ การตรวจสอบสีของถุงเท้าในลิ้นชักนี้เป็นไปไม่ได้เมื่อไม่มีสิ่งใดมาทำ
atlefren

3

มองหา geometry_columns ของตาราง คอลัมน์ทางภูมิศาสตร์ทั้งหมดที่มีรูปแบบ srid และรูปทรงเรขาคณิตจะลงทะเบียนที่นี่ หากมีคอลัมน์ที่มีประเภท GEOMETRY จะสามารถเก็บรูปทรงเรขาคณิตได้ทุกประเภท

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