6.9 KiB
Counting OSM Objects
Ce répertoire contient des scripts pour compter et analyser les objets OpenStreetMap dans différentes zones administratives françaises.
Pour fonctionner vous aurez besoin du fichier historisé de la france, pour cela connectez vous à geofabrik avec votre compte osm (oui c'est relou).
TODO
faire une extraction json de toutes les zones insee de france et réaliser des mesures pour tous les thèmes.
Scripts disponibles
activez le venv python et les dépendances
python -m venv bin/venv activate
source bin/venv/bin/activate
pip install plotly pandas
# extraire un historique pour une ville à partir de l'historique de france et du polygone de la ville
# ici pour paris on peut utiliser l'historique de l'ile de france
wget https://osm-commerces.cipherbliss.com/admin/export_csv
py get_all_polys.py # ce qui utilise l'export csv des villes de osm mon commerce
osmium extract -p polygons/commune_75056.poly -H osm_data/ile-de-france-internal.osh.pbf -s complete_ways -O -o commune_75056.osh.pbf
# générer les historiques de la commune 76216 pour tous ses thèmes et tous ses graphes
py loop_thematics_history_in_zone_to_counts.py --input osm_data/commune_76216.osh.pbf --output-dir test_results --temp-dir test_temp --max-dates 100 --poly polygons/commune_76216.poly
# générer un graphe pour un thème dans une ville
py generate_graph.py --insee 91111 test_results/commune_75056_building.csv
Graphique sauvegardé: test_results/commune_75056_building_monthly_graph.png
Graphique de complétion sauvegardé: test_results/commune_75056_building_monthly_graph_completion.png
Graphiques générés avec succès!
historize_zone.py
Ce script principal permet de lancer l'analyse historique d'une ville dans OpenStreetMap. Il:
- Demande à l'utilisateur quelle ville il souhaite traiter
- Trouve le code INSEE de la ville demandée
- Vérifie si le polygone de la ville existe, sinon le récupère
- Traite les données historiques OSM pour cette ville en utilisant loop_thematics_history_in_zone_to_counts.py
Utilisation
python historize_zone.py [--input fichier_historique.osh.pbf]
Si le fichier d'historique n'est pas spécifié, le script utilisera par défaut le fichier
osm_data/france-internal.osh.pbf
.
Exemples
Lancer l'analyse avec le fichier d'historique par défaut:
python historize_zone.py
Lancer l'analyse avec un fichier d'historique spécifique:
python historize_zone.py --input osm_data/ile-de-france-internal.osh.pbf
loop_thematics_history_in_zone_to_counts.py
Ce script compte les objets OSM par thématique sur une zone donnée à différentes dates. Il:
- Filtre les données historiques OSM à différentes dates (mensuelles sur les 10 dernières années)
- Compte les objets correspondant à chaque thématique à chaque date
- Calcule le pourcentage de complétion des attributs importants pour chaque thème
- Sauvegarde les résultats dans des fichiers CSV
- Génère des graphiques montrant l'évolution dans le temps
Utilisation
python loop_thematics_history_in_zone_to_counts.py --input fichier.osh.pbf --poly polygons/commune_XXXXX.poly
Ce script est généralement appelé par historize_zone.py et ne nécessite pas d'être exécuté directement.
get_poly.py
Ce script permet de récupérer le polygone d'une commune française à partir de son code INSEE. Il interroge l'API Overpass Turbo pour obtenir les limites administratives de la commune et sauvegarde le polygone dans un fichier au format .poly (compatible avec Osmosis).
Utilisation
python get_poly.py [code_insee]
Si le code INSEE n'est pas fourni en argument, le script le demandera interactivement.
Exemples
Récupérer le polygone de la commune d'Étampes (code INSEE 91111) :
python get_poly.py 91111
Le polygone sera sauvegardé dans le fichier polygons/commune_91111.poly
.
Format de sortie
Le fichier de sortie est au format .poly, qui est utilisé par Osmosis et d'autres outils OpenStreetMap. Il contient :
- Le nom de la commune
- Un numéro de section
- Les coordonnées des points du polygone (longitude, latitude)
- Des marqueurs "END" pour fermer le polygone et le fichier
Exemple de contenu :
commune_91111
1
2.1326337 48.6556426
2.1323684 48.6554398
...
2.1326337 48.6556426
END
END
Dépendances
- Python 3.6+
- Modules Python : argparse, urllib, json
- Pour compare_osm_objects.sh : PostgreSQL, curl, jq
Installation
Aucune installation spécifique n'est nécessaire pour ces scripts. Assurez-vous simplement que les dépendances sont installées.
analyze_city_polygons.py
Ce script analyse les polygones de villes et génère des fichiers JSON d'analyse. Il:
- Parcourt tous les fichiers de polygones dans le dossier "polygons"
- Pour chaque polygone, vérifie si un fichier d'analyse JSON existe déjà
- Si non, utilise loop_thematics_history_in_zone_to_counts.py pour extraire les données
- Sauvegarde les résultats dans un fichier JSON avec une analyse de complétion
- Ajoute une date de création à chaque analyse
Utilisation
python analyze_city_polygons.py [--force] [--single CODE_INSEE]
Options:
--force
ou-f
: Force la recréation des analyses existantes--single
ou-s
: Traite uniquement le polygone spécifié (code INSEE)
Exemples
Analyser tous les polygones disponibles:
python analyze_city_polygons.py
Analyser uniquement la commune avec le code INSEE 59140:
python analyze_city_polygons.py --single 59140
Forcer la recréation des analyses existantes:
python analyze_city_polygons.py --force
Format de sortie
Les fichiers d'analyse sont au format JSON et sont sauvegardés dans le dossier city_analysis
. Chaque fichier contient:
- Une section
themes
avec des données pour chaque thématique (nombre d'objets, pourcentage de complétion, etc.) - Une section
metadata
avec des informations sur l'analyse (code INSEE, date de création, statistiques globales)
Exemple de contenu:
{
"themes": {
"borne-de-recharge": {
"date": "2025-08-21",
"zone": "commune_59140",
"theme": "borne-de-recharge",
"nombre_total": 0,
"nombre_avec_operator": 0,
"nombre_avec_capacity": 0,
"pourcentage_completion": 0
},
"borne-incendie": {
"date": "2025-08-21",
"zone": "commune_59140",
"theme": "borne-incendie",
"nombre_total": 0,
"nombre_avec_ref": 0,
"nombre_avec_colour": 0,
"pourcentage_completion": 0
}
},
"metadata": {
"insee_code": "59140",
"creation_date": "2025-08-21 11:12:20",
"polygon_file": "commune_59140.poly",
"osm_data_file": "france-latest.osm.pbf",
"total_objects": 679,
"average_completion": 0.44,
"theme_count": 7
}
}
Licence
Ces scripts sont distribués sous la même licence que le projet Osmose-Backend.