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 Tue 18 July 2017 16:06

Jean-Marc68
Participant occasionnel
Lieu: Rimouski
Date d'inscription: 24 Jan 2015
Messages: 18

Points moyens nuages

Salut,

Soit une table de points dans PostGIS et qui est qui est affichée dans Quantum GIS via une vue.
Cette table contient des points relevés à différentes périodes. Bien entendu, de période en période, les relevez ne sont pas exactement à la même place. Quand un point a été relevé plusieurs (beaucoup) fois, ça devient vraiment fouilli dans QGIS (de belle "taches"), sans compter la lourdeur qui commence à se faire sentir.
Contrainte : garder tous les points dans la table (pour consultation).
Ce que je pense faire : Créer une vue dans PostGIS qui contiendrait des points moyens selon une distance. Disons qu'un point moyen serait calculé pour chaque nuage d'un rayon de 10cm. Ensuite, j'afficherais soit la vue des points moyens, soit la vue de tous les points selon l'échelle.
Mon problème : Comme vous vous en doutez, la SQL de la vue des points moyens. J'ai bien trouvé comment obtenir un point moyen d'une série de points (ST_CENTROID), mais je ne veux pas UN point moyen de toute la table. Je n'arrive pas à créer la SQL pour créer les points moyen de nuages différents (tous les points dans une rayon X) à partir de mon fichier global de points.

J'imagine que qqn a dû déjà se trouver face à ce problème et pourrait m'aider.

Merci de vos z'avis z'avisés.

Hors ligne

 

#2 Tue 18 July 2017 21:06

cquest
Participant assidu
Date d'inscription: 6 Jan 2013
Messages: 848

Re: Points moyens nuages

Il y a un identifiant commun au points à moyenner ? si oui, faire un GROUP BY dessus puis le ST_Centroid
si non... il va falloir jouer du cluster avec ST_ClusterWithin dans postgis


Christian Quest - https://amicale.net/@cquest sur Mastodon (terminé twitter/X)
Membre fondateur et porte parole d'OpenStreetMap France
A l'origine de opendatArchives, OpenEventDatabase

Hors ligne

 

#3 Wed 06 September 2017 16:25

Jean-Marc68
Participant occasionnel
Lieu: Rimouski
Date d'inscription: 24 Jan 2015
Messages: 18

Re: Points moyens nuages

