Le 11 mars 2013 11:46, Vincent de Chateau-Thierry <v...@laposte.net> a écrit :
> Bonjour,
>
>> De : "Christian Quest"
>
>> Première tentative de rendu des passages piétons en zoom 19...
>>
>> https://twitter.com/cq94/status/311052215412461568/photo/1
>>
>> Qu'en pensez-vous ?
>
> Du bien :-)
> Et le z19 est vraiment pertinent pour ce genre d'info.
>
>> C'est pas trivial... pour l'instant un seul cas de géré, le noeud
>> highway_crossing sur un highway, mais pas à ses extrémités... y'a
>> encore du boulot !
>>
>
> Que le passage piéton soit en extrémité ou pas ne change rien, si ? Ce qui 
> compte en
> revanche c'est le nombre de ways convergeant sur le node : au delà de 2 il 
> est compliqué
> de déterminer un angle pour le picto. J'avais fait une tentative en json [1] 
> avec rendu
> par OpenLayers, mais ça n'était pas satisfaisant.
>

Si il est en extrémité de 2 ways, il faut calculer l'angle de chaque
way, puis faire la moyenne et voir si on reste dans un fourchette
donnée... c'est bientôt fait ;)

Tu as aussi le passage sur un branche en Y... et les croisements en X
là je pense mettre une icône.


> En tout cas sans faire du rendu "fr" un inventaire à la Prevert, je trouve 
> tout à fait
> sympathique de pouvoir illustrer ce niveau de détail, dans lequel figurent 
> aussi par
> exemple les bornes à incendie, les bancs publics, etc. À ce niveau de zoom, 
> on a de la
> place pour ça :-)
>

Entièrement d'accord, ce niveau de zoom permet de rendre visible le
mobilier urbain, et donc de montrer les détails qui peuvent être
présents (par endroit) dans nos data et c'est important de montrer ces
détails tout en conservant un rendu pas trop chargé... tout un
équilibre à trouver !

Pour info, voici la requête qui devrait me permettre de gérer les
passages en Y et X:

select osm_id, ST_GeometryN(st_union(way),1), max(angle)-min(angle) as
angle_diff, avg(angle) as angle from (select p.osm_id, p.way as way,
cast(90+degrees(ST_Azimuth(st_line_interpolate_point(ST_Intersection(st_buffer(p.way,0.1),
h.way),0),st_line_interpolate_point(ST_Intersection(st_buffer(p.way,0.1),
h.way),1))) as integer) % 180 as angle from planet_osm_point p join
planet_osm_line h on (st_intersects(p.way,h.way) and h.highway is not
null and h.highway not in ('footway','cycleway','path','pedestrian'))
where p.highway='crossing' and p.way && !bbox! as crossing group by
osm_id

Le principe:
- récupérer les nœuds "highway=crossing"
- retrouver les highway auxquelles ils appartiennent (ST_Intersects)
- calculer les directions via l'intersection du way avec un petit
buffer autour du noeud (st_buffer + st_intersection +
st_line_interpolate_point + st_azimuth)
- appliquer une rotation de 90° et réduire ça à un intervalle 0-180°
(pour gérer les sens opposés qui au final on le même rendu)
- pour terminer, regrouper tout ça par passage piéton en sortant
l'angle moyen + l'écart maxi des angles des way qui aboutissent sur le
passage piéton

Ne reste plus qu'à la feuille de style de prendre en compte les petits
écarts pour rendre les zebra, et les grands écarts pour mettre une
icône...


Le rendu carto c'est un petit peu plus que du design graphique ;)

-- 
Christian Quest - OpenStreetMap France
Synthèse du Week-end "SOTM-FR" à Lyon : http://openstreetmap.fr/synthese-sotmfr

_______________________________________________
Talk-fr mailing list
Talk-fr@openstreetmap.org
http://lists.openstreetmap.org/listinfo/talk-fr

Répondre à