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 !.
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Suite à un problème sur notre serveur une intervention est planifiée demain matin entre 8h et 9h. La coupure ne devrait pas exéder 5 mn.

L'équipe GeoRezo

#1 jeu. 01 décembre 2016 17:56

LeonWeb73
Membre
Lieu: Chambéry
Date d'inscription: 5 sept. 2005
Messages: 124
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.

Hors ligne

 

#2 jeu. 01 décembre 2016 21:37

Lsam
Membre
Date d'inscription: 27 nov. 2013
Messages: 98

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 (jeu. 01 décembre 2016 21:42)

Hors ligne

 

#3 ven. 02 décembre 2016 10:17

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 sept. 2005
Messages: 2371
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 ven. 02 décembre 2016 11:59

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 juil. 2010
Messages: 464

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 (ven. 02 décembre 2016 19:11)

Hors ligne

 

#5 ven. 02 décembre 2016 12:01

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 sept. 2005
Messages: 2371
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

Partagez  |