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 Fri 19 November 2021 14:51

neskuik01
Participant assidu
Date d'inscription: 16 Feb 2015
Messages: 199

Eviter la redondance jointure avec buffer

Bonjour

J'ai une couche de points que je cherche à joindre à une couche de surface  sur la base d'une distance de 1000m ,

J'ai utilisé st_dwithin(b.geom, a.geom,1000) le souci c'est que du coup un point peut se retrouver dans plusieurs polygones, j'ai donc rajouté limit 1 mais je pense que j'ai pas mis la limite au bon endroit ( je me retrovue que avec 1 jointure )

Hors ligne

 

#2 Fri 19 November 2021 22:13

p.jeremie
Participant assidu
Lieu: Valence
Date d'inscription: 10 Sep 2017
Messages: 427

Re: Eviter la redondance jointure avec buffer

Bonjour, que voulez-vous faire pour les points qui se trouvent dans le rayon de 1000m de plusieurs polygones ?
Autrement dit, quelles sont les règles que vous cherchez à appliquer avec votre requête ?

Et en effet le Limit 1 à la fin d'une requête limite le nombre de résultats à... 1. Donc votre résultat semble cohérent.

Dernière modification par p.jeremie (Fri 19 November 2021 22:13)

Hors ligne

 

#3 Tue 23 November 2021 08:46

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 995

Re: Eviter la redondance jointure avec buffer

Peut-être ajouter un ORDER BY ST_Distance(b.geom, a.geom) pour ne garder que le polygone le plus proche.


Sylvain M.

Hors ligne

 

#4 Tue 23 November 2021 08:53

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

Re: Eviter la redondance jointure avec buffer

Bonjour,

La question de p.jeremie est légitime smile

En utilisant des fonctions comme stClusterwithin() sur vos polygones, vous pourrez modéliser la relation un point appartient à n polygones et à quels polygones.
Après je ne veux pas être désagréable, mais la formulation de votre problème, dénote d'une certaine confusion, et les fonctions que je cites ne sont pas d'un usage simple, ça nécessite de bien comprendre ce que l'on fait.


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

Hors ligne

 

#5 Tue 23 November 2021 14:12

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

Re: Eviter la redondance jointure avec buffer

Vous pouvez aussi utiliser DISTINCT dans votre clause SELECT pour supprimer les doublons.
Tout depends du resultat auquel vous voulez arriver.

Hors ligne

 

#6 Tue 23 November 2021 17:12

neskuik01
Participant assidu
Date d'inscription: 16 Feb 2015
Messages: 199

Re: Eviter la redondance jointure avec buffer

Je suis allé vite dans le développement du problème.

si je fais une jointure simple entre 2 points et 2 polygone distant disons de 10 m  et que ma clause de jointure est une distance de 1000m je vais me retrouver avec des doublons.  Le résultat étant que chaque surface ne doit posséder ou pas, un identifiant de point, et cette identifiant de point ne peut pas se retrouver dans un autre polygone (unique). hors dans l'exemple cité je me retrouverais avec 4 lignes car chacune réponde à la condition de jointure alors que je n'en veux que deux.   

J'ai effectué un cross join lateral (...... where b.geom <-> a.geom < 1000 limit 1) , mais je me retrouve néanmoins avec des doublons (ce qui est logique). il faudrait pour chaque relation mettre l'identifiant du point testé dans une liste et mettre une clause qui vérifie que l'identifiant testé n'est pas déjà dans la liste.

Dernière modification par neskuik01 (Wed 24 November 2021 12:22)

Hors ligne

 

Pied de page des forums

Powered by FluxBB