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 Sat 26 July 2008 13:47

diophamidou
Participant assidu
Date d'inscription: 18 Jan 2006
Messages: 243

connection sur une base postgres

Bonjour, j'ai créé une table à partir d'une sélection dans postgres (create table maselection as select...) de meme la vue (create view mavue as select...) j'ai fais une connection de ma base depuis qgis, je vois toutes les tables (shp) que j'avais importées dans ma base postgres sauf cette table issue d'une requête de même pour la vue malgré le rafraîchissement. Quelqu'un aurait-il une explication à ca?

Hors ligne

 

#2 Sat 26 July 2008 15:56

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

Re: connection sur une base postgres

Salut,

A priori, cela viens que tu n'as pas déclaré ta table issue du "create table maselection as select..." comme géométrique.
En effet, un "create table maselection as select..." te permet de récupérer les champs et leur valeur y compris the geom mais il ne déclare pas la nouvelle table créée comme géométrique c'est à dire ayant une entrée dans la table geometry_columns. Pour ce faire, tu peux faire tu tapes

Code:

SELECT AddGeometryColumn( ’maselection’, ’the_geom1’, 27572, ’POLYGON’, 2 );

avec maselection, le nom de ta table, the_geom1 la colonne qui contiendra l'attribut géométrie, 27572 le code EPSG de la projection utilisée, POLYGON, le type de géométrie existant dans ta table (POINT, POLYGON, MULTIPOLYGON, LINESTRING,...) et 2 la dimension de ta couche (genéralement 2 car 2D)

Cette manipulation a pour effet de déclarer ta table comme géométrique. Ensuite tu fais un

Code:

update maselection set the_geom1=the_geom

pour récupérer les valeurs de the_geom dans ton champ reconnu comme géométrique the_geom1.

Et normalement, dans ton Qgis, tu devrais voir les tables issues de ton "create table maselection as select..."

Pour les vues, je ne les ai pas encore beaucoup utilisé donc je peux pas t'aider.

ThomasG

PS: merci de faire part du retour d'expérience à la communauté.

Hors ligne

 

#3 Sun 27 July 2008 00:18

diophamidou
Participant assidu
Date d'inscription: 18 Jan 2006
Messages: 243

Re: connection sur une base postgres

1) Oui j'ai effectivement refait la requête qui suit :

create table t1 as select t.cl1,t2.cl2 from t,t2 where t.cl1='xxxxx' and intersects (buffer(t1.the_geom,20),t2.the_geom)
jusque la ca marche

puis la requette suivante : select AddGeometryColumn('t1','the_geom1',27572,'POLYGON',2)

la aussi j'ai obtenu un resultat

ensuite update t1 set the_geom1=the_geom et la voici l'erreur qu' je recois :ERROR: column "the_geom" does not exist. Et pourtant
État SQL :42703
Caractère : 27]

2) Comment je peux connaître le code EPSG utilisé est bien 27572

Merci de vos réponse

Hors ligne

 

#4 Sun 27 July 2008 01:27

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

Re: connection sur une base postgres

Salut,

1)Normal que tu ais cette erreur : tu n'as pas récupéré un champ avec la valeur géométrique dans ton

create table t1 as select t.cl1,t2.cl2 from t,t2 where t.cl1='xxxxx' and intersects (buffer(t1.the_geom,20),t2.the_geom)


Ton code dit que tu veux récupérer les attributs cl1 de la table t et cl2 de la table t2 mais où est l'attribut qui contient la géométrie?

Tu devrais avoir si tu veux la géométrie des objets de la table t2

Code:

create table t1 as select t.cl1,t2.cl2,t2.the_geom from t,t2 where t.cl1='xxxxx' and intersects (buffer(t.the_geom,20),t2.the_geom)

ou si tu veux la géométrie des objets de la table t

Code:

create table t1 as select t.cl1,t2.cl2,t.the_geom from t,t2 where t.cl1='xxxxx' and intersects (buffer(t.the_geom,20),t2.the_geom)

J'ai corrigé dans les deux cas le buffer(t1.the_geom,20) par buffer(t.the_geom,20) car tu peux pas créer une table en faisant appel à elle-même. (sauf erreur)

Après tu utilises le SELECT AddGeometryColumn( ’maselection’, ’the_geom1’, 27572, ’POLYGON’, 2 );

2)Pour ta question, je t'ai donné pour exemple le lambert II étendu qui a pour code EPSG 27572 mais si tu veux déclarer ta couche dans la bonne projection (celle des tes shapes originaux) tu dois chercher la correspondance sur http://spatialreference.org/ ou bien en regardant dans Qgis les projections.

Tu sembles avoir encore un peu de mal avec Postgis. Tu es allé voir le guide de Postgis.fr à l'adresse ci-dessous?
www.davidgis.fr/documentation/win32/pdf/doc.pdf
Il t'expliquera la plupart des choses dont je te parle dans ce post en mieux wink

Cordialement

Thomas G

Hors ligne

 

#5 Sun 27 July 2008 11:54

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9855
Site web

Re: connection sur une base postgres

Bonjour,

Le UPDATE  the_geom1=the_geom; ainsi que le SELECT AddGeometryColumn(); ne servent à rien, tu peux déclarer ta colonne géométrique après coup avec un :

Code:

INSERT INTO geometry_colum VALUES ('','public','maselection','the_geom',27572,2);

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

Pied de page des forums

Powered by FluxBB