Le 6 juillet 2013 19:07, Christian Quest <cqu...@openstreetmap.fr> a écrit :

> > Le problème est toujours d'éviter les collisions de labels. Souvent même
> > s'il y a collision, on peut éventuellement déplacer un label déjà placé
> pour
>
> Et non, on ne peut pas... mapnik ne fonctionne pas comme ça.


Je le savais déjà et c'est une limite du modèle de Mapnik dont les "layers"
une fois formées sont définitives et ne conservent rien des objets qui ont
été placés dans les couches précédentes (notamment pas des infos sur les
zones de placement possibles) pusiqu'il en fait le rendu immédiat par
dessus les couches précédentes et que c'est définitif (au mieux il peut
générer des couches séparées non superposées, mais ne garde rien des
tolérances de placement, ce qui rend impossible la résolution ultérieure
des priorités par des placements plus judicieux).

C'est bien à cause de ça que Mapnik fournit des zones totalement vierges de
certaines infos (qu'on a du arbitrairement limiter à des seuils figés
indépendamment du contenu réel, pusiqu'on ne sait pas ce que contiendront
les couches suivantes).

Mapnik a donc ses limites. Mais comme ici on parle des couches finales de
libellés (celles tracées en dernier par dessus les autres), on se demande
s'il est pertinent d'utiliser Mapnik pour les libellés, et si Mapnik ne
devrait être utilisé que pour les couches d'avant (pour produire un fond
vierge), quitte à utiliser autre chosie pour générer séparément des couches
de libellés utilisant des méthodes de placement améliorées. On pourrait
cependant encore utiliser le langage des feuilles de styles actuelles, en y
ajoutant aussi d'autres choses comme la possibilité de calculer côté client
SQL (et non sur le serveur SQL) des géométries dérivées.

