#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
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
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
Cordialement
Thomas G
Hors ligne
#5 Sun 27 July 2008 11:54
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