Merci de ta réponse cquest.
J'ai dû mal m'exprimer et je pense que ce que je n'ai pas pu faire comprendre ce que je cherche à faire.
Je vais essayer de le mettre en "image".
Soit une table contenant des points relevés dans des villes de France. Certaines villes contiennent beaucoup de points, d'autres n'en contiennent qu'un.
Admettons, pour l'image, qu'il y ait 1000 points à Marseille, 10.000 points à Paris, 5000 points à Renne, 1 point à Brest, 5000 points à Lyon, ...
Je ne tiens pas compte des autres données que les coordonnées.
Ce que je cherche à faire est dans PostGIS, une vue qui calculerait le point moyen d'un nuage d'un rayon défini (disons 50km de rayon pour l'image des points de France).
À ce que j'ai vu, ST_ClusterWithin part d'un point connu et retournerait tous les points qui sont dans le rayon donné. Pour chaque ville, il me semble (à moins que j'ai mal compris. Ce qui est tout à fait possible) qu'il retournerait un nuage autour de chaque point. Par exemple, pour Marseille j'aurais 1000 nuages avec sensiblement les mêmes points.
Or c'est l'inverse que je cherche. Je cherche à déterminer les nuages et à en calculer le point moyen.
Le ST_Centroid me retournerai le point moyen de chaque nuage, mais je n'arrive justement pas à déterminer les nuages.
En somme, je cherche à faire une requête requête pourrait déterminer qu'à Lyon il y a un nuage de points distants de moins de 50km, de même qu'à Paris, Marseille, etc ...
La requête retournait des ensembles de points (nuages) distants de moins de la tolérance (le 50km de l'exemple) à partir de la table des points de France. En entrée de requête j'aurais la table des points de France, et en sortie, chaque ligne représenterait un nuage de points. Par exemple une géométrie multipoint (par exemple) pour Marseille, une pour Paris, une pour Renne, une pour Brest et une pour Lyon.
Ainsi je pourrais applique un ST_Centroid sur chaque ligne et trouver le point moyen de chaque nuage.

Merci de votre aide.

Hors ligne

 

#4 Wed 06 September 2017 18:12

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1132

Re: Points moyens nuages

Salut,

Je pense que st_clusterwithin est adéquate :

Documentation Postgis a écrit:

ST_ClusterWithin
Fonction d'agrégat -
Renvoie un tableau de GeometryCollections, où chaque GeometryCollection représente un ensemble de géométries séparées par pas plus que la distance spécifiée


A ceci près que selon la distance donnée en argument, il se peut que des points se retrouvent dans plusieurs nuages.

Dernière modification par tumasgiu (Wed 06 September 2017 18:14)

En ligne

 

#5 Wed 06 September 2017 18:21

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1536

Re: Points moyens nuages

Bonsoir,

Je pense que cquest a raison: regardez du coté de st_clusterWithin:

Ca construit un array de geometries qui sont a une distance données les unes des autres: le centroid de cette geometrie vous en donne le centre:

Code:

select st_centroid(unnest(st_clusterWithin(geometry, 2000)))
from testpt;

Sur l'image: 35000 points sur des communes, "résumés" en 651 points, centres des clusters initiaux à 2km.

Nicolas


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

En ligne

 

#6 Wed 06 September 2017 21:11

Jean-Marc68
Participant occasionnel
Lieu: Rimouski
Date d'inscription: 24 Jan 2015
Messages: 18

Re: Points moyens nuages

Merci beaucoup tumasgiu et Nicolas de la rapidité de votre réponse. Je n'avais visiblement pas compris la fonction ST_ClusterWithin.
En me basant sur l'exemple de de Nicloas, j'ai écris ma SQL mais je reçois le message
"ERREUR: la fonction st_clusterwithin(geometry, integer) n'existe pas
SQL state: 42883"
En effet je ne la trouve pas dans ma liste de fonctions.
Je viens de découvrir avec stupeur que ST_ClusterWithin nécessite PostGIS 2.2, or j'ai PostGIS 2.1.7

Il va falloir que je fasse une MAJ de mon PostGIS.
Encore merci de votre aide qui m'est précieuse.

Dernière modification par Jean-Marc68 (Wed 06 September 2017 21:24)

Hors ligne

 

#7 Thu 07 September 2017 07:59

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3169
Site web

Re: Points moyens nuages

Bonjour,

Une autre solution consiste à calculer le barycentre d'un ensemble de points.
X = somme de 1 à n des (xi) divisé par n (idem Y).

Il suffit de définir l'ensemble en fonction d'une géométrie, d'un rayon, d'un tampon bref ce que l'on veut.

L'avantage de st_clusterwithin est de proposer une agrégation automatique à partir d'un rayon, mais comme le souligne Tumasgiu il est possible et même certain (en fonction du rayon) qu'un point appartienne à plusieurs grappes. Il faut noter aussi qu'il n'est pas possible a priori de récupérer les id des points "grappés", donc pas possible de remonter aux informations liées aux points.

Petite précision la formule donnée plus haut est en fait
G(X,Y) = (somme1àn (AiXi)/somme(Ai) , somme1àn (AiYi)/somme(Ai))

Où Ai sont les poids attribués aux points. (autre avantage de cette méthode).


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#8 Thu 07 September 2017 08:36

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1132

Re: Points moyens nuages

ChristopheV a écrit:

Bonjour,Il faut noter aussi qu'il n'est pas possible a priori de récupérer les id des points "grappés", donc pas possible de remonter aux informations liées aux points.


Exact, mais on peut toujours joindre la table en comparant les géométries,
ce qui peut être relativement long quand celles-ci sont complexes.

Dernière modification par tumasgiu (Thu 07 September 2017 08:37)

En ligne

 

#9 Thu 07 September 2017 09:39

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1536

Re: Points moyens nuages

(sorry tomasgiu: j'ai envoyé ma réponse hier sans rafraîchir la page...)

En ligne

 

#10 Thu 07 September 2017 09:44

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1132

Re: Points moyens nuages

Nicolas,
Pas de souci, mieux vaut 4 avis qu'un seul smile

En ligne

 

Pied de page des forums

Powered by FluxBB