Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Tue 18 May 2010 07:11

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3169
Site web

PostGis Trouver la colonne géométrie dans une table

Bonjour,

Je suis un peu perdu ...

Est-il possible via une requête SQL de déterminer quelle est la colonne d'une table qui contient la géométrie ?

Le connecteur npgsql renvoyant une chaîne de caractères, il est difficile de déterminer à coup sur quelle est la colonne contenant la géométrie.

A+


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#2 Tue 18 May 2010 09:34

ThomasG
Membre
Lieu: Nantes
Date d'inscription: 9 Sep 2005
Messages: 943
Site web

Re: PostGis Trouver la colonne géométrie dans une table

Bonjour,

Pour une table

Code:

select f_table_name,f_geometry_column from geometry_columns where f_table_name='votre_table'

Pour plusieurs tables

Code:

select f_table_name,f_geometry_column from geometry_columns where f_table_name='votre_table'

Cela marche à condition que votre table geometry_columns soit bien renseignée

Si vous ne souhaitez pas passer par une autre table (geometry_columns) pour tester la colonne qui contient la géométrie

Code:

SELECT
    a.attname as "Column",
    pg_catalog.format_type(a.atttypid, a.atttypmod) as "Datatype"
FROM
    pg_catalog.pg_attribute a
WHERE
    a.attnum > 0
    AND NOT a.attisdropped
    AND a.attrelid = (
        SELECT c.oid
        FROM pg_catalog.pg_class c
            LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
        WHERE c.relname ~ '^(bv_loire)$'
            AND pg_catalog.pg_table_is_visible(c.oid)
    ) AND (pg_catalog.format_type(a.atttypid, a.atttypmod)='geometry' OR pg_catalog.format_type(a.atttypid, a.atttypmod) = 'geography')
;

Ce code suppose que vous n'ayez qu'un champ geometry ou geography dans votre table

Cordialement

ThomasG

Dernière modification par ThomasG (Tue 18 May 2010 09:35)

Hors ligne

 

#3 Tue 18 May 2010 09:43

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3169
Site web

Re: PostGis Trouver la colonne géométrie dans une table

Bonjour,

Merci pour cette réponse, je testerai ce soir et reviendrai ici si j'ai besoin de compléments.


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#4 Thu 20 May 2010 07:31

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3169
Site web

Re: PostGis Trouver la colonne géométrie dans une table

Bonjour,

Je viens de tester la dernière formule sous PGAdmin ça marche, mais comme je n'aime pas le copier coller et que j'aime comprendre j'ai essayer de découper la requête et de voir à quoi cela correspond ! J'avoue ne pas tout comprendre!  Particulièrement ceci

