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

Répondre à