Как получить тип геометрии пустой таблицы 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как это как пост ОП? Это не работает, если таблица пуста.
Кайзер

И еще одна вещь, если для всех столбцов геометрии задан geometryтип для всей таблицы, могу ли я создать представление, содержащее все таблицы, которые могут содержать points lines polyogn?
Кайзер

1
Правильно. Аналогия: объявление о том, что столбец geom имеет тип «геометрия», похоже на назначение ящика для носков любого цвета. Проверить, какого цвета носки в этом ящике, невозможно, когда он пуст.
atlefren

3

Ищите таблицу geometry_columns. Все географические столбцы с типом srid и geometry зарегистрированы здесь. Если есть столбец с типом GEOMETRY, то все типы геометрии могут быть сохранены.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.