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 Thu 01 December 2016 17:56

LeonWeb73
Participant actif
Lieu: Chambéry
Date d'inscription: 5 Sep 2005
Messages: 126
Site web

Postigs : Requête spatiale sur 3 couches

Bonjour,

j'ai besoin d'effectuer une requête d'intersection spatial entre 3 tables.


J'ai une table "Commune" (polygones), une table A "produits" (points) et une table B "vente" (points)
J'ai besoin de connaitre les produits et lieux de vente contenus dans la commune qui se nomme "toto".

Pour trouver les valeurs dans la table A je fais :

SELECT *
FROM table Commune, table A
WHERE ST_Intersects (table Commune.geom, table A.geom)
AND table Commune.nom_com = 'toto';

Mais pour trouver les valeurs à la fois dans la table A ET la table B je ne sais pas faire !

Si qq1 peux m'aider svp.

Merci d'avance.


Arnaud Colé - responsable service Géomatique et Opendata (SGéO)
Direction des Systèmes d'Information mutualisés et du Numérique
de Grand Chambéry, ville de Chambéry, ville de La Motte-Servolex, ville de La Ravoire

Hors ligne

 

#2 Thu 01 December 2016 21:37

Lsam
Participant assidu
Date d'inscription: 27 Nov 2013
Messages: 157

Re: Postigs : Requête spatiale sur 3 couches

Bonsoir,

Tu peux essayer d'unir tes 2 tables Produits et ventes avant de faire ta jointure spatiale.

Par exemple :

Code:

WITH prod_vent as (
select 'produits' as "produits", "table A".* from "table A"
union
select 'ventes' as "ventes", "table B".* from "table B")

select * FROM "table Commune", prod_vent
WHERE ST_Intersects("table Commune".geom, prod_vent.geom)
AND "table Commune".nom_com = 'toto'

C'est peut-être pas bien optimisé mais bon. Et il faut que tes tables A et B aient les mêmes champs, ce qui n'est sûrement pas le cas. Donc voir de quels champs tu as besoin.

Dernière modification par Lsam (Thu 01 December 2016 21:42)

Hors ligne

 

#3 Fri 02 December 2016 10:17

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

Re: Postigs : Requête spatiale sur 3 couches

Bonjour,

Une variante à ce que propose Lsam, cela devrait aller plus vite.

) créer un index spatial sur les géométries de produit et de vente. Puis:

Code:

With prod AS (SELECT commune.*, produit.* FROM myschema.produit,myschema.commune WHERE st_within(prod.geom,commune.geom) AND nomcommune='toto'),
vente AS (SELECT commune.*,vente.* FROM myschema.vente,myschema.commune WHERE st-within(vente.geom,commune.geom) AND nomcommune='toto')

Ensuite si l'on veut
tous les produits :  SELECT * FROM prod
toutes les ventes : SELECT * from vente
L'ensemble : SELECT * FROM prod UNION SELECT * FROM vente


Bien entendu il faut pour utiliser la dernière expression que le nombre et le type de champs soient les m^me.


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

Hors ligne

 

#4 Fri 02 December 2016 11:59

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

Re: Postigs : Requête spatiale sur 3 couches

Salut,

je met la mienne :

Code:

SELECT nom, produits, ventes
FROM
    (SELECT C.nom, 
    array_agg(DISTINCT A.*) produits
    FROM Commune C
    JOIN produit A ON st_intersects(C.geom, A.geom)
    WHERE C.nom = 'toto'
        GROUP BY C.nom) A,
    (SELECT C.nom, 
    array_agg(DISTINCT B.*) ventes
    FROM Commune C
    JOIN ventes B ON st_intersects(C.geom, B.geom) 
    WHERE C.nom = 'toto'
    GROUP BY C.nom) B
WHERE A.nom = B.nom

Cela renvoie une seule ligne du genre 'toto', {produitA, produitB,...}, {venteA, venteB} :
le nom de la commune avec un tableau de produit et un tableau de vente.

Dernière modification par tumasgiu (Fri 02 December 2016 19:11)

Hors ligne

 

#5 Fri 02 December 2016 12:01

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

Re: Postigs : Requête spatiale sur 3 couches

Oui tu as raison Tumasgiu, c'est Vendredi et tu peux mettre la tienne wink


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

Hors ligne

 

Pied de page des forums

Powered by FluxBB