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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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 wink

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

 

Pied de page des forums

Powered by FluxBB