#1 Tue 18 May 2010 07:11
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3197
- 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
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: 3197
- 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: 3197
- 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 [/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: 1554
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 cecia.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 [/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
Nicolas
Hors ligne
#6 Thu 20 May 2010 09:34
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: 3197
- Site web
Re: PostGis Trouver la colonne géométrie dans une table
bonjour,
Merci pour vos indications.
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
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: 3197
- 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: 1554
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+
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
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