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 Thu 04 June 2020 19:30

jiptwo19
Participant actif
Lieu: drummondville, québec
Date d'inscription: 3 Jan 2019
Messages: 56

postgresql/postgis intersection

bonjour
en passant ...je commence dans postgresql et postgis ....
veuillez détaillé vos réponses svp

Voila mon problème
j'ai présentement 2 tables ..
1ere table ... geométrie de point et elle s'appel termial   
et voici les colonnes
gid, Nombloc, Calque, Rotate, datetime, Stat_tronc, Notroncon, Status, geom


2eme table ... géométrie avec polyline elle s'appel troncons
et voici les colonnes
gid, NoTroncon, fo, T_Partiel, No_Touret, T_Reel, Status, geom


j'aimerais dans ma table terminal ..
la colonne Stat_tronc ... prend la valeur status de la table troncons que les geométries ce touche ou .. près de 0.5mètres
aussi la colonne NoTroncon, prend la ou les valeurs NoTroncon de la table troncons que les géométries ce touche ou .. près de 0.5mètres

J'ai mis près de 0.5mètres .. car je ne sais pas si il y a dans postgis une relation par distance ou les 2 avec intersection

j'attends de vos nouvelles

merci!

Hors ligne

 

#2 Thu 04 June 2020 21:37

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

Re: postgresql/postgis intersection

Bonsoir,

Oui, PostGIS dispose d'une fonction pour tester ce que vous voulez: st_dwithin(geoma, geomb, distance). (https://postgis.net/docs/manual-3.0/ST_DWithin.html)
Renvoie vrai si geoma et geomb sont distantes de "distance" ou moins.

Vous pouvez faire une jointure spatiale entre vos deux tables avec cette fonction.

Comme vous le dites, il peut y avoir plusieurs tronçons proches d'un terminal: les colonnes stat_tronc et notroncon devraient etre de type array, (tableau de meme type que les colonnes troncons.status et troncons.notroncon).

Pour utiliser au mieux postgis, créez des index spatiaux sur les colonnes geometry des deux tables si ce n'est pas deja fait (et lancez un analyze <table> apres la création des index).

En SQL, en select d'abord pour vérifier que ca marche:

Code:

select te.gid, array_agg(tr.status) as stat_tronc, array_agg(tr.notroncon) as notroncon
from terminal te join troncons tr on st_dwithin(te.geom, tr.geom, 0.5)
group by te.gid;

Vous pouvez alors transformer cela en update, par ex en utilisant une CTE (common table expression): WITH tmp as (...) update terminal t ...

Nicolas

Hors ligne

 

Pied de page des forums

Powered by FluxBB