#1 Wed 23 May 2007 16:38
- SangJun
- Participant occasionnel
- Date d'inscription: 23 May 2007
- Messages: 12
QGIS et PostgreSQL
Bonjour,
J'espère que je poste dans la bonne rubrique, si ce n'est pas le cas, je m'en excuse par avance.
J'essaye de calculer une zone autour d'une (multi)ligne sur un SIG.
Je pensais m'en sortir avec un buffer, mais cela ne correspond pas à ma demande.
Pour faire simple, ce que j'aimerai avoir c'est :
[img]http://www.hebergement-images.com/06/1179929327_exemple.jpg[/img]
La ligne centrale étant le chemin.
J'ai essayé (pour voir le résultat que j'aurai obtenu) :
CREATE TABLE Essai as select MemGeomUnion(buffer) from buffer2030;
alter table Essai add gid serial;
alter table Essai add primary key (gid);
Mais Quantum GIS se ferme lorsque je souhaite visualiser le résultat.
Quelqu'un pourrait-il m'aider svp?
Merci
Hors ligne
#2 Wed 23 May 2007 16:44
Re: QGIS et PostgreSQL
Bonjour,
QGIS ne permet pas de lancer une requête SQL sauf lors du chargement de données, dans ce cas là c'est un select (CLAUSE SELECT WHERE)
[Edit] je précise un peu : pour faire cela, vous pouvez passer par une console avec psql -d nomBase -U postgres -c "CREATE TABLE ..."
La prochaine version de QGIS améliorera la gestion de postgis.
Y.
Dernière modification par Yves (Wed 23 May 2007 16:45)
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
#3 Wed 23 May 2007 20:24
Re: QGIS et PostgreSQL
Bonjour,
Avec quelle version de Qgis travailles-tu ?
La géométrie de la table Essai que tu crée est de quel type ?
Au boulot, j'ai une version de qgis qui ferme direct, comme toi, si j'essai d'ouvrir une table dont la géométrie est de type geometry. Mais je n'ai pas la version en tête. Les versions que j'ai sous la main (0.8 et 0.81) affiche un message d'erreur donc je ne peux pas verifier que c'est bien cela.
A+
Hors ligne
#4 Wed 23 May 2007 21:44
Re: QGIS et PostgreSQL
Bonjour,
QGIS ne gère pas le type geometry
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
#5 Thu 24 May 2007 10:29
- SangJun
- Participant occasionnel
- Date d'inscription: 23 May 2007
- Messages: 12
Re: QGIS et PostgreSQL
Je lance mes requêtes par pgAdmin III.
Qu'appeles-tu géométrie de table?
CREATE TABLE essai
(
memgeomunion geometry,
gid int4 NOT NULL DEFAULT nextval('essai_gid_seq'::regclass),
CONSTRAINT essai_pkey PRIMARY KEY (gid)
)
WITHOUT OIDS;
ALTER TABLE essai OWNER TO fsauvage;
Cela répond-t-il à ta question?
Ma version de qgis est la 0.7.4
Hors ligne
#6 Thu 24 May 2007 10:34
- SangJun
- Participant occasionnel
- Date d'inscription: 23 May 2007
- Messages: 12
Re: QGIS et PostgreSQL
@ Yves : Je ne comprend pas ta réponse. En effet, ma table Buffer s'affiche, alors que son type est :
CREATE TABLE buffer2030
(
gid int4 NOT NULL,
buffer geometry,
CONSTRAINT buffer2030_pkey PRIMARY KEY (gid)
)
WITHOUT OIDS;
ALTER TABLE buffer2030 OWNER TO fsauvage;
Hors ligne
#7 Thu 24 May 2007 11:04
Re: QGIS et PostgreSQL
Bonjour,
Essaye avec un WITH OIDS; à la place de WITHOUT OIDS;
Quand tu dis que ta table s'affiche, tu parles dans pgAdmin, pas dans QGIS ? Il me semble, mais je peut me tromper, que QGIS ne gérant pas ce type de géométrie (geometry, il gère seulement les type (MULTI)Polygon, point et line) il aura tendance à planter
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
#8 Thu 24 May 2007 11:07
Re: QGIS et PostgreSQL
Qu'appeles-tu géométrie de table?
Il parle de memgeomunion geometry, tu peux définir un autre type de géometrie : MULTIPOLYGON par exemple (ce que je te conseil)
Y.
Dernière modification par Yves (Thu 24 May 2007 11:08)
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
#9 Thu 24 May 2007 11:52
- SangJun
- Participant occasionnel
- Date d'inscription: 23 May 2007
- Messages: 12
Re: QGIS et PostgreSQL
ma table buffer2030 s'affiche dans qgis et un select gid, astext(buffer) from buffer2030;
m'affiche des résultats de type : 130546;"POLYGON((3.55758651896317 50.407053429159,3.55708285671878 50.4067498022559,3.55652963753288 50.406550269088,3.55594812130853 50.4064624976031,3.55536065538812 50.4064898608101,3.55478981575751 50.4066313071564,3.55425753946359 50.4068814009381,3.553784281 (..)"
tandis que select gid, astext(memgeomunion) from essaiu; m'affiche des résultats de type : 1;"POLYGON((3.55956587428577 50.4085222612187,3.5595877798921 50.408335560334,3.55954104353758 50.4077493174953,3.55938083490484 50.4071834569588,3.55911331072177 50.4066597244277,3.55874875179271 50.4061982466492,3.55830116791285 50.4058167579558,3.557787759 (..)" mais fait planter QGIS
De plus, j'ai effectué
drop table EssaiInter;
CREATE TABLE EssaiInter AS select intersection(B1.the_geom,B2.buffer) from buildup B1, buffer2030 B2 where isempty(intersection(B1.the_geom,B2.buffer))=false;
alter table EssaiInter add gid serial;
alter table EssaiInter add primary key (gid);
au résultat similaire (POLYGON) et j'obtiens le même plantage.
Hors ligne
#10 Thu 24 May 2007 14:34
Re: QGIS et PostgreSQL
Bonjour,
Vous pouvez essayer de voir si vos polygones sont valides avec la fonction isvalid(). Sinon je n'ai pas d'autres pistes pour l'instant.
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
#11 Thu 24 May 2007 15:00
- SangJun
- Participant occasionnel
- Date d'inscription: 23 May 2007
- Messages: 12
Re: QGIS et PostgreSQL
select gid, isvalid(intersection) from essaiinter;
select gid, isvalid(memgeomunion) from essai;
Seconde colonne : t
:'(
Hors ligne
#12 Thu 24 May 2007 17:57
Re: QGIS et PostgreSQL
Bon je commence à peine à comprendre le problème :
Tu as une table buffer2030 qui s'affiche dans QGIS. Ta requête :
CREATE TABLE Essai AS SELECT MemGeomUnion(buffer) FROM buffer2030;
alter table Essai add gid serial;
alter table Essai add primary key (gid);
Tente de faire une Union sur toute des géométries pour en faire une seule. Elle fonctionne et renvoie des objets valides par contre QGIS plante quand tu essayes de la charger.
Tu utilises QGIS 0.7.4 ce qui n'est pas la version la plus récente (tente une mise à jour
La table buffer2030 est :
CREATE TABLE buffer2030
(
gid int4 NOT NULL,
buffer geometry,
CONSTRAINT buffer2030_pkey PRIMARY KEY (gid)
)
WITHOUT OIDS;
ALTER TABLE buffer2030 OWNER TO fsauvage;
Ai je bien résumé ton problème ?
Quelle est ta version de postgis ? Un geomUnion à la place de MemGeomUnion donne quoi ?
Y.
Dernière modification par Yves (Thu 24 May 2007 17:57)
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
#13 Thu 24 May 2007 18:37
Re: QGIS et PostgreSQL
Pour continuer sur la piste du champs de type geometry.
Quand tu crée ta table ... tu lui passe aussi les trois commandes suivantes :
select addgeometrycolumn ('Essai','geom',0,'MULTIPOLYGON',2);
update Essai set geom=geometry;
select dropgeometrycolumn('Essai','geometry');
Tu ajoute une colonne geometrique de type MULTIPOLYGON... tu rempli avec le contenu de ta colonne et tu supprimes l'ancienne colonne...
... J'aurai préféré une colonne de type alter geometry columns... mais j'ai pas trouvé.!!!
Normalement cela devrait être bon...
Hors ligne
#14 Fri 25 May 2007 10:21
- SangJun
- Participant occasionnel
- Date d'inscription: 23 May 2007
- Messages: 12
Re: QGIS et PostgreSQL
Bon je commence à peine à comprendre le problème :
Tu as une table buffer2030 qui s'affiche dans QGIS. Ta requête :CREATE TABLE Essai AS SELECT MemGeomUnion(buffer) FROM buffer2030;
alter table Essai add gid serial;
alter table Essai add primary key (gid);
Tente de faire une Union sur toute des géométries pour en faire une seule. Elle fonctionne et renvoie des objets valides par contre QGIS plante quand tu essayes de la charger.
Tu utilises QGIS 0.7.4 ce qui n'est pas la version la plus récente (tente une mise à jour
La table buffer2030 est :CREATE TABLE buffer2030
(
gid int4 NOT NULL,
buffer geometry,
CONSTRAINT buffer2030_pkey PRIMARY KEY (gid)
)
WITHOUT OIDS;
ALTER TABLE buffer2030 OWNER TO fsauvage;
Ai je bien résumé ton problème ?
Quelle est ta version de postgis ? Un geomUnion à la place de MemGeomUnion donne quoi ?
Y.
Pour mettre à jour, je vais voir, je ne suis pas admin de ma machine, je ne peux rien installer.
GeomUnion et MemGeomUnion me renvoie le même problème.
Hors ligne
#15 Fri 25 May 2007 10:30
- SangJun
- Participant occasionnel
- Date d'inscription: 23 May 2007
- Messages: 12
Re: QGIS et PostgreSQL
Pour continuer sur la piste du champs de type geometry.
Quand tu crée ta table ... tu lui passe aussi les trois commandes suivantes :
select addgeometrycolumn ('Essai','geom',0,'MULTIPOLYGON',2);
update Essai set geom=geometry;
select dropgeometrycolumn('Essai','geometry');
Tu ajoute une colonne geometrique de type MULTIPOLYGON... tu rempli avec le contenu de ta colonne et tu supprimes l'ancienne colonne...
... J'aurai préféré une colonne de type alter geometry columns... mais j'ai pas trouvé.!!!
Normalement cela devrait être bon...
J'ai suivi tes recommandations, mais dès la première ligne, je me retrouve avec
ERROR: relation "public.Essai" does not exist
CONTEXT: SQL statement "ALTER TABLE public."Essai" ADD COLUMN geom geometry "
PL/pgSQL function "addgeometrycolumn" line 76 at execute statement
SQL statement "SELECT AddGeometryColumn('','', $1 , $2 , $3 , $4 , $5 )"
PL/pgSQL function "addgeometrycolumn" line 4 at select into variables
Etant plutôt novice, je me sens un peu perdu
Dernière modification par SangJun (Fri 25 May 2007 10:31)
Hors ligne
#16 Fri 25 May 2007 10:46
- SangJun
- Participant occasionnel
- Date d'inscription: 23 May 2007
- Messages: 12
Re: QGIS et PostgreSQL
C'est bon, je suis parvenu à mes fins avec :
DROP TABLE Essai;
CREATE TABLE Essai as select MemGeomUnion(buffer) from buffer2030;
alter table Essai add gid serial;
alter table Essai add primary key (gid);
drop table EssaiInter;
CREATE TABLE EssaiInter AS select B.gid, memgeomunion(intersection(B.the_geom,E.memgeomunion)) from buildup B, Essai E where isempty(intersection(B.the_geom,E.memgeomunion))=false GROUP BY B.gid;
alter table EssaiInter add primary key (gid);
J'ai donc l'intersection entre le buffer et buildup.
Bon, maintenant il ne me reste plus qu'à échanger la fonction buffer par une fonction qui me retournera l'image que j'ai mise dans mon premier post.
Hors ligne
#17 Fri 25 May 2007 10:49
Re: QGIS et PostgreSQL
Bonjour,
Le problème vient de la majuscule dans Essai :
select addgeometrycolumn ('essai','geom',0,'MULTIPOLYGON',2);
update essai set geom=geometry;
select dropgeometrycolumn('essai','geometry');
Le problème de l'absence d'entré dans la table geometry est bien vu ;-)
À ce sujet lire la FAQ de postgis (section 3.6) Pourquoi dois je utiliser la fonction AddGeometryColumn() et toutes les autres fonctions de l'OpenGIS ?
sur le site postgis.fr (onglet Manuel). http://www.postgis.fr/node/168
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
#18 Fri 25 May 2007 11:39
- SangJun
- Participant occasionnel
- Date d'inscription: 23 May 2007
- Messages: 12
Re: QGIS et PostgreSQL
Bonjour,
Le problème vient de la majuscule dans Essai :select addgeometrycolumn ('essai','geom',0,'MULTIPOLYGON',2);
update essai set geom=geometry;
select dropgeometrycolumn('essai','geometry');
Le problème de l'absence d'entré dans la table geometry est bien vu ;-)
À ce sujet lire la FAQ de postgis (section 3.6) Pourquoi dois je utiliser la fonction AddGeometryColumn() et toutes les autres fonctions de l'OpenGIS ?
sur le site postgis.fr (onglet Manuel). http://www.postgis.fr/node/168
Y.
Vu que les tables que j'utilise sont le résultat de tables déjà existantes, je pense que je n'ai pas besoin d'AddGeometryColumn() (du moins pour le moment), non?
Hors ligne
#19 Tue 29 May 2007 12:35
- SangJun
- Participant occasionnel
- Date d'inscription: 23 May 2007
- Messages: 12
Re: QGIS et PostgreSQL
La ligne CREATE TABLE EssaiL as select MemGeomUnion(buffer) from bufferLong;
me renvoie comme erreur NOTICE: TopologyException: no outgoing dirEdge found
(3.84808,50.2911,50.2911) ERROR: GEOS union() threw an error!
Erreur que je ne comprend pas. Pourriez-vous m'expliquer ce que cela signifie?
Hors ligne
#20 Thu 14 June 2007 10:15
- SangJun
- Participant occasionnel
- Date d'inscription: 23 May 2007
- Messages: 12
Re: QGIS et PostgreSQL
Dans le même genre d'erreur, une de mes requêtes dans PostGIS me renvoie sans cesse :
Code:
NOTICE: TopologyException: no outgoing dirEdge found (3.07069,50.2997,50.2997) SELECT failed: ERROR: GEOS union() threw an error! maRequete= select GeomUnion(GeomFromText('POLYGON((3.064484 50.307842, 3.076605 50.291935, 3.076635 50.291958, 3.064514 50.307865, 3.064484 50.307842))'),'0103000000010000002500000095110D8268900840EB857D1B6226494065C5707500840840310BED9C6627494010ECF82F10840840E92ADD5D67274940D50500ADAC9008401B01558F5E2649407C596AA5A1910840009E184957264940946934B918A30840C576F700DD25494061C43E0114A308404E469561DC2549409835197DDF920840A415E5D84D264940EACE13CFD9A20840B743C362D4254940B7291E17D5A20840401361C3D3254940D33D81149A910840DFD35BBF562649401DED01CEC49008407EA0AE945C264940E5DD596BD490084014FACF4C5B2649400C40A374E99F084095F3C5DE8B254940BCE9961DE29F08405FB2F1608B254940BFECCD3EF39008404D568AC55826494003D29BEA16910840A34B88D85526494086FF7403059E0840274A42226D2549402672C119FC9D0840228D0A9C6C254940D784792179910840BE4344CA4D2649403EAE0D15E39C084065C746205E2549409487855AD39C0840ADA7565F5D2549406BC4EAB8CA900840067E390D5A2649408C04149994900840B84E57DB5D264940F4AFABFC92900840BBA67FF15D2649407C6308008E7D08400F2A711DE3264940A94BC631927D0840865AD3BCE3264940FC77D7715C900840394FFC2D60264940878BDCD3D57D0840DA39CD02ED264940BA30D28BDA7D0840516A2FA2ED26494055886B97599008400DD8ED0661264940E25817B7D1800840A9FB00A4362749402CF2EB87D8800840DE3CD521372749402D8F4D0160900840CBDCE48D6126494012C0CDE2C582084080272D5C56274940724D81CCCE82084086E464E25627494095110D8268900840EB857D1B62264940')
Les 2 éléments dans la fonction GeomUnion sont de type geometry (plus exactement des polygones) et ils sont valides. J'effectue plusieurs fois cette opération avec d'autres valeurs mais là ça bloque.
J'ai beau chercher je reste bloqué.
J'espère que quelqu'un pourra m'aider
Hors ligne
#21 Tue 19 June 2007 09:54
- SangJun
- Participant occasionnel
- Date d'inscription: 23 May 2007
- Messages: 12
Re: QGIS et PostgreSQL
Le problème venait de la version de GEOS
Hors ligne