mirror of
https://forge.chapril.org/tykayn/osm-commerces
synced 2025-10-04 17:04:53 +02:00
237 lines
No EOL
6.9 KiB
Markdown
237 lines
No EOL
6.9 KiB
Markdown
# 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
|
|
|
|
```shell
|
|
python -m venv bin/venv activate
|
|
source bin/venv/bin/activate
|
|
pip install plotly pandas
|
|
```
|
|
|
|
```shell
|
|
# 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
|
|
```
|
|
|
|
```shell
|
|
# 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
|
|
```
|
|
|
|
```shell
|
|
# 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:
|
|
|
|
1. Demande à l'utilisateur quelle ville il souhaite traiter
|
|
2. Trouve le code INSEE de la ville demandée
|
|
3. Vérifie si le polygone de la ville existe, sinon le récupère
|
|
4. Traite les données historiques OSM pour cette ville en utilisant loop_thematics_history_in_zone_to_counts.py
|
|
|
|
#### Utilisation
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
python historize_zone.py
|
|
```
|
|
|
|
Lancer l'analyse avec un fichier d'historique spécifique:
|
|
|
|
```bash
|
|
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:
|
|
|
|
1. Filtre les données historiques OSM à différentes dates (mensuelles sur les 10 dernières années)
|
|
2. Compte les objets correspondant à chaque thématique à chaque date
|
|
3. Calcule le pourcentage de complétion des attributs importants pour chaque thème
|
|
4. Sauvegarde les résultats dans des fichiers CSV
|
|
5. Génère des graphiques montrant l'évolution dans le temps
|
|
|
|
#### Utilisation
|
|
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
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) :
|
|
|
|
```bash
|
|
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:
|
|
|
|
1. Parcourt tous les fichiers de polygones dans le dossier "polygons"
|
|
2. Pour chaque polygone, vérifie si un fichier d'analyse JSON existe déjà
|
|
3. Si non, utilise loop_thematics_history_in_zone_to_counts.py pour extraire les données
|
|
4. Sauvegarde les résultats dans un fichier JSON avec une analyse de complétion
|
|
5. Ajoute une date de création à chaque analyse
|
|
|
|
#### Utilisation
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
python analyze_city_polygons.py
|
|
```
|
|
|
|
Analyser uniquement la commune avec le code INSEE 59140:
|
|
|
|
```bash
|
|
python analyze_city_polygons.py --single 59140
|
|
```
|
|
|
|
Forcer la recréation des analyses existantes:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```json
|
|
{
|
|
"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. |