#1 Fri 16 June 2017 14:57
- bruhnild
- Participant actif
- Lieu: Lyon
- Date d'inscription: 7 Jun 2014
- Messages: 130
pg_routing calcul d'isochrones itérations[Postgis]
Bonjour,
Je souhaite réaliser des isochrones d’après l’article de l’analyse d’isodistance https://diouck.wordpress.com/2016/09/21 … sochrones/
La méthode la plus pertinente dans mon cas de figure se trouve être la méthode dite ‘Isochrone avec St_MakePolygon et St_ExteriorRing’
La requete suivant permet d’obtenir l’isochrone pour toutes les routes à moins de 500m de la poste. Elle fonctionne dès lors que l'on connait l’identifiant (edge_id) du point qui nous intéresse.
Code:
with buffer_itineraire as ( SELECT et.edge_id, st_buffer(et.geom,10,'endcap=square join=round') as geom , 1 as factor FROM pgr_drivingdistance( 'SELECT edge_id as id, start_node as source, end_node as target, tps_distance as cost from routing.edge_data', 8215, 0.5, false, false ) firstPath CROSS JOIN (SELECT id1,cost from pgr_drivingDistance( 'SELECT edge_id as id,start_node as source , end_node as target,tps_distance as cost FROM routing.edge_data', 8215,0.2,false,false) ) secondPath INNER JOIN routing.edge_data et ON firstPath.id1 = et.start_node AND secondPath.id1 = et.end_node) SELECT ST_MakePolygon(ST_ExteriorRing(ST_GeometryN(st_union(geom),1))) as geom FROM buffer_itineraire;
Voir la capture du résultat en pièce jointe.
Je cherche à exécuter cette requete pour tous les points qui ont l’information ‘Agroalimentaire’, puis ‘Services’, puis ‘Autres’ contenue dans un champ ‘type_comm’, sans avoir à chercher manuellement l’edge_id pour chacun des points question (il y en a 37).
Pourriez vous m’aider à résoudre cette requête?
Dans l'attente de vos réponses, questions, je vous souhaite une bonne journée.
Marine.
Hors ligne
#2 Mon 19 June 2017 10:30
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: pg_routing calcul d'isochrones itérations[Postgis]
Bonjour,
En faisant une requete de plus, histoire de lister edge_id de type_comm Agro, services et autres ?
(un WITH ... de plus en début de requete.)
Nicolas
Hors ligne
#3 Mon 19 June 2017 15:14
- bruhnild
- Participant actif
- Lieu: Lyon
- Date d'inscription: 7 Jun 2014
- Messages: 130
Re: pg_routing calcul d'isochrones itérations[Postgis]
Merci pour la piste, le problème c'est que je ne vois pas du tout comment imbriquer deux WITH dans une requete..
Marine.
Hors ligne
#4 Mon 19 June 2017 15:23
- Pascal Boulerie
- Participant assidu
- Lieu: France
- Date d'inscription: 12 Sep 2005
- Messages: 2947
- Site web
Re: pg_routing calcul d'isochrones itérations[Postgis]
(Comme expliqué jeudi 8 à un autre - https://georezo.net/forum/viewtopic.php … 29#p296329 )
Si c'est trop compliqué pour vous de le faire en une seule requête,
vous pouvez passer par une table temporaire intermédiaire...
C'est moins beau, moins prestigieux, moins valorisant intellectuellement dans l'esprit des "ayatollahs" (sic) de la requête SQL, mais au moins, ça marche ! :-)
« 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
#5 Tue 20 June 2017 09:25
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: pg_routing calcul d'isochrones itérations[Postgis]
Merci pour la piste, le problème c'est que je ne vois pas du tout comment imbriquer deux WITH dans une requete..
Marine.
Bonjour, dans ces cas, n'hesitez pas a vous reporter à la doc PG !
Dès le premier chapitre la syntaxe est indiquée: https://www.postgresql.org/docs/9.6/sta … -with.html
Nicolas
Hors ligne
#6 Tue 20 June 2017 18:58
- JD
- Moderateur
- Date d'inscription: 8 Aug 2013
- Messages: 726
Re: pg_routing calcul d'isochrones itérations[Postgis]
Bonsoir,
et il faudra un group by edge_id dans le dernier select.
Cordialement,
Hors ligne
#7 Thu 22 June 2017 09:23
- bruhnild
- Participant actif
- Lieu: Lyon
- Date d'inscription: 7 Jun 2014
- Messages: 130
Re: pg_routing calcul d'isochrones itérations[Postgis]
Bonjour,
Pourriez vous me donner un exemple de script?
Cela fait deux jours que j'étudie des fonctions sur différents sites mais aucune ne semble correspondre à mes besoins..
Merci pour vos réponses.
Hors ligne