#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: 3197
- Site web
Re: Eviter la redondance jointure avec buffer
Bonjour,
La question de p.jeremie est légitime
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