mirror of
https://forge.chapril.org/tykayn/wololo
synced 2025-10-09 17:02:46 +02:00
réinit
This commit is contained in:
commit
996524bc6d
107 changed files with 1295536 additions and 0 deletions
60
mappings/extractors/geojson_to_csv.py
Normal file
60
mappings/extractors/geojson_to_csv.py
Normal file
|
@ -0,0 +1,60 @@
|
|||
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)
|
Loading…
Add table
Add a link
Reference in a new issue