Tous,
J'ai travaillé sur un index de tous les sentiers de VTT dans le monde. Je suis un adepte de Python et j'essaie donc d'utiliser des modules Python pour toutes les étapes du projet.
J'ai pu récupérer des relations à partir de l'API OSM overpass comme ceci :
from OSMPythonTools.overpass import Overpass
overpass = Overpass()
def fetch_relation_coords(relation):
rel = overpass.query('rel(%s); (._;>;); out;' % relation)
return rel
rel = fetch_relation_coords("6750628")
J'ai choisi cette relation particulière (6750628) parce qu'elle est l'une des nombreuses relations qui donnent lieu à des tracés discontinus (ou autrement erronés).
Je traite l'objet "rel" pour obtenir un pandas.DataFrame comme ceci :
elements = pd.DataFrame(rel.toJSON()['elements'])
L'élément pandas.DataFrame contient des lignes de type "relation" (1 dans ce cas), plusieurs de type "way" et plusieurs de type "node". J'avais compris que j'utiliserais la ligne "relation", la colonne "members" pour extraire l'ordre des chemins (qui pointent vers les noeuds), et que j'utiliserais cet ordre pour faire une liste des latitudes et longitudes des noeuds (pour une utilisation ultérieure dans le dépliant), dans l'ordre correct, c'est-à-dire l'ordre qui mène au chemin continu sur une carte.
Or, ce n'est pas le cas. Pour cette relation particulière, je me retrouve avec le tracé suivant :
Si nous comparons cela avec la manière dont la relation est affichée sur openstreetmap.org même, nous voyons que cela tourne mal (concentrez-vous sur la partie centrale, orientale, du parcours). J'ai de nombreux exemples de ce qui se passe, bien qu'il y ait aussi beaucoup de relations qui s'affichent correctement.
Alors je me demandais, qu'est-ce que je rate ? Y a-t-il des nœuds avec des balises qui doivent être ignorés ? J'ai déjà essayé plusieurs choses, y compris de ne pas tenir compte des nœuds avec des balises, mais cela n'a pas aidé. Quelque part, mon traitement est erroné, mais je ne comprends pas où.