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 Mon 07 October 2013 12:01

Thomas Williamson
Participant actif
Lieu: Poitiers
Date d'inscription: 16 Nov 2008
Messages: 92

PostGIS : fonction ST_Centroid

Bonjour,

Je cherche à obtenir le centroïde d'un ensemble de points. Les points sont stockés dans une table PostgreSQL (la colonne the_geom stocke la géométrie). J'applique la requête suivante mais elle me renvoie toutes les lignes de ma table :

Code:

SELECT ST_Centroid(the_geom) FROM (SELECT the_geom FROM schema.table) AS the_geom;

Quelqu'un peut-il m'aider à identifier ce qui cloche ?

Merci beaucoup !

Thomas

Hors ligne

 

#2 Mon 07 October 2013 12:14

ppluvinet
Participant assidu
Lieu: LYON
Date d'inscription: 6 Aug 2007
Messages: 608

Re: PostGIS : fonction ST_Centroid

Bonjour,
Pouvez-vous préciser : vous souhaitez chercher le controide de chaque polygone ou vous souhaitez trouver le point moyen d'un ensemble de points ? Le centroide est généralement appliquer à un polygone.

Si vous souhaitez cherhcer le point moyent il suffit de faire quelque chose du genre :

Code:

select st_makepoint(avg(st_X(the_geom)), avg(st_Y(the_geom))) from schema.matable

Dernière modification par ppluvinet (Mon 07 October 2013 12:14)


Pascal PLUVINET

Hors ligne

 

#3 Mon 07 October 2013 13:05

Thomas Williamson
Participant actif
Lieu: Poitiers
Date d'inscription: 16 Nov 2008
Messages: 92

Re: PostGIS : fonction ST_Centroid

Bonjour,

Merci pour votre réponse. Je souhaite trouver le point moyen d'un ensemble de points. Or, il semble que la fonction St_Centroid le fasse directement, sans avoir à séparer X et Y et en faire individuellement la moyenne... Voir la doc officielle : http://postgis.org/docs/ST_Centroid.html mais je n'arrive pas à la mettre en pratique.

Merci encore !

Thomas

Dernière modification par Thomas Williamson (Mon 07 October 2013 13:05)

Hors ligne

 

#4 Mon 07 October 2013 13:22

cbredel
Participant actif
Lieu: Agape Lorraine Nord
Date d'inscription: 20 Feb 2006
Messages: 99
Site web

Re: PostGIS : fonction ST_Centroid

Bonjour,

le st_centroid retourne le centroide d'un objet multipoint.
Il faut donc que réunir tes points pour en créer un objet multipoint puis calculer le centroïde de ce multipoint.
En faisant comme ci-dessous, cela devrait fonctionner.

Code:

select st_centroid(st_union(the_geom)) FROM schema.table

Dernière modification par cbredel (Mon 07 October 2013 13:23)

Hors ligne

 

#5 Mon 07 October 2013 13:42

Thomas Williamson
Participant actif
Lieu: Poitiers
Date d'inscription: 16 Nov 2008
Messages: 92

Re: PostGIS : fonction ST_Centroid

Bonjour,

Merci, les deux méthodes marchent mais ne renvoient pas le même résultat... Une idée sur la différence de traitement entre les deux ?

Thomas

Hors ligne

 

#6 Mon 07 October 2013 14:15

ppluvinet
Participant assidu
Lieu: LYON
Date d'inscription: 6 Aug 2007
Messages: 608

Re: PostGIS : fonction ST_Centroid

Si vous faites un st_union, les points qui sont identiques ne forment plus qu'1.
Alors que si on passe par la moyenne des X et Y, deux points identiques sont comptés deux fois !
C'est peut-être une piste de réflexion, je n'ai pas examiné en détail la fonction st_centroid.

Peut-être faudrait -il utiliser st_collect au lieu de st_union ?

Pas essayé...

Dernière modification par ppluvinet (Mon 07 October 2013 14:15)


Pascal PLUVINET

Hors ligne

 

#7 Mon 14 October 2013 15:24

Thomas Williamson
Participant actif
Lieu: Poitiers
Date d'inscription: 16 Nov 2008
Messages: 92

Re: PostGIS : fonction ST_Centroid

Bonjour,

Je relance ce sujet, ayant à présent besoin de tenir compte d'une valeur (pondération) pour chaque point... Je ne trouve pas de fonctions PostGIS permettant de spécifier cela. Quelqu'un aurait-il une idée sur la question ?

Merci encore !

Thomas

Hors ligne

 

#8 Mon 14 October 2013 16:56

ppluvinet
Participant assidu
Lieu: LYON
Date d'inscription: 6 Aug 2007
Messages: 608

Re: PostGIS : fonction ST_Centroid

Si vous avez une colonne nommé POND pour la pondération, alors je ferais ceci :

Code:

select st_makepoint(
sum(st_X(the_geom)*POND)/ sum(POND) ,sum(st_Y(the_geom)*POND)/ sum(POND) 
) 
from schema.matable

Dernière modification par ppluvinet (Mon 14 October 2013 16:59)


Pascal PLUVINET

Hors ligne

 

#9 Wed 30 October 2013 11:10

Thomas Williamson
Participant actif
Lieu: Poitiers
Date d'inscription: 16 Nov 2008
Messages: 92

Re: PostGIS : fonction ST_Centroid

Bonjour,

Merci, je viens de tester votre formule et le résultat me semble cohérent. Curieux qu'il n'existe pas de fonctions PostGIS permettant d'effectuer ce type de calcul (prise en compte d'une pondération sur des points)...

Thomas

Hors ligne

 

Pied de page des forums

Powered by FluxBB