Skip to content

FR—rendering

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

rendering

le style commence par la définition de

propriété "générique"

les menus optionnels, par exemple :

	<!-- ajout cricri enlève balisages -->
	<renderingProperty attr="balisage" name="cacher balisages" description="cacher balisages" type="boolean" possibleValues="" category="hide"/>

ou "balisage" devra être appelé à chaque fois que l'on voudra que le(s) éléments qui suivent soient masqués

		<!-- balisages pedestre -->
		<switch  balisage="false" >
			`<case minzoom="12" tag="network_iwn" value="" color="#ffddaa" shadowColor="#99ffddaa"  strokeWidth="0.1:1" />

ce "switch" apparaitra dans le menu "hide" des options du style.

cacher_balisages

ensuite la définition des

"variables"

qui pourront être réutilisées à volonté pour remplacer une valeur à condition de mettre $avant_leur_nom,
par exemple la couleur des chemins

	<renderingAttribute name="trackColor">
		<case attrColorValue="#996600"/>
	</renderingAttribute>

chaque fois que l'on voudra utiliser cette variable (ici une couleur en hexadecimal RVB) on mettra $trackcolor à la place de #RVB

				<!-- carrossable -->
				<switch >
					<case additional="surface=pebblestone" />
					<case additional="smoothness=very_bad" />
					<case additional="tracktype=grade3" />
					<apply minzoom="12" color_5="$trackColor" >

l'intérêt étant de n'avoir à modifier que la variable pour que ce soit mis à jour dans tout le reste du style.

cas de <renderingAttribute name="routeInfo_roadClass">

il défini le contenu du bloc "Type de route" dans les "Détails" du calcul d'itinéraire
ATTENTION il peut faire planter iOS avec des attrStringValue différents de ceux utilisés par défaut (précisions à venir après tests)

		<case tag="highway" value="track" attrColorValue="$trackColor" attrStringValue="highway_class_track"/><!-- traduit Piste-->
		<case tag="highway" value="path" attrColorValue="#ff0000" attrStringValue="highway_class_path"/><!-- traduit chemin-->
		<case tag="highway" value="pedestrian" attrColorValue="#ff0000" attrStringValue="highway_class_path"/>
		<case tag="highway" value="footway"  attrColorValue="#ff0000" attrStringValue="highway_class_path"/>
		<case tag="highway" value="bridleway" attrColorValue="#ff0000" attrStringValue="highway_class_bridleway"/>
		<case tag="highway" value="steps" attrColorValue="#ff0000" attrStringValue="highway_class_steps"/>
		<case tag="highway" value="cycleway" attrColorValue="#ff0000" attrStringValue="highway_class_cycleway"/>
	</renderingAttribute>

type_toute

<renderingAttribute name="routeInfo_tracktype">

défini le contenu du bloc "Dureté de la surface" dans les "Détails" du calcul d'itinéraire
pas de limitations, vous pouvez l'organiser/nommer comme vous voulez

	<renderingAttribute name="routeInfo_tracktype"> <!-- dureté de la surface-->
		<case tag="highway" value="service" attrColorValue="$trackColor" attrStringValue="carrossable"/>
		<case additional="tracktype=grade1" attrColorValue="$trackColor" attrStringValue="carrossable"/>
		<case additional="tracktype=grade2" attrColorValue="$trackColor" attrStringValue="carrossable"/>
		<case additional="tracktype=grade3" attrColorValue="$trackColor" attrStringValue="carrossable grossier"/>
		<case additional="tracktype=grade4" attrColorValue="$trackColor_2" attrStringValue="carrossable selon météo"/>
		<case additional="tracktype=grade5" attrColorValue="$trackColor_2" attrStringValue="sol nu"/>
		<case tag="highway" value="track" attrColorValue="$trackColor_2" attrStringValue="chemin non précisé"/>
		<case tag="highway" value="path" attrColorValue="#ff0000" attrStringValue="sentier"/>
		<case tag="highway" value="footway" attrColorValue="#ff0000" attrStringValue="sentier"/>
		<case tag="highway" value="bridleway" attrColorValue="#ff0000" attrStringValue="cavalier"/>
		<case tag="highway" value="steps" attrColorValue="#ff0000" attrStringValue="escalier"/>
		<case tag="highway" value="cycleway" attrColorValue="#ff0000" attrStringValue="piste cyclable"/>

dureté

order

les éléments qui ne figurent pas dans ce paragraphe ne seront pas affichés (utilisez des jokers ou des définitions vides ="")
la valeur va de 1 à 200, 1 étant le plus en dessous de la pile lors de l'affichage (les polygons en premier, les lignes ensuite et enfin les points)

si vous ne voyez pas un élément que vous savez exister dans OpenStreetMap, commencez par vérifier s'il est bien inclus par OsmAnd dans la carte en le cherchant avec son tag osm dans ce fichier
si vous l'avez trouvé et que vous ne le voyez pas, vérifiez dans ce chapitre "order" de votre style s'il est bien traité quelque part ...
vous pouvez "tricher" (pour test par exemple) en rajoutant avant la fin du chapitre ceci qui fera apparaitre n'importe quel élément

`			<case tag="" value=""/>`



il existe quelques subtilités comme obtenir (ou pas) un point depuis un polygon
convertir un polygon en line (pas de remplissage)

ici les polygons des parcs nationaux sans remplissage car déjà rempli par l’attribut "reserve naturelle" qui permet une transparence
leur contour devenu "line" sera utilisable dans le rendu et pour récupérer le texte à afficher via le point créé

		<case tag="boundary" value="national_park" order="2" ignorePolygonArea="true"/>
		<case tag="boundary" value="protected_area" order="1"  ignorePolygonArea="true"/>

voir mes commentaires dans le fichier pour le "text on path"

text

tout ce qui concerne les textes affichés dans le style, peu importe l'élément
ATTENTION l'ordre est inversé par rapport au paragraphe "order", plus le chiffre est petit plus le texte est prioritaire à l'affichage
il peut même selon les paramètres rester au dessus des autres et les masquer
je n'ai pas réussi à vraiment comprendre l'incidence des ces paramètres intersectionMargin intersectionSizeFactor intersectsWith
le textMinDistance permet de gérer le nombre de texte de même type affichés (le long d'une rivière par exemple), plus il est petit (en pixel ?) plus il y à de texte affichés
c'est ici que se gère les icônes le long des balisages par exemple ou les ref des routes

par exemple les icones des parcours VTT

		<!-- MTB icon -->
		<switch lessDetailed="false" balisage="false" minzoom="14" textOnPath="false" textSize="0" textOrder="169"  >
				<case tag="route_mtb" value=""  nameTag="name"/>
				<case tag="route_mtb" value=""  />
				<apply icon="osmc_blue_bicycle" textShield="osmc_blue_circle_bg">
					<case maxzoom="14"  intersectionMargin="60" textMinDistance="450"/>
					<case minzoom="15"  intersectionMargin="30" textMinDistance="300"/>
				</apply>
				<apply_if nightMode="true" icon="osmc_blue_bicycle" textShield="osmc_blue_circle_bg" textMinDistance="130"/>
		</switch>

avec les réglages qui gèrent la quantité de symboles affichés (textMinDistance et intersectionMargin qui repousse ou supprime les autres textes à proximité)
ici 2 réglages selon le zoom pour la quantité de symboles affichés (ces paramètres nécessitent beaucoup de tests sur différentes résolution de périphérique pour être satisfaisants)

vtt
ou chaque icone permet dans les dernières versions d' OsmAnd de charger l'itinéraire (ici VTT) comme une trace avec les infos associées

point

ATTENTION l'ordre est inversé par rapport au paragraphe "order", plus le chiffre est petit plus le point (l'icone) est prioritaire à l'affichage
iconVisibleSize ne semble pas fonctionner

c'est ici que vous choisissez parmi les icones imposées par OsmAnd et disponibles ici

polygon

rien de particulier si vous avez bien géré vos "order" (polygon en line ou point au centre du polygon)

ici les surfaces "eau"

		<!-- water -->
		<switch color="#7ad1ed">
			<switch>
				<case minzoom="1" tag="natural" value="coastline"/>
				<case minzoom="10" tag="natural" value="water"/>
				<case minzoom="10" tag="landuse" value="reservoir"/>
				<case minzoom="10" tag="landuse" value="salt_pond"/>
				<case minzoom="12" tag="waterway" value="riverbank"/>
				<case minzoom="14" tag="landuse" value="basin"/>
				<apply color_2="#90c0ff" strokeWidth_2="1:1"/>
			</switch>

"color" est la couleur de remplissage
"color_2" est la couleur du contour a laquelle vous devez impérativement associer un "strokeWidth_2" pour définir son épaisseur

ATTENTION ne pas utiliser "color_0" comme remplissage (héritée de shader), le polygon sera invisible en OpenGL.

line

rien de particulier si vous avez bien géré vos "order" (polygon en line)

chaque ligne peut avoir en plus des attributs "color" un attribut "shadowColor" qui est la bordure (pratique pour les route mais avec certains défauts, comme par exemple un ordre qui ne suit pas celui de la ligne)

chaque ligne peut avoir plusieurs attributs "color" (color, color_0, color_1 etc) il faut à chaque fois lui définir son "strokeWidth" selon le même principe de numérotation, ce qui permet de définir une ligne plusieurs fois, comme pour les ponts par exemple ou "color" est la couleur de la route et "color_1" la couleur de la route quand elle est un pont.
les couleurs se recouvrent les unes les autres selon leur index (0 en dessous de 1 en dessous de 2 etc)

il y-à de nombreuses limitations liées au moteur de rendu (openGL sur iOS, java sur Android) à la définition des périphériques et les niveaux de zoom, il est assez complexe d'obtenir parfois le rendu désiré et il faut "tricher".