Quelques exemples:
- le long des rues ont un placement figé alors qu'on devrait pouvoir éviter
certaines intersections où ils entrent en collision. Pour résoudre ça,
idéalement c'est le segment de rue le plus long qu'il faufrait scinder pour
que le libellé de la rue plus courte franchissant le carrefour puisse
apparaître, et alors la rue la plus longue aura deux libellés, un avant et
un après le carrefour.
- le long des frontières, qui sont souvent longues, on n'est pas obligé de
se placer exactement au milieu, on doit même pouvoir jouer sur les espaces.
De plus à niveau de zoom élevé, on cherche assez loin où est le libellé,
s'il y en a un. Les libellés devraient pouvoir être reproduits plusieurs
fois à distance raisonnable, et au moins pas trop loin des points triples
(point d'intersection de 3 frontières) pour savoir ce que sépare la
frontière, en commençant par chercher à placer plus près du point triple
les libellés plus locaux qu'on ne pourra pas reproduire plusieurs fois,
avant les libellés de zones plus grandes qui ont plus d'opportunités de
placement le long de la frontière.
- pour les zones naturelles désignant des surfaces étendues comme les noms
de massifs montagneux ou d'archipels, ou les noms de mers, on aimerait
pouvoir calculer un squelette filaire afin d'orienter le libellé et le
tailler de façon proportionnelle, et même pouvoir jouer sur l'écartement
des caractères. Le rendu utilisant des lettres assez grandes et grasses
pour qu'ils restent lisibles même si on y superpose des libellés plus
petits.

Actuellement on n'utilise qu'un seul moteur qui est surtout fait pour le
rendu des surfaces ou des traits. on pourrait s'arrêter là, et utiliser un
rendu exécuté aulleurs. Les serveurs de pavages bitmap pourraient aussi
bien demander à télécharger des couches précalculées ailleurs pour créer
les pavages et les mettre dans leur propre cache. Ayant peu de choses à
faire, leur cache serait plus réactif et prendrait en compte des modifs
calculées plus facilement sur plusieurs serveurs. La charge de travail
étant distribuée, on augmente la capacités de calcul à moindre frais, on
favorise les collaborations, il est possible de distribuer la charge avec
des serveurs moins puissants n'ayant pas à gérer le flot de demandes des
utilisateurs finaux. Les utilisateurs finaux passent ensuite par des formes
de proxy Squid qui interrogent les serveurs faisant l'assemblage des tuiles
à la demande avec leur cache local réduit.

Et il devient possible d'avoir des cartes OSM affichant de nombreuses
langues (on peut dédier des serveurs spécialisés pour faire les rendus de
libellés dans des langues différentes. Les possibiltés de réutilisation et
de combinaison des contenus sont multiples, OSM devient une offre
pléthorique supportée par de nombreux acteurs ayant des moyens différents.
Les personnalisations d'apparences et de contenus sont plus nombreuses, et
il n'est alors même pas nécessaire de complexifier le code côté client web,
qui n'a qu'à choisir parmi pléthore d'offres de rendus précombinés ou pas.

Un objet
> placé (label, symbole) ne sera plus déplacé, même si on avait une
> certaine tolérance de placement d'indiquée.
> C'est bien dommage car cela ouvrirai de sacrés progrès, mais c'est à
> mon avis pas simple du tout à coder... mais ça vaut le coup de s'y
> pencher ! yaka !


Yaka en effet.

C'est pourtant ce que doivent utiliser les services carto commerciaux, qui
au passage peuvent aussi chacun garder en plus une base locale contenant
des préférences de placement réglées manuellement (des préférences qui ne
seront utilisées que pour résoudre des conflits automatiques ou pour
modifier certains styles, ou adapter localement le contenu du libellé, ou
pour indiquer qu'on peut s'écarter de la zone de préférence de placement
par défaut en utilisant des flèches ou traits de pointage, ou qui gardent
une trace d'un changement manuel de priorité entre deux labels candidats
(dont les références sources ont été gardées) dont l'un devra être éliminé
du rendu final.

Evidemment pour avoir ce genre de base il faut aussi un outil d'édition
permettant de visualiser les options possibles et les tolérances
précalculées. certaines de ces données seront indépendantes du niveau de
zoom exact (par exemple l'orientation du libellé le long d'un tracé
précalculé et réglé manuellement, et une série de libellés alternatifs de
longueur variable, classables manuellement permettant un choix automatique
selon le zoom (certaines abréviations ne sont pas évidentes à calculer
automatiquement, c'est très contextuel, l'abréviation étant signifiante
selon la zone couverte par le libellé rendu). D'autres critères plus fins
permettent de jouer sur les centrages ou alignements des lignes de libellés
multilignes. On n'a pas obligation à ce que ces lignes restent toutes
centrées, et on peut aussi jouer sur l'interlignage.

Concernant les libellés affichés au centre des surfaces, à niveau de zoom
élevé, on ne les voit plus ni même le long des frontières trop loin. On ne
veut pas non plus surcharger la carte en les répétant plusieurs fois de
façon trop rapprochée (exemple : le libellé "RN" de nos zones naturelles
issu d'un motif de remplissage). Pourtant il serait parfois utile
d'afficher ce libellé en entier au moins une fois dans chaque "métatuile"
affichée à son échelle normale; puis rendre ce libellé de plus en plus
transparent à mesure qu'on zoome pour qu'il disparaisse progressivement sur
des zooms rapprochés (pas le peine de voir "France" partout par exemple,
mais on doit le voir au moins à un niveau de zoom où celle-ci est visible
en entier à une taille de police suffisante pour que le libellé respecte le
style général.

Tout ce qu'on reproche souvent à OSM c'est son manque de travail jsutement
sur les libellés et c'est là qu'on le distingue des rendus "pro" de type
Michelin ou IGN (et même Google lui-même se met à personnaliser les
placements selon les échelles de rendu, il a plein de capacité de stockage
dans ses bases pour pouvoir le faire à tous les niveaux de zoom, même si ça
ne se voit pas dans son interface de "contribution ouverte" proposée à ses
utilisateurs à qui on cache la complexité du système, Google employant des
personnels formés à ce type de tuning de ses cartes, et des informaticiens
pour concevoir des algos de placement plus performants et plus
personnalisés selon le visiteur de ses sites web qui depuis juin
n'affichent plus les mêmes cartes pour tout le monde).

Mapnik c'est très bien mais ça ne suffit plus, et ça demande des ressources
trop élevées et trop coûteuses que trop peu de serveurs peuvent offrir.

On a eu la tenttive de rendu distribué (@Home) mais cela a échoué parce que
les clients le supportant étaient trop peu nombreux mais surtout ne se
synchronisaient pass assez ou n'avaient pas la apacité de calcule
suffisante pour faire trop peu dans le rendu final, tout en en faisant trop
tuile par tuile, ou parce que le travail n'était pas assez bien réparti ni
fiabilisé pour que les trop gros retards soient comblés par d'autres
contributeurs ou par des serveurs aidant à faire ce travail ou à le
maintenir à jour de façon à peu près homogène. Le calcul distribué aurait
eu plus de succès en divisant le travail couche par couche et en demandant
moins de données sources à traiter.

Mais finalement on est revenu au point de départ en reconcentrant le
travail sur un tout petit nombre de serveurs à qui on demande de plus en
plus alors que les moyens n'évoluent pas aussi vite pour les maintenir à la
hauteur des demandes en pleine explosion.

Et TOUS les rendus actuels (d'OSM .org ou .fr ou ailleurs, même chez uMap)
ont des latences importantes qui rendent le système inutilisable par le
grand public hors de zones prédéfinies (avec un support assez pauvre pour
les zones rurales). L'homogénéité des cartes en souffre, les anomalies sont
alors nombreuses et très longues à corriger le retard ne faisant que
s'accentuer un peu partout (on a eu le cas dramatique des lignes de côtes
de Bretagne, encore visible sur le rendu Mapnik de Wikimedia des mois après
que la correction ait été faite sur la base et même des mois après mise à
jour du rendu Mapnik d'OSM; les côtes sont toujours un gros problème lié à
un fort goulot d'étranglement de l'architecture générale).
_______________________________________________
Talk-fr mailing list
Talk-fr@openstreetmap.org
http://lists.openstreetmap.org/listinfo/talk-fr

Répondre à