3 votes

Le tracé des relations OpenStreetMap ne génère pas de lignes continues

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éments" ressemble à ça : elements dataframe

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 :

plot of latitudes and longitudes of OSM relation 6750628

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ù.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X