Skip to content

FR—Routage

Antonin Del Fabbro edited this page Feb 4, 2024 · 1 revision

je suis parti du fichier routing.xml utilisé par OsmAnd pour tous ses profils par défaut et proposé ici

j'ai conservée uniquement la partie concernant l'auto que j'ai adaptée pour 3 usages

  • moto lourde (pneus très routier)
  • moto légère "trail" (pneus 50/50)
  • moto d'enduro

pour suivre les catégories de chemins définies dans le style d'affichage.

parmi les paramètres importants, <attribute name="heuristicCoefficient" value="7.0" /> joue énormément sur la vitesse de calcul d'un itinéraire d'une part et sur sa "conformité" aux critères exprimés ensuite (bien sur c'est inversement proportionnel !!!
plus il est élevé moins les résultats sont "précis" par rapport à un idéal temps/distance entre 2 points.)
c'est assez théorique et dans mes essais je n'ai rien trouvé de vraiment "choquant" quand aux choix de chemins (ce qui m'intéresse en premier lieu)
ici la valeur 7.0 présente un bon compromis vitesse de calcul/choix de chemins, vous pouvez expérimenter d'autres valeurs à volonté.

la partie "routage"

est dans ce bloc qui englobe tous les autres blocs décris après.

<routingProfile name="gros_trail" baseProfile="car" restrictionsAware="true" minSpeed="1" defaultSpeed="30.0" maxSpeed="90.0" sharpTurn="" slightTurn="" roundaboutTurn="" followSpeedLimitations="false" onewayAware="true">
	.....
</routingProfile>

au début de ce bloc les options dans le menu "guidage" du profil auquel sera affecté ce routage, comme ici "pas de chemins" du routage gros trail

<parameter id="avoid_track" name="pas de chemins" description="evite les chemins" type="boolean" default="false"/>

qui se traduit comme ça à l'utilisation
no_chemins

et renvoi au bloc "avoid_track" du bloc "priority" (voir plus loin)

			<if param="avoid_track">
				<select value="0" t="ford" v="yes"/>
				<select value="0" t="surface" v="mud"/>
				<select value="0" t="surface" v="grass"/>
				<select value="0" t="surface" v="sand"/>
				<select value="0" t="surface" v="dirt"/>
				<select value="0" t="surface" v="earth"/>
				<select value="0" t="surface" v="unpaved"/>
				<select value="0" t="surface" v="ground"/>
				<select value="0" t="tracktype" v="grade5"/>
				<select value="0" t="tracktype" v="grade4"/>
				<select value="0" t="surface" v="compacted"/>
				<select value="0" t="surface" v="gravel"/>
				<select value="0" t="surface" v="pebblestone"/>
				<select value="0" t="surface" v="paved"/>
				<select value="0" t="surface" v="paving_stones"/>
				<select value="0" t="tracktype" v="grade3"/>
				<select value="0.2" t="surface" v="fine_gravel"/>
				<select value="1" t="surface" v="asphalt"/>
				<select value="0.8" t="surface" v="concrete"/>
				<select value="0" t="tracktype" v="grade2"/>
				<select value="0.3" t="tracktype" v="grade1"/>
				<select value="0" t="highway" v="track"/><!--chemins sans tags-->
			</if>

ou chaque value="0" interdit l'utilisation pour le routage.
c'est assez paradoxal dans un routage dédié aux chemins de ne vouloir rouler que sur la route ..
mais suite à la demande d'un utilisateur qui voyage beaucoup et qui trouvais que mon routage le faisais passer par de toutes petites routes magnifiques qu'aucun autre GPS n'emprunte jamais, il m'a demandé de faire cette option pour pouvoir passer par ces routes sans prendre de chemins en cas de fatigue de sa part, le plus surprenant est que ça fonctionne en prenant parfois de tout petits bouts de chemins sinon le calcul échouerai.

le bloc "access"

 		<way attribute="access">
			<select value="-1" t="osmand_change" v="delete"/>
			<select value="-1" t="construction" v="yes"/>
			<select value="-1" t="smoothness" v="impassable"/>
			<select value="-1" t="highway" v="path"/>

défini par oui (1) ou non (-1) l'accès et ne sera pas pris en compte pour le guidage. (les if permettent un choix relatif à une option définie au début)

le bloc "oneway"

est repris du défaut OsmAnd, à moins de vouloir rouler à contre-sens pas besoin de le modifier.

le bloc "speed"

sert peu en usage tout terrain, j'ai laissé des valeurs moyennes basées sur mon expérience (vous pouvez les modifier pour voir)

le bloc "priority"

est le plus important de tous pour le choix des chemins avec ses sous-blocs

en premier la définition des "routes" avec pour chaque élément un chiffre compris entre 0 et 1 et au delà de 1, si "1" le moteur de calcul de routage n'applique pas de pénalité, si 0 le moteur évitera cet élément, si supérieur à 1 l'élément sera préféré (je vous renvoi à l'aide incluse dans le fichier de routage d' OsmAnd)
ici pour "gros trail"

			<select value="0.1" t="highway" v="motorway"/>
			<select value="0.1" t="highway" v="motorway_link"/>
			<select value="0.15" t="highway" v="trunk"/>
			<select value="0.15" t="highway" v="trunk_link"/>
			<select value="0.15" t="highway" v="primary"/>
			<select value="0.15" t="highway" v="primary_link"/>
			<select value="0.2" t="highway" v="secondary"/>
			<select value="0.2" t="highway" v="secondary_link"/>
			<select value="0.25" t="highway" v="tertiary"/>
			<select value="0.25" t="highway" v="tertiary_link"/>
			<select value="0.3" t="highway" v="unclassified"/>
			<select value="0.3" t="highway" v="road"/>
			<select value="0.3" t="highway" v="service"/>
			<select value="0.3" t="highway" v="residential"/>
			<select value="0.1" t="highway" v="living_street"/>

			<select value="0.1" t="ford" v="yes"/>
			<select value="0.05" t="surface" v="mud"/>
			<select value="0.05" t="surface" v="grass"/>
			<select value="0.05" t="surface" v="sand"/>
			<select value="0.1" t="surface" v="dirt"/>
			<select value="0.1" t="surface" v="earth"/>
			<select value="0.1" t="surface" v="unpaved"/>
			<select value="0.1" t="surface" v="ground"/>
			<select value="0.1" t="tracktype" v="grade5"/>
			<select value="0.2" t="tracktype" v="grade4"/>
			<select value="2.8" t="surface" v="compacted"/>
			<select value="2.8" t="surface" v="gravel"/>
			<select value="2.8" t="surface" v="pebblestone"/>
			<select value="2.8" t="surface" v="paved"/>
			<select value="2.8" t="surface" v="paving_stones"/>
			<select value="2.8" t="tracktype" v="grade3"/>
			<select value="3" t="surface" v="fine_gravel"/>
			<select value="3" t="surface" v="asphalt"/>
			<select value="3" t="surface" v="concrete"/>
			<select value="3" t="tracktype" v="grade2"/>
			<select value="3" t="tracktype" v="grade1"/>
			<select value="0.1" t="highway" v="track"/><!--chemins sans tags-->

toute la hiérarchie est définie ici les "grade1" ont le chiffre le plus élevé quand une route secondaire à "0.2"
intercalés on trouve les "if" en relation avec les options proposées dans les options de guidage du profil (selon ce qu'elles modifient, l'ordre est important sinon les valeurs ne seront pas appliquées, elles s'appliquent une fois dans l'ordre ou le tag est choisi (un chemin qui est à la fois boue et grade1 ce qui est incohérent mais souvent présent dans osm sera traité une seule fois avec le premier tag appelé, ici je vous conseille de mettre "mud" pour boue en premier ^^)

le bloc "obstacle"

interdit ou pénalise en fonction d'éléments présents dans osm et listés dans le bloc

le bloc "penalty_transition"

ne présente pas d'intérêt pour notre usage (voir doc dans le fichier routing.xml d' OsmAnd)