Skip to content

Latest commit

 

History

18 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

API Découpage Administratif (reboot) 🗺️

API REST pour accéder aux données géographiques et administratives des communes françaises et entités associées.

Basé sur le COG INSEE, les géométries IGN Admin Express, Banatic, La Poste et le référentiel AOM (data.gouv.fr).

Architecture : SQLite pur (data/apigeo.db) — géométries en WKT + GeoJSON pré-calculé, filtres spatiaux via Shapely au runtime (pas d’extension SpatiaLite requise).

🚀 Démarrage rapide

Prérequis

  • Python 3.11+
  • Dépendances : pip install -r requirements.txt (+ requirements-api.txt pour l’API)

Installation complète

Préparer l'environnement avec

uv venv venv
source venv/bin/activate
# 1. Installer les dépendances
uv pip install -r requirements.txt

# 2. Télécharger les données administratives (COG, Banatic, AOM, intercos…)
python3 1_download_decoupage_administratif_data.py

# 3. Télécharger les géométries IGN et OSM pour les COM (collectivités d'Outre Mer)
python3 2_download_geometries_ign.py

# 4. Convertir depuis les GPKG en GeoJSON depuis Admin Express (commune, arrondissement_municipal, commune_associee_ou_deleguee, collectivite_territoriale")
python3 3_convert_admin_express_into_geojson.py

# 5. Assemble communes from sources AdminExpress and OSM, generate data for mairies
python3 4_assemble_communes_and_mairies_from_source.py

# 6. Simplifier les GeoJSON des communes, des arrondissements municpaux et des communes déléguées et associées, (5m, 10m, 100m, 1000m)
python3 5_simplify_geojson.py

# 7. Assembler les unités administratives supérieures depuis les données simplifiées des communes (régions, départements, intercommunalités, AOM)
python3 6_assemble_by_admin_units.py

# 6. Charger dans SQLite
python3 7_load_into_spatialite.py

# 7. Lancer l'API
uvicorn app.main:app --reload

L'API est accessible sur http://localhost:8000

📦 Avec Docker

# Préparer les données (une fois, en local)
python3 1_download_decoupage_administratif_data.py
python3 2_download_geometries_ign.py
python3 3_convert_admin_express_into_geojson.py
python3 4_assemble_communes_and_mairies_from_source.py
python3 5_simplify_geojson.py
python3 6_assemble_by_admin_units.py
python3 7_load_into_spatialite.py

# Lancer l'API
docker-compose up

📖 Documentation

🔍 Endpoints principaux

Communes

GET /communes
GET /communes/{code}
GET /communes_associees_deleguees
GET /communes_associees_deleguees/{code}

Filtres : nom, codePostal, codeDepartement, departement, region, lat/lon, fields, limit, offset.

Départements et régions

GET /departements
GET /departements/{code}
GET /departements/{code}/communes
GET /regions
GET /regions/{code}
GET /regions/{code}/departements
GET /regions/{code}/communes

EPCI et groupements

GET /epcis                          # CA, CU, CC, MET69, METRO
GET /epcis/{code}
GET /epcis/{code}/communes          # ?fields=competences
GET /groupement_collectivites_territoriales
GET /groupement_collectivites_territoriales/{code}
GET /groupement_collectivites_territoriales/{code}/communes  # ?fields=competences

Statistiques

GET /stats
GET /health

🗂️ Structure du projet

apigeo2/
├── app/
│   ├── main.py                   # Routes FastAPI
│   ├── database.py               # Connexion SQLite
│   ├── schemas.py                # Schémas Pydantic
│   ├── entities/                 # Logique métier par entité
│   │   ├── communes.py
│   │   ├── departements.py
│   │   ├── regions.py
│   │   ├── intercommunalites.py
│   │   └── epcis.py
│   └── ...
├── data/
│   ├── *.csv                     # Métadonnées COG, intercos, AOM…
│   ├── *.geojson                 # Géométries brutes
│   ├── *_5m.geojson              # Géométries simplifiées (utilisées en base)
│   └── apigeo.db                 # Base SQLite
├── sources/                      # Shapefiles IGN
├── 1_download_decoupage_administratif_data.py
├── 2_download_geometries_ign.py
├── 3_convert_shape_into_geojson.py
├── 4_simplify_geojson.py
├── 5_load_into_spatialite.py
├── competences_mapping.json      # Libellés compétences interco
├── reset_database.py
├── docker-compose.yml
└── requirements.txt

💾 Base de données SQLite

Principes

  • Fichier unique data/apigeo.db, portable et sans serveur
  • Géométries stockées en WKT (geometry) et GeoJSON (geometry_geojson) pré-calculés à l’import
  • Vues SQL pour joindre métadonnées et géométries (communes, departements, regions, interco, aom)
  • Index sur codes, nom_recherche, bbox des communes

Tables principales

Domaine Métadonnées Géométries Liaisons
Communes communes_metadata communes_geometries
Départements departements_metadata departements_geometries
Régions regions_metadata regions_geometries
Intercos interco_metadata interco_geometries commune_interco_associations, interco_commune
AOM aom_metadata aom_geometries aom_commune

🔧 Scripts utilitaires

# Supprimer la base et recharger
python3 reset_database.py
python3 5_load_into_spatialite.py

# Migration bbox seule (base existante)
python3 5_load_into_spatialite.py --migrate-bbox

Accès direct à la base

sqlite3 data/apigeo.db
SELECT COUNT(*) FROM communes;
SELECT siren, nom FROM aom LIMIT 5;

📊 Sources de données

Licence Ouverte / Open Licence 2.0.

🐛 Dépannage

Base absente ou incomplète

ls -lh data/apigeo.db
python3 5_load_into_spatialite.py

Réinitialisation complète

python3 reset_database.py
python3 1_download_decoupage_administratif_data.py
python3 2_download_geometries_ign.py
python3 3_convert_shape_into_geojson.py
python3 4_simplify_geojson.py
python3 5_load_into_spatialite.py

Géométries manquantes

Vérifier que les scripts 2, 3 et 4 ont bien produit les fichiers *_5m.geojson dans data/.

📚 Documentation complémentaire

📄 Licence

Projet et données sources : Licence Ouverte / Open Licence 2.0.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages