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?

Tanneur
la source

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)

atlefren
la source
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.

wumpz
la source