Pages: 1
- Sujet précédent - [PostGIS2.0] Créer des (multiples) centroïdes de multipolygones - Sujet suivant
#1 Tue 12 March 2013 14:51
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3940
[PostGIS2.0] Créer des (multiples) centroïdes de multipolygones
Bonjour,
Je dispose d'une table de multipolygones et souhaiterais afficher sous QGis une étiquette à chacun des polygones de la table. L'option " étiqueter toutes les parties d'une entité multi-parties" de ABC fait bien le boulot. Cependant, sous chaque étiquette, au lieu d'un tampon, je souhaiterais avoir une pastille ronde, ce qui ne me semble pas possible à ce jour avec QGIS. Un démenti?
Je pense donc passer par la création d'une vue avec une géométrie point qui serait le "centroïde" de chacun des polygones et à laquelle je pourrais dès lors attribuer mon style rond et étiqueter. J'aurais donc besoin d'aide pour récupérer l'écriture adéquate car
Code:
select st_pointonsurface(geom)
génère un point par entité multipolygone. Or il faudrait que je puisse récupérer le point centroïde de chacun des polygones qui composent le multipolygone.
Merci d'avance pour les pistes éventuelles...
Hors ligne
#2 Tue 12 March 2013 15:10
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [PostGIS2.0] Créer des (multiples) centroïdes de multipolygones
Bonjour,
Il faut "dumper" la collection (MULTI*) en objets simples, puis appeler st_pointOnSurface sur chacun:
Code:
select st_pointOnSurface((st_dump(geom)).geom) as dump from departement; -- attention au double jeu de parenthese pour utiliser st_dump
Nicolas
Hors ligne
#3 Wed 13 March 2013 11:43
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3940
Re: [PostGIS2.0] Créer des (multiples) centroïdes de multipolygones
Bonjour Nicolas,
Merci pour le tuyau. Ça répond bien à ma demande, à ceci près que QGIs n'accepte pas ma table car, lors de "l'explosion", le "gid" n'est plus unique. Je n'ai pas trouvé comment récupérer les objets simples et leur attribuer un numéro unique en même temps. J'ai donc créé une vue intermédiaire qui récupère les objets simples de ma table puis je fais un st_pointonsurface sur celle-ci soit (pour reprendre ta table exemple):
Code:
create view dep_dump as select gid, insee, st_dump(geom) AS geom_dp from departement;
puis un
Code:
create view dep_pt as select row_number() OVER ()::integer AS num, insee, st_pointonsurface((geom_dp).geom) AS geom from dep_dump;
Si quelqu'un connait une requête qui fasse l'impasse sur la vue intermédiaire, je suis aussi preneur même si en l'état actuel des choses, je peux avancer sur mon projet.
Merci encore....
Hors ligne
#4 Wed 13 March 2013 12:12
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [PostGIS2.0] Créer des (multiples) centroïdes de multipolygones
Bonjour,
La sequence est votre amie
Definissez une sequence avant de creer la table, puis appelez cette sequence pour générer des id uniques.
(en passant par une vue, a chaque appel de la vue de nouvelles valeurs de la sequence seront générées)
Code:
create sequence pg_dump_sequence; create table dep_dump as select nextval('pg_dump_sequence') as new_gid, gid as old_gid, insee, st_dump(geom) AS geom_dp from departement;
Nicolas
Hors ligne
Pages: 1
- Sujet précédent - [PostGIS2.0] Créer des (multiples) centroïdes de multipolygones - Sujet suivant