Pour info, voilà la requête utilisée pour le rendu des terrains de sport*:
select *, abs(a12-a23) as angle_diff, (a12+a23+90)/2 as angle from (select way, sport, surface, access, way_area, st_npoints(way2) as nb, osm_id, ST_Distance(st_pointn(way2,1),st_pointn(way2,2)) as d12, ST_Distance(st_pointn(way2,3),st_pointn(way2,2)) as d23,ST_Distance(st_pointn(way2,1),st_pointn(way2,3)) as d13, degrees(st_azimuth(st_pointn(way2,1),st_pointn(way2,2))) as a12, degrees(st_azimuth(st_pointn(way2,2),st_pointn(way2,3))) as a23 from (select *, ST_ExteriorRing(ST_SimplifyPreserveTopology(way,100)) as way2 from planet_osm_polygon where sport in ('tennis','soccer','basketball','rugby','rugby_union','rugby_league','american_football') AND way && !bbox!) as simplified) as simplified2 Que fait-elle ? 1) elle cherche bien sûr les polygones avec les tags sports qui sont pris en compte 2) elle calcule un polygone simplifié au maximum ce qui transforme les patatoïdes en rectangle (ST_SimplifyPreverseTopology + ST_ExteriorRing) 3) elle calcule les longueurs des segments 1-2 2-3 et la diagonale 1-3 (st_distance/st_pointn), ainsi que les orientations des segments 1-2 et 2-3. 4) elle sort le polygone d'origine + la différence d'orientation des 2 premiers segments + l'orientation moyenne + les longueurs et la surface du terrain Ensuite côté feuille de style, des contrôles sont faits pour n'appliquer un SVG que dans certaines limites de dimensions et d'angles, et pour ce qui est des terrains de foot de dimension variable pour adapter le SVG aux dimensions en terrain (3 tailles prises en compte). Bien sûr, c'est un rendu approximatif, qui n'a qu'une vocation d'information, c'est à dire que voir un tracé reconnaissable correspond à un terrain de foot ou de tennis apporte une info graphique sur le type de terrain, pas sur la position exacte des marques. Si les dimensions ou la forme ne permettent pas de caler le SVG, le SVG n'est pas rendu. Bien sûr, les terrains rectangulaires (touche Q dans JOSM) donnent les meilleurs résultats, mais ça marche quand même pas mal pour des cas comme: http://tile.openstreetmap.fr/?zoom=18&lat=48.78543&lon=2.36074 http://tile.openstreetmap.fr/?zoom=18&lat=48.85609&lon=2.4128 http://tile.openstreetmap.fr/?zoom=18&lat=48.88662&lon=2.44061 * rappel, tout est sur github: https://github.com/cquest/osmfr-cartocss -- 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