[OSM-talk-fr] Calculer le total kilométrique d'une commune

Emilie Laffray emilie.laffray at gmail.com
Mer 31 Mar 15:23:19 UTC 2010


2010/3/31 sly (sylvain letuffe) <sylvain at letuffe.org>

> On mercredi 31 mars 2010, ubuntu at kagou.fr wrote:
> > Bonjour :)
> >
> > Est il possible de calculer le nombre de kilomètres de routes/chemins
> d'une
> > commune ?
>
> Ma démarche va être pragmatique, Émilie cherche peut-être une précision en
> centimètres et cherche donc les super plugins top moumoute, mais ce que je
> vais faire, c'est juste un test tout con. Je suis pas convaincu que ce que
> je
> fais soit juste (même plutôt non !), mais je fais mon test sur une rue que
> je
> connais bien, je compare à une mesure faite sur google earth par exemple et
> si ça semble pas trop pourri, c'est que ça doit être pas trop mal pour le
> besoin exprimé :
>
> C'est parti :
>
> - mesure sur google earth de la rue test : "Rue du Chardonet" 148m (de
> milieu
> de route à milieu de route)
>
> - p'tit coup d'oeil à la doc postgis, on m'informe de st_length( )
> clair, ça ne doit pas tenir compte bien fort de la rotondité de la terre,
> mais
> pour une commune, ça devrait aller
>
> - J'ai une base avec des coordonnées en merkator
>
> - je tente un coup, erreur d'un facteur 2, bon, ça doit pas le faire pour
> conserver les distances
>
> - prenons un truc de français, la projection lambert, j'ai ça dans ma table
> des projections : "RGF93 / Lambert-93" (srid 2154)
>
> - on tente (elle est en deux morceaux dans osm) :
> # select st_length(st_transform(way,2154)),name,osm_id from planet_osm_line
> where osm_id=21818269 or osm_id=37417102;
>    st_length     |       name       |  osm_id
> ------------------+------------------+----------
>  60.0128023671594 | Rue du Chardonet | 21818269
>  88.936417938514 | Rue du Chardonet | 37417102
>
> putain con ! j'ai pas fais exprès : 149m, on va pas se plaindre ;-)
>
> Y'a pu qu'a :
>
> # select
> sum(st_length(st_transform(rues.way,2154)))/1000 as longueur_totale,
> commune.name
> from
> planet_osm_line as rues, planet_osm_polygon as commune
> where
> rues.highway is not null and rues.way && commune.way
> and ST_Contains(commune.way, rues.way)
> and commune.osm_id=-74386 group by commune.name;
>  longueur_totale  |   name
> ------------------+----------
>  213.543132378272 | Chambéry
> (1 row)
>
> 213km pour la commune de chambéry
>
> Pas de doute, il doit m'en manquer parce que certaines rue sont à cheval,
> des
> nationale ne font que traverser, ma technique doit être approximative, mais
> ça flaire la bonne approximation
>
> Si quelqu'un veut me donner l'id osm pour tester une rue qu'il a mesuré, on
> peut voir déjà si les résultats on un semblant de cohérence
>
>
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.
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.

Emilie Laffray
-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <http://lists.openstreetmap.org/pipermail/talk-fr/attachments/20100331/30840cb2/attachment.htm>


Plus d'informations sur la liste de diffusion Talk-fr