import argparse import json import pandas_geojson as pdg import pandas as pd import os # 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 dataframe 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["elements"])) print(json.dumps(data["elements"][0], indent=2)) # for element in data["elements"]: # initialiser un dataframe vide # définir les noms des colonnes à partir des propriétés prises dans la boucle append keys = list(data["elements"][0]['tags'].keys()) columns= keys # columns = ["id", "latitude", "longitude", "name", "shop", "opening_hours", "ref:FR:SIRET", "contact:city","contact:housenumber", "contact:street","contact:postcode","contact:website", "check_date", "email", "phone"] # initialiser le dataframe avec les colonnes définies ci-dessus df = pd.DataFrame(columns=columns) # définir une fonction qui prend en entrée un élément du JSON et renvoie un dictionnaire avec les valeurs correspondantes pour chaque tag def get_element_tags_values(element): values = {} for column in columns[1:]: # on saute la première colonne "id" tag = column.split(":")[-1] # on prend le nom du tag à partir du nom de la colonne values[column] = element["tags"].get(tag, "") values["id"] = element["id"] values["latitude"] = element["lat"] values["longitude"] = element["lon"] return values # parcourir chaque élément dans la clé "elements" for element in data["elements"]: # ajouter une nouvelle ligne au dataframe avec les valeurs de chaque tag df = df._append(get_element_tags_values(element), 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('output_file: ', output_file) # convertir le dataframe en CSV en incluant toutes les colonnes df.to_csv(output_file, sep=";", index=False)