﻿{"id":3261,"date":"2016-05-31T07:50:21","date_gmt":"2016-05-31T06:50:21","guid":{"rendered":"http:\/\/www.sigterritoires.fr\/?p=3261"},"modified":"2023-06-28T12:51:09","modified_gmt":"2023-06-28T10:51:09","slug":"developper-une-application-avec-pgrouting-sous-windows-2lalgorithme-a-star","status":"publish","type":"post","link":"https:\/\/www.sigterritoires.fr\/index.php\/developper-une-application-avec-pgrouting-sous-windows-2lalgorithme-a-star\/","title":{"rendered":"D\u00e9velopper une application avec pgrouting sous Windows (2):l&rsquo;algorithme A-star"},"content":{"rendered":"<p>L&rsquo;extension <a href=\"https:\/\/www.sigterritoires.fr\/index.php\/developper-une-application-avec-pgrouting-sous-windows-1\/\">pgrouting<\/a> propose divers algorithmes pour rechercher le meilleur itin\u00e9raire :Dijkstra, A*,Ksp,Trsp,&#8230;<\/p>\n<p>Dans cet article nous allons voir en d\u00e9tail l&rsquo;utilisation de a* (A-star).<\/p>\n<p><!--more--><\/p>\n<p>Nous continuerons \u00e0 utiliser la base de donn\u00e9es et les outils d\u00e9crits dans l&rsquo;article pr\u00e9c\u00e9dent (D\u00e9velopper une application avec pgrouting sous Windows (1)).<\/p>\n<p>L&rsquo;algorithme A* est un algorithme de recherche de chemin dans un graphe entre un n\u0153ud initial et un n\u0153ud final. Il utilise une \u00e9valuation heuristique sur chaque n\u0153ud pour estimer le meilleur chemin y passant, et visite ensuite les n\u0153uds par ordre de cette \u00e9valuation heuristique.<\/p>\n<p>Avec l&rsquo;algorithme de Dijkstra, ce sont les algorithmes les plus utilis\u00e9s pour le calcul du plus court chemin entre deux points d&rsquo;un r\u00e9seau lin\u00e9aire.<\/p>\n<h2>Requ\u00eate A*<\/h2>\n<p>La syntaxe de l&rsquo;algorithme A* est la suivante:<\/p>\n<p>pgr_astar(<em><strong>sql<\/strong><\/em> text, <em><strong>source<\/strong> <\/em>integer, <em><strong>target<\/strong> <\/em>integer,<em><strong>directed<\/strong> <\/em>boolean, <em><strong>has_rcost<\/strong><\/em> boolean);<\/p>\n<p>O\u00f9 <em><strong>source<\/strong> <\/em>est le point de d\u00e9parte souhait\u00e9 de l&rsquo;itin\u00e9raire, <em><strong>target<\/strong> <\/em>le point d&rsquo;arriv\u00e9e de l&rsquo;itin\u00e9raire et la cha\u00eene <em><strong>sql<\/strong> <\/em>est de type:<\/p>\n<p>SELECT id, source, target, cost, x1, y1, x2, y2 [,reverse_cost] FROM r\u00e9seau<\/p>\n<p>Nous verrons plus loin les deux variables bool\u00e9ennes et leur utilisation.<\/p>\n<p>La commande retourne un \u00e9l\u00e9ment <em><strong>pgr_costResult<\/strong><\/em> qui contient (seq, id1, id2, cost), o\u00f9 <em><strong>seq<\/strong> <\/em>est l&rsquo;ordre du tron\u00e7on dans l&rsquo;itin\u00e9raire, <em><strong>id1<\/strong> <\/em>le point de d\u00e9part du tron\u00e7on, <em><strong>id2<\/strong> <\/em>le point d&rsquo;arriv\u00e9e du tron\u00e7on et <em><strong>cost<\/strong> <\/em>le co\u00fbt associ\u00e9 \u00e0 ce tron\u00e7on.<\/p>\n<h2>Pr\u00e9paration de la base de donn\u00e9es<\/h2>\n<p>Contrairement aux autres algorithmes de pgrouting, pour utiliser A* il faut ajouter, si n\u00e9cessaire, les coordonn\u00e9es en latitude\/longitude des n\u0153uds d\u00e9but et fin de chaque tron\u00e7on.<\/p>\n<p>Si vous avez suivi la cr\u00e9ation de la base de donn\u00e9es dans l&rsquo;article pr\u00e9c\u00e9dent en important des donn\u00e9es OpenStreeMap avec osm2pgrouting, vous n&rsquo;avez rien \u00e0 faire car ce programme g\u00e9n\u00e8re les champs x1, y1, x2, y2 n\u00e9cessaires \u00e0 la m\u00e9thode A*<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg0.png\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"3263\" data-permalink=\"https:\/\/www.sigterritoires.fr\/index.php\/developper-une-application-avec-pgrouting-sous-windows-2lalgorithme-a-star\/2pg0\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg0.png?fit=967%2C708&amp;ssl=1\" data-orig-size=\"967,708\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"2pg0\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg0.png?fit=640%2C469&amp;ssl=1\" class=\"aligncenter size-full wp-image-3263\" src=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg0.png?resize=640%2C469\" alt=\"champs n\u00e9cesssaires \u00e0 l'agorithme A*\" width=\"640\" height=\"469\" srcset=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg0.png?w=967&amp;ssl=1 967w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg0.png?resize=300%2C220&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg0.png?resize=768%2C562&amp;ssl=1 768w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a>Si ces champs ne sont pas pr\u00e9sents dans votre couche r\u00e9seau, il va falloir les cr\u00e9er.<\/p>\n<p>Mais au pr\u00e9alable il faut v\u00e9rifier le type de g\u00e9om\u00e9trie de votre r\u00e9seau. Dans pgAdmin III, s\u00e9lectionnez le champ g\u00e9om\u00e9trie de votre table:<\/p>\n<h3><a href=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg0b.png\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"3266\" data-permalink=\"https:\/\/www.sigterritoires.fr\/index.php\/developper-une-application-avec-pgrouting-sous-windows-2lalgorithme-a-star\/2pg0b\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg0b.png?fit=973%2C584&amp;ssl=1\" data-orig-size=\"973,584\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"2pg0b\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg0b.png?fit=640%2C384&amp;ssl=1\" class=\"aligncenter size-full wp-image-3266\" src=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg0b.png?resize=640%2C384\" alt=\"type de g\u00e9om\u00e9trie du r\u00e9seau\" width=\"640\" height=\"384\" srcset=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg0b.png?w=973&amp;ssl=1 973w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg0b.png?resize=300%2C180&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg0b.png?resize=768%2C461&amp;ssl=1 768w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a>Probl\u00e8me: g\u00e9om\u00e9trie MultiLineString ou LineString?<\/h3>\n<p>Vous pouvez retrouver deux types de g\u00e9om\u00e9trie: LineString et MultiLineString. Les commandes utilis\u00e9es pour calculer les coordonn\u00e9es des n\u0153uds ne marchent que sur des g\u00e9om\u00e9tries LineString. Si vous avez une g\u00e9om\u00e9trie MultiLineString, inutile d&rsquo;essayer. Vous n&rsquo;aurez pas de message d&rsquo;erreur, mais vos colonnes resteront d\u00e9sesp\u00e9r\u00e9ment vides.<\/p>\n<p>Ceci est d&rsquo;autant plus b\u00eate, que vous avez 99.99% de probabilit\u00e9s de ne pas avoir r\u00e9ellement une g\u00e9om\u00e9trie MultiLine String! Si vous utilisez l&rsquo;utilitaire <a href=\"https:\/\/www.sigterritoires.fr\/index.php\/debuter-avec-postgrespostgis\/\">PostGis<\/a> <a href=\"https:\/\/www.sigterritoires.fr\/index.php\/frshapefile-vs-geopackage-quel-format-choisir\/\">Shapefile<\/a> and DBF loader, vous aurez par d\u00e9faut ce type de g\u00e9om\u00e9trie, m\u00eame si vos donn\u00e9es sont des LineString.<\/p>\n<h3>SOLUTION:<\/h3>\n<p>Testez la g\u00e9om\u00e9trie pour v\u00e9rifier qu&rsquo;elle n&rsquo;est pas forc\u00e9ment MultiLineString avec la commande SQL suivante<\/p>\n<p><strong>SELECT COUNT(<\/strong><br \/>\n<strong> CASE WHEN ST_NumGeometries(the_geom) &gt; 1 THEN 1 END<\/strong><br \/>\n<strong> ) AS multi, COUNT(the_geom) AS total<\/strong><br \/>\n<strong> FROM ways;<\/strong><\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg0c.png\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"3268\" data-permalink=\"https:\/\/www.sigterritoires.fr\/index.php\/developper-une-application-avec-pgrouting-sous-windows-2lalgorithme-a-star\/2pg0c\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg0c.png?fit=683%2C512&amp;ssl=1\" data-orig-size=\"683,512\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"2pg0c\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg0c.png?fit=640%2C480&amp;ssl=1\" class=\"aligncenter size-full wp-image-3268\" src=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg0c.png?resize=640%2C480\" alt=\"test d'existance de multilinestrings\" width=\"640\" height=\"480\" srcset=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg0c.png?w=683&amp;ssl=1 683w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg0c.png?resize=300%2C225&amp;ssl=1 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p>Si le r\u00e9sultat de Multi est <strong>0<\/strong>, vous n&rsquo;avez pas de multilignes et vous pouvez changer le type de g\u00e9om\u00e9trie en LineString avec la commande SQL<\/p>\n<p><strong>ALTER TABLE ways<\/strong><br \/>\n<strong> ALTER COLUMN the_geom TYPE geometry(LineString, 4326)<\/strong><br \/>\n<strong> USING ST_GeometryN(the_geom, 1);<\/strong><\/p>\n<p>Maintenant vous pouvez cr\u00e9er les champs x1, y1, x2, y2 avec les commandes sql suivantes:<\/p>\n<p><strong>ALTER TABLE ways ADD COLUMN x1 double precision;<\/strong><br \/>\n<strong> ALTER TABLE ways ADD COLUMN y1 double precision;<\/strong><br \/>\n<strong> ALTER TABLE ways ADD COLUMN x2 double precision;<\/strong><br \/>\n<strong> ALTER TABLE ways ADD COLUMN y2 double precision;<\/strong><\/p>\n<p><strong>UPDATE ways SET x1 = ST_x(ST_PointN(the_geom, 1));<\/strong><br \/>\n<strong> UPDATE ways SET y1 = ST_y(ST_PointN(the_geom, 1));<\/strong><\/p>\n<p><strong>UPDATE ways SET x2 = ST_x(ST_PointN(the_geom, ST_NumPoints(the_geom)));<\/strong><br \/>\n<strong> UPDATE ways SET y2 = ST_y(ST_PointN(the_geom, ST_NumPoints(the_geom)));<\/strong><\/p>\n<h3><a href=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg0d.png\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"3269\" data-permalink=\"https:\/\/www.sigterritoires.fr\/index.php\/developper-une-application-avec-pgrouting-sous-windows-2lalgorithme-a-star\/2pg0d\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg0d.png?fit=691%2C510&amp;ssl=1\" data-orig-size=\"691,510\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"2pg0d\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg0d.png?fit=640%2C472&amp;ssl=1\" class=\"aligncenter size-full wp-image-3269\" src=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg0d.png?resize=640%2C472\" alt=\"cr\u00e9ation et remplissage des colonnes x1,y1,x2 et y2\" width=\"640\" height=\"472\" srcset=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg0d.png?w=691&amp;ssl=1 691w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg0d.png?resize=300%2C221&amp;ssl=1 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a>Probl\u00e8me: choix du \u00ab\u00a0co\u00fbt\u00a0\u00bb d&rsquo;un tron\u00e7on.<\/h3>\n<p>L&rsquo;algorithme de routage recherche le chemin avec le co\u00fbt le plus faible. En fonction de vos objectifs, vous devez d\u00e9cider quel \u00e9l\u00e9ment de co\u00fbt vous allez prendre en charge.<\/p>\n<p>Reprenons notre base OpensStreetMap. Vous avez un champ \u00ab\u00a0cost\u00a0\u00bb qui reprend la longueur du tron\u00e7on en degr\u00e9s. Si vous utilisez ce champ dans l&rsquo;algorithme A* comme valeur de co\u00fbt, l&rsquo;itin\u00e9raire propos\u00e9 sera le plus court chemin entre les deux points choisis. Voyons un exemple.<\/p>\n<p>La commande suivante calcule l&rsquo;itin\u00e9raire entre les points 69072 et 64204 en utilisant le champ \u00ab\u00a0cost\u00a0\u00bb qui correspond \u00e0 la longueur du tron\u00e7on.<\/p>\n<p><strong>SELECT seq, id1 AS node, id2 AS edge, di.cost, the_geom<\/strong><br \/>\n<strong> FROM pgr_astar(<\/strong><br \/>\n<strong> &lsquo;SELECT gid as id, source::integer, target::integer, cost::double precision, x1, y1, x2, y2 FROM public.ways&rsquo;,<\/strong><br \/>\n<strong> 69072, 64204, false, false<\/strong><br \/>\n<strong> ) as di<\/strong><br \/>\n<strong> JOIN public.ways ways_vertices_pgr<\/strong><br \/>\n<strong> ON di.id2 = ways_vertices_pgr.gid ;<\/strong><\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg1.png\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"3271\" data-permalink=\"https:\/\/www.sigterritoires.fr\/index.php\/developper-une-application-avec-pgrouting-sous-windows-2lalgorithme-a-star\/3pg1\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg1.png?fit=1023%2C677&amp;ssl=1\" data-orig-size=\"1023,677\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"3pg1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg1.png?fit=640%2C424&amp;ssl=1\" class=\"aligncenter size-full wp-image-3271\" src=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg1.png?resize=640%2C424\" alt=\"calcul avec cout \u00e9gal \u00e0 la longueur du tron\u00e7on\" width=\"640\" height=\"424\" srcset=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg1.png?w=1023&amp;ssl=1 1023w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg1.png?resize=300%2C199&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg1.png?resize=768%2C508&amp;ssl=1 768w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a>Le r\u00e9sultat, une fois charg\u00e9 dans QGis, est le suivant:<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg2.png\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"3272\" data-permalink=\"https:\/\/www.sigterritoires.fr\/index.php\/developper-une-application-avec-pgrouting-sous-windows-2lalgorithme-a-star\/3pg2\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg2.png?fit=1531%2C869&amp;ssl=1\" data-orig-size=\"1531,869\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"3pg2\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg2.png?fit=640%2C363&amp;ssl=1\" class=\"aligncenter size-large wp-image-3272\" src=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg2-1024x581.png?resize=640%2C363\" alt=\"r\u00e9sultat dans qgis \" width=\"640\" height=\"363\" srcset=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg2.png?resize=1024%2C581&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg2.png?resize=300%2C170&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg2.png?resize=768%2C436&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg2.png?resize=1200%2C681&amp;ssl=1 1200w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg2.png?w=1531&amp;ssl=1 1531w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg2.png?w=1280&amp;ssl=1 1280w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a>A pied, c&rsquo;est le meilleur chemin. Mais en voiture on ne le prendrait jamais! Des petites rues avec des zones 30km\/h en lieu et place d&rsquo;une voie rapide \u00e0 110km\/h&#8230;<\/p>\n<p>Dans la table OSM vous trouvez un autre champ, d\u00e9nomm\u00e9 cost_s. Celui-ci est le r\u00e9sultat du calcul du temps de parcours en secondes , en prenant les informations de longueur et de vitesse autoris\u00e9e pour chaque tron\u00e7on.<\/p>\n<p>Si on modifie la requ\u00eate sql pour utiliser ce champ:<\/p>\n<p><strong>SELECT seq, id1 AS node, id2 AS edge, di.cost, the_geom<\/strong><br \/>\n<strong> FROM pgr_astar(<\/strong><br \/>\n<strong> &lsquo;SELECT gid as id, source::integer, target::integer, cost_s::double precision as cost, x1, y1, x2, y2 FROM public.ways&rsquo;,<\/strong><br \/>\n<strong> 69072, 64204, false, false<\/strong><br \/>\n<strong> ) as di<\/strong><br \/>\n<strong> JOIN public.ways ways_vertices_pgr<\/strong><br \/>\n<strong> ON di.id2 = ways_vertices_pgr.gid ;<\/strong><\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg3.png\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"3275\" data-permalink=\"https:\/\/www.sigterritoires.fr\/index.php\/developper-une-application-avec-pgrouting-sous-windows-2lalgorithme-a-star\/3pg3\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg3.png?fit=1103%2C685&amp;ssl=1\" data-orig-size=\"1103,685\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"3pg3\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg3.png?fit=640%2C398&amp;ssl=1\" class=\"aligncenter size-large wp-image-3275\" src=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg3-1024x636.png?resize=640%2C398\" alt=\"utilisation du cout en temps (secondes)\" width=\"640\" height=\"398\" srcset=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg3.png?resize=1024%2C636&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg3.png?resize=300%2C186&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg3.png?resize=768%2C477&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg3.png?w=1103&amp;ssl=1 1103w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a>Le r\u00e9sultat, une fois charg\u00e9 dans QGis est le suivant (trac\u00e9 en rouge)<\/p>\n<h3><a href=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg4.png\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"3276\" data-permalink=\"https:\/\/www.sigterritoires.fr\/index.php\/developper-une-application-avec-pgrouting-sous-windows-2lalgorithme-a-star\/3pg4\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg4.png?fit=1537%2C885&amp;ssl=1\" data-orig-size=\"1537,885\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"3pg4\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg4.png?fit=640%2C369&amp;ssl=1\" class=\"aligncenter size-large wp-image-3276\" src=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg4-1024x590.png?resize=640%2C369\" alt=\"r\u00e9sultat dans qgis du trajet en temps\" width=\"640\" height=\"369\" srcset=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg4.png?resize=1024%2C590&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg4.png?resize=300%2C173&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg4.png?resize=768%2C442&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg4.png?resize=1200%2C691&amp;ssl=1 1200w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg4.png?w=1537&amp;ssl=1 1537w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg4.png?w=1280&amp;ssl=1 1280w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a>Probl\u00e8me : cost_s a des valeurs nulles<\/h3>\n<p>Il y a des fortes chances pour que la derni\u00e8re requ\u00eate SQL vous retourne une erreur disant que cost_s a des valeurs nulles.<\/p>\n<p>Ceci vient du fait que le champ qui est utilis\u00e9 par osm2pgrouting pour calculer le co\u00fbt en secondes est la longueur du tron\u00e7on en m (length_m), et que ce champ n&rsquo;est pas toujours renseign\u00e9.<\/p>\n<h3>SOLUTION:<\/h3>\n<p>Avec QGis en ayant charg\u00e9 la couche <em><strong>ways<\/strong><\/em>, s\u00e9lectionnez <em><strong>Projet-&gt;propri\u00e9t\u00e9s du projet-&gt;SCR<\/strong><\/em><\/p>\n<p>Cochez la case <em><strong><a href=\"https:\/\/www.sigterritoires.fr\/index.php\/projection-qgis-crs\/\">Projection<\/a> \u00e0 la vol\u00e9e<\/strong><\/em> et s\u00e9lectionnez une projection plane, Lambert 95 par exemple.<\/p>\n<p>Ouvrez la table attributaire de <em><strong>ways<\/strong><\/em>, passez la table en mode \u00e9dition.<\/p>\n<p>S\u00e9lectionnez tous les enregistrements avec <em><strong>cost_s<\/strong><\/em> nuls<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg1.png\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"3278\" data-permalink=\"https:\/\/www.sigterritoires.fr\/index.php\/developper-une-application-avec-pgrouting-sous-windows-2lalgorithme-a-star\/2pg1\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg1.png?fit=977%2C601&amp;ssl=1\" data-orig-size=\"977,601\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"2pg1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg1.png?fit=640%2C394&amp;ssl=1\" class=\"aligncenter size-full wp-image-3278\" src=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg1.png?resize=640%2C394\" alt=\"s\u00e9lection de cost_s avec valeur nulle\" width=\"640\" height=\"394\" srcset=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg1.png?w=977&amp;ssl=1 977w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg1.png?resize=300%2C185&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg1.png?resize=768%2C472&amp;ssl=1 768w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a>Vous constaterez que les enregistrements s\u00e9lectionn\u00e9s ont une <em><strong>length_m<\/strong><\/em> nulle aussi.<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg2.png\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"3279\" data-permalink=\"https:\/\/www.sigterritoires.fr\/index.php\/developper-une-application-avec-pgrouting-sous-windows-2lalgorithme-a-star\/2pg2\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg2.png?fit=858%2C605&amp;ssl=1\" data-orig-size=\"858,605\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"2pg2\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg2.png?fit=640%2C451&amp;ssl=1\" class=\"aligncenter size-full wp-image-3279\" src=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg2.png?resize=640%2C451\" alt=\"length_m nulles\" width=\"640\" height=\"451\" srcset=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg2.png?w=858&amp;ssl=1 858w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg2.png?resize=300%2C212&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg2.png?resize=768%2C542&amp;ssl=1 768w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p>Avec la calculatrice de champ cochez la case <em><strong>Mettre \u00e0 jour un champ existant<\/strong><\/em>, s\u00e9lectionnez le champ <em><strong>lenght_m<\/strong><\/em> et dans <strong>Expression<\/strong> tapez <em><strong>$length<\/strong><\/em><\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg3.png\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"3280\" data-permalink=\"https:\/\/www.sigterritoires.fr\/index.php\/developper-une-application-avec-pgrouting-sous-windows-2lalgorithme-a-star\/2pg3\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg3.png?fit=820%2C654&amp;ssl=1\" data-orig-size=\"820,654\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"2pg3\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg3.png?fit=640%2C510&amp;ssl=1\" class=\"aligncenter size-full wp-image-3280\" src=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg3.png?resize=640%2C510\" alt=\"calcul de lenght_m avec la calculatrice de champ\" width=\"640\" height=\"510\" srcset=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg3.png?w=820&amp;ssl=1 820w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg3.png?resize=300%2C239&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg3.png?resize=768%2C613&amp;ssl=1 768w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a>Ceci renseignera le champ avec la longueur du tron\u00e7on, calcul\u00e9e selon le syst\u00e8me de coordonn\u00e9es actuel de QGis (lambert95 par exemple).<\/p>\n<p>Maintenant vous pouvez mettre \u00e0 jour le champ <em><strong>cost_s<\/strong> <\/em>avec l&rsquo;expression<\/p>\n<p><strong>(\u00ab\u00a0length_m\u00a0\u00bb * 3600) \/ (\u00ab\u00a0maxspeed_forward\u00a0\u00bb * 1000)<\/strong><\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg4.png\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"3281\" data-permalink=\"https:\/\/www.sigterritoires.fr\/index.php\/developper-une-application-avec-pgrouting-sous-windows-2lalgorithme-a-star\/2pg4\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg4.png?fit=821%2C656&amp;ssl=1\" data-orig-size=\"821,656\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"2pg4\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg4.png?fit=640%2C511&amp;ssl=1\" class=\"aligncenter size-full wp-image-3281\" src=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg4.png?resize=640%2C511\" alt=\"2pg4\" width=\"640\" height=\"511\" srcset=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg4.png?w=821&amp;ssl=1 821w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg4.png?resize=300%2C240&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/2pg4.png?resize=768%2C614&amp;ssl=1 768w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<h3>Probl\u00e8me: l&rsquo;itin\u00e9raire fonctionne \u00e0 contresens<\/h3>\n<p>Avec les requ\u00eates utilis\u00e9es jusqu&rsquo;\u00e0 pr\u00e9sent, vous pouvez obtenir des r\u00e9sultats tels que le suivant:<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg5.png\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"3285\" data-permalink=\"https:\/\/www.sigterritoires.fr\/index.php\/developper-une-application-avec-pgrouting-sous-windows-2lalgorithme-a-star\/3pg5\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg5.png?fit=1525%2C855&amp;ssl=1\" data-orig-size=\"1525,855\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"3pg5\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg5.png?fit=640%2C359&amp;ssl=1\" class=\"aligncenter size-large wp-image-3285\" src=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg5-1024x574.png?resize=640%2C359\" alt=\"itin\u00e9raire \u00e0 contresens\" width=\"640\" height=\"359\" srcset=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg5.png?resize=1024%2C574&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg5.png?resize=300%2C168&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg5.png?resize=768%2C431&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg5.png?resize=1200%2C673&amp;ssl=1 1200w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg5.png?w=1525&amp;ssl=1 1525w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg5.png?w=1280&amp;ssl=1 1280w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a>L&rsquo;itin\u00e9raire calcul\u00e9 vous propose de sortir de la voie rapide et de la r\u00e9emprunter \u00e0 contresens!<\/p>\n<p>Dans les donn\u00e9es OSM, un champ oneway indique, s&rsquo;il est \u00e9gal \u00e0 1, que le tron\u00e7on n&rsquo;a qu&rsquo;un sens de parcours. Les algorithmes de pgrouting n&rsquo;utilisent pas directement ce champ. Ils utilisent le champ <em><strong>reverse_cost<\/strong><\/em>.<\/p>\n<p>Vous avez donc un champ <em><strong>cost<\/strong> <\/em>et un champ <em><strong>reverse_cost<\/strong><\/em>. Si la valeur de ces deux champs est la m\u00eame, ceci est compris par l&rsquo;algorithme comme une route \u00e0 double sens. L&rsquo;itin\u00e9raire propos\u00e9 pourra donc aller dans les deux sens.<\/p>\n<p>Si <em><strong>reverse_cost<\/strong><\/em> a une valeur n\u00e9gative, il n&#8217;empruntera jamais ce tron\u00e7on dans le sens inverse mais toujours du n\u0153ud <em><strong>source<\/strong> <\/em>vers le n\u0153ud <em><strong>target<\/strong><\/em>. Le tron\u00e7on est imm\u00e9diatement \u00e9cart\u00e9 du graphe r\u00e9sultat. Si non, vous pouvez aussi affecter une valeur extr\u00eamement grande (par exemple 1000000) aux reverse_costs des tron\u00e7ons \u00e0 sens unique. Dans ce cas le tron\u00e7on sera \u00e9valu\u00e9 (d\u00e9favorablement) mais pas \u00e9cart\u00e9 d&#8217;embl\u00e9e.<\/p>\n<p>Pour que l&rsquo;algorithme prenne en compte ces valeurs il faut modifier les deux param\u00e8tres bool\u00e9ens de la requ\u00eate SQL <em><strong>directed<\/strong> <\/em>et <em><strong>has_reverse<\/strong><\/em>. Il y a quelques subtilit\u00e9s qui d\u00e9passent le cadre de cet article en ce qui est de modifier seulement un des deux param\u00e8tres (true,false&nbsp; et false,true). Globalement, vous mettez les deux param\u00e8tres \u00e0 <strong>true<\/strong> pour que l&rsquo;algorithme fonctionne en prenant en compte les sens interdits.<\/p>\n<p>Voici la requ\u00eate telle qu&rsquo;elle doit \u00eatre pour ne pas avoir le probl\u00e8me de contresens sur la voie express:<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg6.png\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"3289\" data-permalink=\"https:\/\/www.sigterritoires.fr\/index.php\/developper-une-application-avec-pgrouting-sous-windows-2lalgorithme-a-star\/3pg6\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg6.png?fit=1317%2C673&amp;ssl=1\" data-orig-size=\"1317,673\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"3pg6\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg6.png?fit=640%2C327&amp;ssl=1\" class=\"aligncenter size-large wp-image-3289\" src=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg6-1024x523.png?resize=640%2C327\" alt=\"modifications des champs bool\u00e9ens\" width=\"640\" height=\"327\" srcset=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg6.png?resize=1024%2C523&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg6.png?resize=300%2C153&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg6.png?resize=768%2C392&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg6.png?resize=1200%2C613&amp;ssl=1 1200w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/05\/3pg6.png?w=1317&amp;ssl=1 1317w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<h3>Probl\u00e8me: reverse_costs_s a des valeurs nulles<\/h3>\n<p>Comme pour le champ <em><strong>cost_s<\/strong><\/em>, ceci vient du fait que le champ qui est utilis\u00e9 par osm2pgrouting pour calculer le co\u00fbt en secondes est la longueur du tron\u00e7on en m (<em><strong>length_m<\/strong><\/em>), et que ce champ n&rsquo;est pas toujours renseign\u00e9.<\/p>\n<h3>SOLUTION<\/h3>\n<p>Comme vous avez en principe rempli toutes les valeurs de <em><strong>costs_s<\/strong><\/em>, il suffit de s\u00e9lectionner dans la table de QGis tous les enregistrements avec des valeurs <em><strong>reverse_costs_s<\/strong><\/em> nulles, puis avec la calculatrice de champs affecter la valeur de <em><strong>costs_s<\/strong><\/em> \u00e0 <em><strong>reverse_costs_s<\/strong><\/em>.<\/p>\n<p>Nous avons donc, nous m\u00eames, g\u00e9n\u00e9r\u00e9 le probl\u00e8me suivant:<\/p>\n<h3>Probl\u00e8me: reverse_costs_s ne prend pas en compte les sens interdits (m\u00eame valeur que les costs_s correspondants)<\/h3>\n<h3>SOLUTION<\/h3>\n<p>S\u00e9lectionnez les enregistrements avec <em><strong>oneway<\/strong> <\/em>= 1, puis affectez la valeur <em><strong>-costs_s<\/strong><\/em> au champ <em><strong>reverse_costs_s<\/strong><\/em><\/p>\n<p>Les solutions aux deux derniers probl\u00e8mes partent de la base que vous utilisez les donn\u00e9es OSM et font que les tous les enregistrements soient coh\u00e9rents. Bien \u00e9videment, si vous avez un r\u00e9seau particulier et que vous avez adopt\u00e9 d&rsquo;autres sp\u00e9cifications, il faudra adapter les requ\u00eates pour respecter vos d\u00e9finitions.<\/p>\n<p>Nous avons fini le tour de l&rsquo;algorithme A* et de ses probl\u00e8mes les plus courants. Si vous en trouvez d&rsquo;autres (je vous fais confiance), n&rsquo;h\u00e9sitez pas \u00e0 laisser un commentaire.<\/p>\n<p>Dans le prochain article nous verrons comment(ne) fonctionnent (pas) les autres algorithmes de routage sous Windows.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>L&rsquo;extension pgrouting propose divers algorithmes pour rechercher le meilleur itin\u00e9raire :Dijkstra, A*,Ksp,Trsp,&#8230; Dans cet article nous allons voir en d\u00e9tail l&rsquo;utilisation de a* (A-star).<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"give_campaign_id":0,"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"sfsi_plus_gutenberg_text_before_share":"","sfsi_plus_gutenberg_show_text_before_share":"","sfsi_plus_gutenberg_icon_type":"","sfsi_plus_gutenberg_icon_alignemt":"","sfsi_plus_gutenburg_max_per_row":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[311,62],"tags":[329,327,326,227,312,58],"class_list":["post-3261","post","type-post","status-publish","format-standard","hentry","category-postgresql","category-qgis-2","tag-a-star","tag-itineraire","tag-pgrouting","tag-postgis","tag-postgresql","tag-qgis"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p6XU0A-QB","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/posts\/3261","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/comments?post=3261"}],"version-history":[{"count":0,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/posts\/3261\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/media?parent=3261"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/categories?post=3261"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/tags?post=3261"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}