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 Wed 21 June 2017 10:36

tati
Participant occasionnel
Date d'inscription: 6 Jun 2017
Messages: 27

Requête spatiale Calcul pourcentage parcs (UPDATE et SET)

Bonjour,

J'ai rédigé la requête qui me permet de calculer la somme de la surface de parcs vert qui se trouvent à un rayon de 50 m d'un point A de ma table shema.sirene
(les parcs se trouvent dans la table public.multipolygones):

Select sum(st_area(a.geom)) 
from public.multipolygones a
join shema.sirene b on
ST_Intersects(ST_Buffer(b.the_geom,50) ,a.geom)
where "leisure" ilike 'park'

Et la requête ci dessous me permet de calculer la somme des surfaces des parcs verts qui se trouvent dans ma table public.multipolygones:

Select sum(st_area(b.geom)) from public.multipolygones b where "leisure" ilike 'park'

Le but est de créer un nouveau champs dans ma table shema.sirene dans lequel je vais mettre le pourcentage de parcs verts qui se trouve dans un rayon de 50 m, donc j'ai essayé de créer un champs vide et de le mettre à jour (UPDATE SET) en divisant ma première requête par ma deuxème requête et multiplier le résultat par 100 mais ça ne marche pas en utilisant UPDATE et SET.

Pouvez-vous m'aider svp ??

Hors ligne

 

#2 Wed 21 June 2017 11:32

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1025
Site web

Re: Requête spatiale Calcul pourcentage parcs (UPDATE et SET)

Salut,

La doc sur update : https://www.postgresql.org/docs/8.3/sta … pdate.html

Cela devrait faire quelque chose comme

Code:

UPDATE Ta_Table SET ton_champ = (ta requête)

La requête nécessitera forcément un where sur un identifiant unique afin que la mise à jour s'effectue sur les bonnes lignes smile


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#3 Wed 21 June 2017 11:36

tati
Participant occasionnel
Date d'inscription: 6 Jun 2017
Messages: 27

Re: Requête spatiale Calcul pourcentage parcs (UPDATE et SET)

Salut,

merci pour la réponse, mais j'ai déjà fait ça et ça ne marche pas c'est pourquoi je veux de l'aide.

Hors ligne

 

#4 Wed 21 June 2017 11:53

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1025
Site web

Re: Requête spatiale Calcul pourcentage parcs (UPDATE et SET)

Montre ta requête complète et l'erreur qui apparait.


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#5 Wed 21 June 2017 12:51

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: Requête spatiale Calcul pourcentage parcs (UPDATE et SET)

Ca serait plutôt ca (théorie) :

Code:

UPDATE employees SET sales_count = sales_count + 1 FROM accounts
  WHERE accounts.name = 'Acme Corporation'
  AND employees.id = accounts.sales_person;

Soit quelque chose comme ca :

Code:

UPDATE matable SET geom = sum(st_area(b.geom)) FROM public.multipolygones b WHERE b.id = a.id AND b.leisure ilike 'park'

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#6 Wed 21 June 2017 14:55

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

Re: Requête spatiale Calcul pourcentage parcs (UPDATE et SET)

Bonjour,
Pour le fun (non testé) et l'utilisation des CTE. Avec une supposition il existe une clef primaire numérique sur chaque table nommée idnomtable.

Code:

WITH p1 as (SELECT * FROM public.multipolygones b where "leisure" ilike 'park'),
p2 as (SELECT idmultipolygones,idsirene, multypolygone.geom As geoma,sirene.geom as geomb
FROM p1, shema.sirene WHERE st_Intersects(st_Buffer(sirene.geom,50), multipolygone.geom)), 
res1 as (SELECT idsirene,SUM(st_Area(a.geom)) AS Aire50 FROM p2 GROUP BY idsirene),
res2 as (SELECT SUM(st_area(geom)) as AireTot FROM p1 GROUP BY idmultipolygone),
res as (SELECT idsirene,(Aire50/AireTot*100)::real as prct FROM res1,res2)

UPDATE shema.sirene SET monchamppourcent=prct FROM res WHERE res.idsirene=idsirene;

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

Hors ligne

 

#7 Thu 22 June 2017 09:36

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

Re: Requête spatiale Calcul pourcentage parcs (UPDATE et SET)

Salut,

une petite précision d'ordre général sur la clause FROM :

si, pour une ligne de la table a mettre à jour A,
il existe plusieurs lignes correspondantes dans la table ou l'expression B,
la ligne utilisée pour la mise à jour est choisie au hasard.

Aucun avertissement n'est donné par le moteur, il faut s'assurer par avance
que la relation entre les deux tables ne vérifie pas cette propriété.

Utiliser une sous-requête plutôt que la clause FROM est plus sûr,
en ce sens que la mise à jour ne s’exécute pas dans ce cas de figure.

Dernière modification par tumasgiu (Thu 22 June 2017 10:22)

Hors ligne

 

#8 Thu 22 June 2017 10:01

