<br><br><div class="gmail_quote">2010/3/31 sly (sylvain letuffe) <span dir="ltr"><<a href="mailto:sylvain@letuffe.org">sylvain@letuffe.org</a>></span><br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div class="im">On mercredi 31 mars 2010, <a href="mailto:ubuntu@kagou.fr">ubuntu@kagou.fr</a> wrote:<br>
> Bonjour :)<br>
><br>
> Est il possible de calculer le nombre de kilomètres de routes/chemins d'une<br>
> commune ?<br>
<br>
</div>Ma démarche va être pragmatique, Émilie cherche peut-être une précision en<br>
centimètres et cherche donc les super plugins top moumoute, mais ce que je<br>
vais faire, c'est juste un test tout con. Je suis pas convaincu que ce que je<br>
fais soit juste (même plutôt non !), mais je fais mon test sur une rue que je<br>
connais bien, je compare à une mesure faite sur google earth par exemple et<br>
si ça semble pas trop pourri, c'est que ça doit être pas trop mal pour le<br>
besoin exprimé :<br>
<br>
C'est parti :<br>
<br>
- mesure sur google earth de la rue test : "Rue du Chardonet" 148m (de milieu<br>
de route à milieu de route)<br>
<br>
- p'tit coup d'oeil à la doc postgis, on m'informe de st_length( )<br>
clair, ça ne doit pas tenir compte bien fort de la rotondité de la terre, mais<br>
pour une commune, ça devrait aller<br>
<br>
- J'ai une base avec des coordonnées en merkator<br>
<br>
- je tente un coup, erreur d'un facteur 2, bon, ça doit pas le faire pour<br>
conserver les distances<br>
<br>
- prenons un truc de français, la projection lambert, j'ai ça dans ma table<br>
des projections : "RGF93 / Lambert-93" (srid 2154)<br>
<br>
- on tente (elle est en deux morceaux dans osm) :<br>
# select st_length(st_transform(way,2154)),name,osm_id from planet_osm_line<br>
where osm_id=21818269 or osm_id=37417102;<br>
st_length | name | osm_id<br>
------------------+------------------+----------<br>
60.0128023671594 | Rue du Chardonet | 21818269<br>
88.936417938514 | Rue du Chardonet | 37417102<br>
<br>
putain con ! j'ai pas fais exprès : 149m, on va pas se plaindre ;-)<br>
<br>
Y'a pu qu'a :<br>
<br>
# select<br>
sum(st_length(st_transform(rues.way,2154)))/1000 as longueur_totale,<br>
<a href="http://commune.name" target="_blank">commune.name</a><br>
from<br>
planet_osm_line as rues, planet_osm_polygon as commune<br>
where<br>
rues.highway is not null and rues.way && commune.way<br>
and ST_Contains(commune.way, rues.way)<br>
and commune.osm_id=-74386 group by <a href="http://commune.name" target="_blank">commune.name</a>;<br>
longueur_totale | name<br>
------------------+----------<br>
213.543132378272 | Chambéry<br>
(1 row)<br>
<br>
213km pour la commune de chambéry<br>
<br>
Pas de doute, il doit m'en manquer parce que certaines rue sont à cheval, des<br>
nationale ne font que traverser, ma technique doit être approximative, mais<br>
ça flaire la bonne approximation<br>
<br>
Si quelqu'un veut me donner l'id osm pour tester une rue qu'il a mesuré, on<br>
peut voir déjà si les résultats on un semblant de cohérence<br>
<font color="#888888"></font><br></blockquote></div><br>Bah avec ta conversion dans le lambert, tu fais exactement ce que le nouveau type geography fait automatiquement :) Le type geography est capable de trouver la bonne projection pour pouvoir continuer a bosser tranquillement. Ta requête actuelle serait fausse si tu la faisais sur une zone plus large. C'est le point qui avait été mentionné il y a quelques temps avec les zones UTM.<br>
Le support géodésique permet de se débarrasser de ce type d'erreurs et de calculer sur la terre entière d'un coup sans avoir a changer de projection.<br><br>Emilie Laffray<br>