Ce dépôt fournit des contours géographiques pour les codes postaux français (France métropolitaine et DROM), générés à partir de sources ouvertes et d’une méthodologie reproductible.
Important
Certains territoires d'outre-mer sont inclus, mais n'ont pas de contours (ex. : Nouvelle-Calédonie).
Les codes postaux sont largement utilisés pour localiser des zones géographiques, mais ils ne correspondent pas à des limites administratives fixes. Leur définition évolue et peut être ambiguë. Ce projet vise à générer des contours fiables pour chaque code postal, utilisables pour la cartographie, l’analyse spatiale ou la prospection.
- Docker
- docker-compose
- 7z (p7zip)
- GDAL/ogr2ogr
curl,gunzip,bash,find
sudo apt update
sudo apt install -y docker.io docker-compose p7zip-full gdal-bin curl-
Clonez le dépôt :
git clone https://github.com/wolf29f/contours_codes_postaux.git cd contours_codes_postaux -
Téléchargez et préparez les données sources :
bash load_dataset.sh
Le traitement s’appuie sur plusieurs sources et combine différentes stratégies pour obtenir des contours pertinents pour chaque code postal. Voici les grandes étapes, fidèles à la logique du projet :
-
Téléchargement et préparation des données sources
- Contours IRIS (IGN)
- Base Adresse Nationale (adresses)
- Codes postaux officiels (La Poste)
- Communes (data.gouv.fr)
-
Import et préparation dans PostgreSQL/PostGIS
- Les données sont importées dans une base PostGIS via Docker.
-
Association des codes postaux aux IRIS via les codes INSEE
- Les adresses sont croisées avec les IRIS à l’aide du code INSEE de la commune.
- Pour chaque IRIS, si le code INSEE n'est associé qu'à un unique code postal, l'IRIS est associé à ce code.
-
Association des codes postaux aux IRIS via les adresses
- Pour chaque IRIS sans code postal, on regroupe les adresses situées dans la zone de l'IRIS par code postal.
- Le code postal ayant le plus d'adresses est retenu.
-
Fusion des codes IRIS
- On fusionne les IRIS regroupés par code postal et on enregistre le résultat en base de données.
-
Traitement par cluster d'adresses
- Pour les codes postaux non couverts par les IRIS, les adresses sont regroupées par code postal et clusterisées (DBSCAN) pour générer des polygones concaves.
- Les projections métriques adaptées sont appliquées selon la région.
- Les enveloppes sont soustraites aux contours déjà calculés à partir des IRIS pour éviter tout recouvrement.
- Les enveloppes sont enregistrées et associées à leur code postal.
-
Gestion des cas particuliers
- Pour les codes postaux sans adresse ou sans cluster, le centroïde de la commune ou une position connue est utilisé.
-
Export des résultats
- Les contours sont exportés au format CSV (WKT) et GeoJSON, prêts à être utilisés.
Warning
Si le résultat est globalement satisfaisant, la dernière étape, basée sur le clustering d'adresses, peut produire des contours parfois chaotiques et peut "trouer" des contours IRIS à cause d'adresses mélangées dans une zone réduite.
Malgré tout, cette étape est obligatoire, car certains codes postaux seraient absorbés par des zones IRIS ayant un autre code majoritaire.
Pour lancer l'ensemble du traitement et générer les fichiers de résultats :
bash process_data.shLes résultats seront disponibles dans le dossier data_dst/.
Note
Le dossier config contient une configuration Postgres optimisée pour le traitement sur mon ordinateur. Il peut être nécessaire de l'adapter selon vos spécifications.
Vous pouvez aussi exécuter les scripts SQL un par un via Docker Compose :
docker compose exec postgis psql -U postgres -d gis -f /pg_scripts/10-init.sql
# ... puis les autres scripts dans l'ordre ...data_src/: Données sources téléchargées (IRIS, adresses, codes postaux, communes)data_dst/: Résultats générés (contours.csv,contours.geojson)pg_scripts/: Scripts SQL pour le traitement des donnéesload_dataset.sh: Script de téléchargement et de préparation des données sourcesprocess_data.sh: Script principal d'exécution du traitement
- contours.csv : Fichier CSV contenant pour chaque code postal le contour au format WKT.
- contours.geojson : Fichier GeoJSON contenant tous les contours, chaque entité ayant le code postal dans ses propriétés.
Exemple d'utilisation :
Vous pouvez visualiser le fichier GeoJSON dans geojson.io ou l'importer dans QGIS.
Warning
Le fichier GeoJSON est volumineux et peux être difficile à afficher sur certaines machines.
Ce projet est sous licence GPL-3.0. Voir le fichier LICENSE pour plus d'informations.
Les contributions sont les bienvenues !
N'hésitez pas à ouvrir une issue ou une pull request pour proposer des améliorations, corriger des bugs ou ajouter de nouvelles fonctionnalités.