tati
Participant occasionnel
Date d'inscription: 6 Jun 2017
Messages: 27

Re: Requête spatiale Calcul pourcentage parcs (UPDATE et SET)

Bonjour;

je vous remercie tous pour vos réponse.

Tumasgui c'est exactement ça mon problème quand je fais la mise à jour de ma table j'ai la même valeur dans toutes les cases.
Ci -dessous ma rêquete, pouvez vous m'aider SVP pour que ça marche:

UPDATE shema.finale set pt=(select gid from public.ways v join shema.finale b on
st_DWithin(b.the_geom,v.the_geom,300) where v.gid=b.id
order by st_distance(b.the_geom, v.the_geom) ASC  limit 1 )

Hors ligne

 

#9 Thu 22 June 2017 10:36

Pascal Boulerie
Participant assidu
Lieu: France
Date d'inscription: 12 Sep 2005
Messages: 2947
Site web

Re: Requête spatiale Calcul pourcentage parcs (UPDATE et SET)

Et en passant par la création temporaire d'une table temporaire , si c'est trop compliqué à écrire pour une personne qui comme moi n'est pas expert en SQL à 100 % de son temps ?


« L'État est désormais quasi déliquescent. » (José Cohen-Aknine, ingénieur X-Ponts, IGPEF, dans Déliquescence et renaissance de l'État.)

Hors ligne

 

#10 Thu 22 June 2017 10:44

tati
Participant occasionnel
Date d'inscription: 6 Jun 2017
Messages: 27

Re: Requête spatiale Calcul pourcentage parcs (UPDATE et SET)

Oui j'avoue, mais j'ai rédigé la requête suivante et je l'ai lancé sur postgresql ça prend du temps pour avoir le résultat:

with res as (select gid from public.ways v join shema.finale b on
st_DWithin(b.the_geom,v.the_geom,300)
order by st_distance(b.the_geom, v.the_geom) ASC limit 1 )
UPDATE shema.finale as f set pt=res.gid from res where res.gid = f.id;

Hors ligne

 

#11 Thu 22 June 2017 10:44

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

Re: Requête spatiale Calcul pourcentage parcs (UPDATE et SET)

A quoi sert la condition de la sous-requête ?

Code:

v.gid=b.id

Actuellement votre sous requête restreint la recherche aux éléments de v
ayant le même id que b, et comme ce qu'elle renvoie c'est la colonne id de v,
votre sous-requête renverra en fait l'id de b, puisqu'ils sont égaux,
et après votre requête, la colonne pt de toutes les lignes de b vaudra soit la colonne gid, soit NULL.

Dernière modification par tumasgiu (Thu 22 June 2017 10:47)

Hors ligne

 

#12 Thu 22 June 2017 10:51

tati
Participant occasionnel
Date d'inscription: 6 Jun 2017
Messages: 27

Re: Requête spatiale Calcul pourcentage parcs (UPDATE et SET)

ok, je l'ai changé ma requete en res.gid = f.id comme dans mon message précédent.
C'est pour mettre à jour toute la colonne pt

Hors ligne

 

#13 Thu 22 June 2017 10:54

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

Re: Requête spatiale Calcul pourcentage parcs (UPDATE et SET)

La colonne pt doit valoir l'id de la ligne ways la plus proche c'est bien çà ?

Hors ligne

 

#14 Thu 22 June 2017 10:55

tati
Participant occasionnel
Date d'inscription: 6 Jun 2017
Messages: 27

Re: Requête spatiale Calcul pourcentage parcs (UPDATE et SET)

Oui c'est exactement je que je veux

Hors ligne

 

#15 Thu 22 June 2017 11:00

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

Re: Requête spatiale Calcul pourcentage parcs (UPDATE et SET)

Votre requête était la bonne, il suffit d'enlever cette condition
ainsi que la jointure dans la sous requête.
Vous pouvez utiliser la table que vous mettez à jour dans la sous requête :

Code:

UPDATE shema.finale b 
SET pt= (SELECT gid FROM public.ways v
             WHERE st_DWithin(b.the_geom,v.the_geom,300)
             ORDER BY st_distance(b.the_geom, v.the_geom) 
             ASC  LIMIT 1 )

Dernière modification par tumasgiu (Thu 22 June 2017 11:01)

Hors ligne

 

#16 Thu 22 June 2017 13:17

tati
Participant occasionnel
Date d'inscription: 6 Jun 2017
Messages: 27

Re: Requête spatiale Calcul pourcentage parcs (UPDATE et SET)

Je vous remercie beaucoup, effectivement ça marche !!

Et pour ma colonne nbPark, elle doit valoir le nombre de parcs qui se trouve à un rayon de 50 m. J'ai essayé de faire comme votre requête mais ça ne donne pas le bon résultat, pouvez vous m'aider si ça ne vous dérange pas:

UPDATE shema.finale b
set nbPark = ( Select count(gid) from public.multipolygones v
        WHERE st_DWithin(b.the_geom,v.geom,50)
        AND v.leisure ilike 'park')

