add computing from osm history
This commit is contained in:
parent
da60f964ab
commit
66bbce5e85
13 changed files with 3921 additions and 0 deletions
167
counting_osm_objects/get_all_polys.py
Executable file
167
counting_osm_objects/get_all_polys.py
Executable file
|
@ -0,0 +1,167 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
Script pour récupérer les polygones de toutes les communes françaises listées dans un fichier CSV.
|
||||
|
||||
Ce script:
|
||||
1. Ouvre le fichier osm-commerces-villes-export.csv
|
||||
2. Extrait les codes INSEE (colonne 'zone')
|
||||
3. Pour chaque code INSEE, vérifie si le polygone existe déjà
|
||||
4. Si non, utilise get_poly.py pour récupérer le polygone
|
||||
|
||||
Usage:
|
||||
python get_all_polys.py
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import csv
|
||||
from get_poly import query_overpass_api, extract_polygon, save_polygon_to_file
|
||||
|
||||
# Chemin vers le fichier CSV contenant les codes INSEE
|
||||
CSV_FILE = os.path.join(
|
||||
os.path.dirname(os.path.abspath(__file__)), "osm-commerces-villes-export.csv"
|
||||
)
|
||||
|
||||
# Chemin vers le dossier où sont stockés les polygones
|
||||
POLYGONS_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "polygons")
|
||||
|
||||
|
||||
def ensure_polygons_dir_exists():
|
||||
"""
|
||||
Vérifie que le dossier 'polygons' existe, sinon le crée.
|
||||
"""
|
||||
os.makedirs(POLYGONS_DIR, exist_ok=True)
|
||||
print(f"Dossier de polygones: {POLYGONS_DIR}")
|
||||
|
||||
|
||||
def polygon_exists(insee_code):
|
||||
"""
|
||||
Vérifie si le polygone pour le code INSEE donné existe déjà.
|
||||
|
||||
Args:
|
||||
insee_code (str): Le code INSEE de la commune
|
||||
|
||||
Returns:
|
||||
bool: True si le polygone existe, False sinon
|
||||
"""
|
||||
polygon_file = os.path.join(POLYGONS_DIR, f"commune_{insee_code}.poly")
|
||||
return os.path.isfile(polygon_file)
|
||||
|
||||
|
||||
def get_polygon(insee_code):
|
||||
"""
|
||||
Récupère le polygone pour le code INSEE donné.
|
||||
|
||||
Args:
|
||||
insee_code (str): Le code INSEE de la commune
|
||||
|
||||
Returns:
|
||||
str: Le chemin du fichier polygone créé, ou None en cas d'erreur
|
||||
"""
|
||||
try:
|
||||
print(f"Récupération du polygone pour la commune {insee_code}...")
|
||||
|
||||
# Interroger l'API Overpass
|
||||
data = query_overpass_api(insee_code)
|
||||
|
||||
# Extraire le polygone
|
||||
polygon = extract_polygon(data)
|
||||
|
||||
# Sauvegarder le polygone dans un fichier
|
||||
output_file = save_polygon_to_file(polygon, insee_code)
|
||||
|
||||
print(f"Polygone pour la commune {insee_code} sauvegardé dans {output_file}")
|
||||
return output_file
|
||||
except Exception as e:
|
||||
print(f"Erreur lors de la récupération du polygone pour {insee_code}: {e}")
|
||||
return None
|
||||
|
||||
|
||||
def read_insee_codes_from_csv():
|
||||
"""
|
||||
Lit le fichier CSV et extrait les codes INSEE (colonne 'zone').
|
||||
|
||||
Returns:
|
||||
list: Liste des codes INSEE
|
||||
"""
|
||||
insee_codes = []
|
||||
|
||||
try:
|
||||
print(f"Lecture du fichier CSV: {CSV_FILE}")
|
||||
|
||||
if not os.path.isfile(CSV_FILE):
|
||||
print(f"Erreur: Le fichier {CSV_FILE} n'existe pas.")
|
||||
return insee_codes
|
||||
|
||||
with open(CSV_FILE, "r", encoding="utf-8") as csvfile:
|
||||
reader = csv.DictReader(csvfile)
|
||||
|
||||
for row in reader:
|
||||
if "zone" in row and row["zone"]:
|
||||
insee_codes.append(row["zone"])
|
||||
|
||||
print(f"Nombre de codes INSEE trouvés: {len(insee_codes)}")
|
||||
return insee_codes
|
||||
except Exception as e:
|
||||
print(f"Erreur lors de la lecture du fichier CSV: {e}")
|
||||
return insee_codes
|
||||
|
||||
|
||||
def main():
|
||||
"""
|
||||
Fonction principale du script.
|
||||
"""
|
||||
try:
|
||||
# S'assurer que le dossier des polygones existe
|
||||
ensure_polygons_dir_exists()
|
||||
|
||||
# Lire les codes INSEE depuis le fichier CSV
|
||||
insee_codes = read_insee_codes_from_csv()
|
||||
|
||||
if not insee_codes:
|
||||
print("Aucun code INSEE trouvé dans le fichier CSV.")
|
||||
return 1
|
||||
|
||||
# Compteurs pour les statistiques
|
||||
total = len(insee_codes)
|
||||
existing = 0
|
||||
created = 0
|
||||
failed = 0
|
||||
|
||||
# Pour chaque code INSEE, récupérer le polygone s'il n'existe pas déjà
|
||||
for i, insee_code in enumerate(insee_codes, 1):
|
||||
print(f"\nTraitement de la commune {i}/{total}: {insee_code}")
|
||||
|
||||
if polygon_exists(insee_code):
|
||||
print(f"Le polygone pour la commune {insee_code} existe déjà.")
|
||||
existing += 1
|
||||
continue
|
||||
|
||||
# Récupérer le polygone
|
||||
result = get_polygon(insee_code)
|
||||
|
||||
if result:
|
||||
created += 1
|
||||
else:
|
||||
failed += 1
|
||||
|
||||
# Afficher les statistiques
|
||||
print("\nRésumé:")
|
||||
print(f"Total des communes traitées: {total}")
|
||||
print(f"Polygones déjà existants: {existing}")
|
||||
print(f"Polygones créés avec succès: {created}")
|
||||
print(f"Échecs: {failed}")
|
||||
|
||||
return 0 # Succès
|
||||
except KeyboardInterrupt:
|
||||
print("\nOpération annulée par l'utilisateur.")
|
||||
return 1 # Erreur
|
||||
except Exception as e:
|
||||
print(f"Erreur inattendue: {e}")
|
||||
return 1 # Erreur
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
Loading…
Add table
Add a link
Reference in a new issue