Як отримати тип геометрії порожньої таблиці PostGIS?


10

У мене є веб-додаток, який повинен знати тип геометрії поля геометрії таблиці 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як це посада в ОП? Це не працює, якщо таблиця порожня.
giser

І ще одне, якщо geometryдля всіх таблиць встановлено тип стовпця з геометрією , чи можу я створити подання, яке містить усі таблиці, які можуть містити points lines polyogn?
giser

1
Правильно. Аналогія: заявляти, що колонка з геометрією має тип "геометрія" - це як позначення ящика для шкарпеток будь-якого кольору. Перевірити, який колір шкарпетки є в цій шухляді, неможливо, коли він порожній.
атлефрен

3

Шукайте геометрію стовпців таблиці. Тут реєструються всі геоколони типу srid та геометрії. Якщо є стовпець з типом GEOMETRY, там можуть зберігатися всі типи геометрії.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.