Hors ligne

 

#17 Thu 22 June 2017 14:09

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

Re: Requête spatiale Calcul pourcentage parcs (UPDATE et SET)

Votre requête me semble correcte.

3 possibilités d'erreurs selon moi :

count(gid) : la fonction compte le nombre d'éléments non nuls, si l'une des lignes de votre table comporte un gid null,
elle ne sera pas comptabilisée.

st_dwithin
: Je ne sais pas exactement comment est calculée la distance. Selon les critères, des lignes peuvent se voir
exclues.

ilike 'park': peut être que cette condition exclut certaines lignes, cela peut être du à un espace après le mot, ou une autre orthographe.

Ce que je vous conseille c''est d’exécuter la sous-requête seule pour une ligne de votre table finale donnée,  et de tester.

Dernière modification par tumasgiu (Thu 22 June 2017 14:09)

Hors ligne

 

#18 Thu 22 June 2017 14:24

tati
Participant occasionnel
Date d'inscription: 6 Jun 2017
Messages: 27

Re: Requête spatiale Calcul pourcentage parcs (UPDATE et SET)

ok, j'ai lancé cette requete pour une seule ligne de ma table finale et ça me donne 58 comme résultat et c'est faux car le nombre total de parcs qui existent dans ma table multipolygones est de 58 donc c'est pas possible de les avoir tous dans un rayon de 50 m:

Select count(gid) from public.multipolygones v
        join shema.finale b on
        st_DWithin(b.the_geom,v.geom,50)
        where v.leisure ilike 'park' and b.id = 1

Hors ligne

 

#19 Thu 22 June 2017 14:34

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

Re: Requête spatiale Calcul pourcentage parcs (UPDATE et SET)

Quelle est la projection de vos données géométriques ?
Ce n'est pas sur que l'unité soit le mètre.

Hors ligne

 

#20 Thu 22 June 2017 14:36

tati
Participant occasionnel
Date d'inscription: 6 Jun 2017
Messages: 27

Re: Requête spatiale Calcul pourcentage parcs (UPDATE et SET)

Mes données sont projetées en 4326

Hors ligne

 

#21 Thu 22 June 2017 14:40

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1025
Site web

Re: Requête spatiale Calcul pourcentage parcs (UPDATE et SET)

Donc en degrés, tu peux faire une reprojection à la volée pour calculer en mètres avec st_transform()


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#22 Thu 22 June 2017 14:48

tati
Participant occasionnel
Date d'inscription: 6 Jun 2017
Messages: 27

Re: Requête spatiale Calcul pourcentage parcs (UPDATE et SET)

en lambert 93 ?

Hors ligne

 

#23 Thu 22 June 2017 15:24

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1025
Site web

Re: Requête spatiale Calcul pourcentage parcs (UPDATE et SET)

Oui en 2154 pour avoir des mètres smile


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#24 Thu 22 June 2017 15:26

tati
Participant occasionnel
Date d'inscription: 6 Jun 2017
Messages: 27

Re: Requête spatiale Calcul pourcentage parcs (UPDATE et SET)

Je l'ai fait merci.

Et la je dois faire quoi pour que ma requete marche
UPDATE shema.finale b
set nbPark = ( Select count(gid) from public.multipolygones v
        WHERE st_DWithin(b.the_geom,v.geom,50)
        AND v.leisure ilike 'park')

Hors ligne

 

#25 Thu 22 June 2017 15:37

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

Re: Requête spatiale Calcul pourcentage parcs (UPDATE et SET)

Vous projetez vos géométries à la volée dans la requête :

Code:

st_dwithin(st_transform(b.the_geom, 2154), st_transform(v.geom, 2154), 50)

Ou alors vous projetez vos géométries en dur, avant d’exécuter votre requête :

Code:

ALTER TABLE shema.final
   ALTER COLUMN geom 
   TYPE Geometry(Point, 2154) 
   USING ST_Transform(geom, 2154);

ALTER TABLE multipolygones
   ALTER COLUMN geom 
   TYPE Geometry(MultiPolygon, 2154) 
   USING ST_Transform(MultiPolygon, 2154);

Hors ligne

 

#26 Thu 22 June 2017 15:41

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1025
Site web

Re: Requête spatiale Calcul pourcentage parcs (UPDATE et SET)

Tu n'étais pas obligé de transformer toute ta table mais effectuer un st_transform sur les géométries de la requête.

Si tu as reprojeté la table en L93, ta requête devrait fonctionner maintenant.


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#27 Thu 22 June 2017 15:56

tati
Participant occasionnel
Date d'inscription: 6 Jun 2017
Messages: 27

Re: Requête spatiale Calcul pourcentage parcs (UPDATE et SET)

ça ne fontionne toujours pas sad

ça me donne le nombre 58 dans toutes les cases de la ligne nbPark.

Hors ligne

 

Pied de page des forums

Powered by FluxBB