import argparse import json import pandas as pd # définir le parseur d'arguments parser = argparse.ArgumentParser(description="Convertir un fichier GeoJSON en CSV et ajouter des colonnes latitude et longitude") parser.add_argument("geojson", help="Le chemin du fichier GeoJSON à convertir") parser.add_argument("-o", "--output", default=None, help="Le nom du fichier de sortie CSV (par défaut: le même nom que le fichier GeoJSON avec l'extension CSV)") args = parser.parse_args() # charger le fichier GeoJSON en tant que liste de features with open(args.geojson, "r") as f: data = json.load(f) # afficher le décompte des éléments print("Nombre d'éléments dans le fichier GeoJSON :", len(data["features"])) # initialiser un ensemble pour stocker les clés de toutes les features all_keys = set() # parcourir chaque feature pour trouver les clés de tag for feature in data["features"]: # ajouter les clés de la feature à l'ensemble all_keys.update(feature["properties"]["tags"].keys()) # convertir l'ensemble en liste et trier les clés columns = sorted(list(all_keys)) # initialiser le dataframe avec les colonnes définies ci-dessus df = pd.DataFrame(columns=["id", "latitude", "longitude"] + columns) # parcourir chaque feature pour ajouter une nouvelle ligne au dataframe avec les valeurs de chaque tag for feature in data["features"]: # définir la latitude et la longitude selon la première coordonnée si la géométrie est de type Linestring if feature["geometry"]["type"] == "LineString": latitude = feature["geometry"]["coordinates"][0][1] longitude = feature["geometry"]["coordinates"][0][0] else: latitude = feature["geometry"]["coordinates"][1] longitude = feature["geometry"]["coordinates"][0] row = { "id": feature["properties"]["id"], "latitude": latitude, "longitude": longitude } # ajouter les valeurs de chaque tag à la ligne for key in columns: row[key] = feature["properties"]["tags"].get(key, "") df = df._append(row, ignore_index=True) # définir le nom du fichier de sortie CSV if args.output: output_file = args.output else: output_file = os.path.splitext(args.geojson)[0] + ".csv" print('fichier csv converti : ', output_file) # convertir le dataframe en CSV en incluant toutes les colonnes df.to_csv(output_file, sep=";", index=False)