Pages: 1
- Sujet précédent - Requête spatiale Calcul pourcentage parcs (UPDATE et SET) - Sujet suivant
#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
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
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
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
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
En 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
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
Re: Requête spatiale Calcul pourcentage parcs (UPDATE et SET)
Oui en 2154 pour avoir des mètres
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
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
ça me donne le nombre 58 dans toutes les cases de la ligne nbPark.
Hors ligne
Pages: 1
- Sujet précédent - Requête spatiale Calcul pourcentage parcs (UPDATE et SET) - Sujet suivant