On 21. 04. 11 05:30, Nicolas Dumoulin wrote:
Salut,

Je cherchais à obtenir facilement la dénivellée cumulée positive (le D+ quoi) 
d'un itinéraire, et j'ai finalement fait un script python pour utiliser les 
services de mapquest. Voilà ce que ça donne :

#!/usr/bin/python
# -*- coding: utf-8 -*-

import urllib2,sys
from xml.dom import minidom

if __name__ == "__main__":
   if len(sys.argv)!=2:
     print "Usage: "+sys.argv[0]+"<gpx file>"
     sys.exit(1)
   xmldoc = minidom.parse(sys.argv[1])
   latLngCollection=""
   for point in 
xmldoc.getElementsByTagName("gpx")[0].getElementsByTagName("trk")[0].getElementsByTagName("trkseg")[0].getElementsByTagName("trkpt"):
     
latLngCollection+=point.getAttribute("lat")+","+point.getAttribute("lon")+","
   
url="http://open.mapquestapi.com/elevation/v1/getElevationProfile?shapeFormat=raw&outFormat=xml&latLngCollection="+latLngCollection[:-1]
   page = urllib2.urlopen(url).read()
   xmldoc = minidom.parseString(page)
   previous=10000
   total=0
   for elt in 
xmldoc.getElementsByTagName("elevationResponse")[0].getElementsByTagName("distanceHeightCollection")[0].getElementsByTagName("distanceHeight"):
     height=float(elt.getElementsByTagName("height")[0].firstChild.data)
     #print str(height)
     if (height>previous):
       total+=height-previous
     previous=height
   print str(total)

À toutes fins utiles …

Attention à:
1) L'effet fourmi
Si une fourni grimpe sur tout les cailloux sur son chemin, elle va parcourir un D+ énorme
2 ) La précision latérale
A flan de montagne, on augmente artificiellement le D+ à cause de l'imprécision de tracé.

Je suis tombé sur ces deux problèmes pour www.pistes-nordiques.org. Je ne les ai pas résolu, mais j'arrivai à des dénivelés de l'ordre de x1.5 à x2 par rapport à ce que l'on s'attendrait. Je pense qu'il faudrait faire une moyenne glissante, mais je ne vois pas trop comment la calibrer.

Yves

_______________________________________________
dev-fr mailing list
[email protected]
http://lists.openstreetmap.org/listinfo/dev-fr

Répondre à