a.attnum > 0
    AND NOT a.attisdropped
    AND a.attrelid = (
        SELECT c.oid
        FROM pg_catalog.pg_class c
            LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace


En fait quel est le meilleur endroit où trouver la doc relative à pg_catalog ?


[Edit] j'ai trouvé ici , il y a des fois où je mériterai de me modérer wink [/Edit]

A+


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#5 Thu 20 May 2010 08:59

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1536

Re: PostGis Trouver la colonne géométrie dans une table

Christophe V. a écrit:

Bonjour,

Je viens de tester la dernière formule sous PGAdmin ça marche, mais comme je n'aime pas le copier coller et que j'aime comprendre j'ai essayer de découper la requête et de voir à quoi cela correspond ! J'avoue ne pas tout comprendre!  Particulièrement ceci

a.attnum > 0
    AND NOT a.attisdropped
    AND a.attrelid = (
        SELECT c.oid
        FROM pg_catalog.pg_class c
            LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace


En fait quel est le meilleur endroit où trouver la doc relative à pg_catalog ?


[Edit] j'ai trouvé ici , il y a des fois où je mériterai de me modérer wink [/Edit]

A+


Sinon, la table geometry_columns est prevue par la norme OGC exactement dans ce but: interroger de facon normée la base de données pour connaitre la liste des tables geometriques, et leurs colonnes.

Il me semble etre une bonne pratique, voire tres bonne, de rendre systematique l'enregistrement des tables spatiales dans cette table geometry_columns.

Il existe dans les versions recentes de Pgis (1.4, 1.5) des fonctions de gestion des metadonnées qui permettent de renseigner a posteriori cette table, ou de la corriger en fonction de l'evolution de la structure des tables.

My 2 cents wink

Nicolas

Hors ligne

 

#6 Thu 20 May 2010 09:34

ThomasG
Membre
Lieu: Nantes
Date d'inscription: 9 Sep 2005
Messages: 943
Site web

Re: PostGis Trouver la colonne géométrie dans une table

Bonjour,

Pour continuer le propos de Nicolas, sur

Il existe dans les versions recentes de Pgis (1.4, 1.5) des fonctions de gestion des metadonnées qui permettent de renseigner a posteriori cette table, ou de la corriger en fonction de l'evolution de la structure des tables.


se rendre sur http://postgis.refractions.net/docs/ref … _Functions et voir les fonctions contenant le nom Geometry dans leur appellation (chapitre 7.2)

Cordialement

ThomasG

Hors ligne

 

#7 Thu 20 May 2010 10:03

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3169
Site web

Re: PostGis Trouver la colonne géométrie dans une table

bonjour,

Merci pour vos indications.

Nicolas Ribot a écrit:

Il me semble etre une bonne pratique, voire tres bonne, de rendre systematique l'enregistrement des tables spatiales dans cette table geometry_columns.


Oui, mais comme mon idée est d'écrire un programme en .NET qui permet de se connecter à PostGis et d'afficher la géométrie (entre autre) je ne peux supposer de la bonne pratique de l'utilisateur! Si le programme n'était destiné qu'à une utilisation personnelle, ça me poserait moins de soucis!


[Edit] Je viens déjà de remporter une petite victoire en arrivant à lire directement le EWKB et à le transformer en objet graphiques ...[/Edit]

A+


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#8 Thu 20 May 2010 12:13

ThomasG
Membre
Lieu: Nantes
Date d'inscription: 9 Sep 2005
Messages: 943
Site web

Re: PostGis Trouver la colonne géométrie dans une table

Bonjour,

Sans connaître le besoin, pourquoi ne pas passer par SharpMap
ex : http://www.atolcd.com/btn-ll/systeme-di … rpmap.html

ou les CSharp bindings for GDAL
http://trac.osgeo.org/gdal/wiki/GdalOgrInCsharp

Regarder aussi du côté du "State of Open Source GIS" de P.Ramsey
http://2007.foss4g.org/presentations/vi … hment_id=8
pour en savoir plus sur les librairies (conseil théorique, je n'utilise pas du .Net)

J'ai tendance à m'appuyer sur des librairies existantes plutôt que redévelopper ce qui existe (mais je répète que je connais pas le besoin...)

Cordialement

ThomasG

Hors ligne

 

#9 Thu 20 May 2010 12:43

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3169
Site web

Re: PostGis Trouver la colonne géométrie dans une table

Bonjour,

Merci pour les liens, Thomas, j'en connaissais certains. (je réfléchis fortement à intégrer GDal dans mes applis)

Pour la connexion à POSTGIS je m'appuie sur Npgsql. Pour le reste j'avoue que l'histoire du Java basculé sous .Net ne me plait pas beaucoup.
Il y a plusieurs aspects en fait pour ma problématique.

Le premier est que je développe professionnellement des applis très spécifiques et donc j'aime à pouvoir inclure mes propres classes. De surcroit j'ai déjà écrit pas mal de code d'assez bas niveau relativement à la programmation graphique sous windows, donc me connecter à POSTGIS par mes propres moyens est un plus.

Le second, j'aime bien chercher et comprendre, donc s'attaquer par le code à des formats standards comme le WBB ou le shape, c'est plaisant (et ça c'est fait !).

Troisièmement, ce travail est aussi destiné à réaliser en .Net un intégrateur de données cadastrales selon le modèle décrit sur mon site web, tant pour le graphique que le littéral.

Et avouons le il y a un peu d'orgueil intellectuel dans tout ça.


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#10 Thu 20 May 2010 13:53

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1536

Re: PostGis Trouver la colonne géométrie dans une table

Christophe V. a écrit:

bonjour,

Merci pour vos indications.

Nicolas Ribot a écrit:

Il me semble etre une bonne pratique, voire tres bonne, de rendre systematique l'enregistrement des tables spatiales dans cette table geometry_columns.


Oui, mais comme mon idée est d'écrire un programme en .NET qui permet de se connecter à PostGis et d'afficher la géométrie (entre autre) je ne peux supposer de la bonne pratique de l'utilisateur! Si le programme n'était destiné qu'à une utilisation personnelle, ça me poserait moins de soucis!


[Edit] Je viens déjà de remporter une petite victoire en arrivant à lire directement le EWKB et à le transformer en objet graphiques ...[/Edit]

A+


Felicitations !

Concernant votre cas d'utilisation, effectivement, les deux approches peuvent se justifier:

1°) un programme generique qui ne presuppose pas la completude de la base au niveau des metadonnées OGC (renseignement geometry_columns): il marche meme qd le createur de la base n'a pas ete tres "propre"
C'est l'approche uDig, gvSig je crois.

2°) Tables non vues par le programme si elles ne sont pas decrites dans geometry_columns. Le programme est alors moins generique, mais force les gens a respecter la norme smile

Sinon, je vois que dans le code d'une appli se connectant a postgis (allez, un petit coup de pub au passage: c'est un peu vieux, mais bon: www.geojava.org), je fais desormais ca comme requete pour connaitre les table geographiques:

SELECT DISTINCT table_name, table_schema
FROM information_schema.columns
WHERE udt_name = 'geometry'
ORDER BY table_schema, table_name

Ca utilise le catalogue information_schema, qui est un standard SQL, mais qui a l'avantage d'etre maintenu a jour automatiquement par PG.


Nicolas

Hors ligne

 

Pied de page des forums

Powered by FluxBB