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