Comment obtenir le type de géométrie d'une table PostGIS vide?


9

J'ai une application Web qui doit connaître le type de géométrie du champ geom d'une table PostGIS avant d'y insérer des lignes. J'utilise la requête suivante pour déterminer le type de géométrie de la colonne geom:

SELECT GeometryType(geom) FROM my_schema.building LIMIT 1

Cela renvoie le type de géométrie d'une ligne réelle, donc cela ne fonctionne pas lorsque ma table est vide. Comment déterminer le type de géométrie de la colonne de géométrie elle-même?

Réponses:


16

La requête peut être exécutée sur la geometry_columnstable de cette manière

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

(ou, si vous utilisez un type géographique , remplacez geometry_columnsavec geography_columnset f_geometry_columnavec f_geography_column)


Le sql dans la réponse retournera geometrypour le type, alors que nous ne pouvons toujours pas savoir si la géométrie est un point ou une ligne.
giser

1
Cela signifie que votre colonne de géométrie est définie sur le type de géométrie "géométrie" (c'est-à-dire qu'elle accepte toutes sortes de géométries). Dans ce cas, vous devrez vérifier chaque géométrie de manière induviduelle à l'aide de ST_GeometryType
atlefren

SELECT GeometryType(geom) FROM my_schema.building LIMIT 1comme ça comme poste OP? Cela ne fonctionne pas si la table est vide.
giser

Et encore une chose, si toute la colonne de géométrie est définie pour geometrytaper pour toute la table, puis-je créer une vue contenant toutes les tables qui peuvent contenir points lines polyogn?
giser

1
Droite. Une analogie: déclarer qu'une colonne geom est de type "géométrie", c'est comme désigner un tiroir pour des chaussettes de n'importe quelle couleur. Il est impossible de vérifier la couleur des chaussettes dans ce tiroir lorsqu'il est vide.
atlefren

3

Recherchez une table geometry_columns. Toutes les colonnes géographiques avec srid et le type de géométrie sont enregistrées ici. S'il existe une colonne de type GÉOMÉTRIE, tous les types de géométrie peuvent être stockés.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.