#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: VALENCE
- Date d'inscription: 6 Aug 2007
- Messages: 617
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
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: VALENCE
- Date d'inscription: 6 Aug 2007
- Messages: 617
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: VALENCE
- Date d'inscription: 6 Aug 2007
- Messages: 617
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