cadastre-pg
v0.1.0
Published
Script 100% Node Js permettant d'importer le cadastre en EDIGEO vers Postgis. Il peut être utilisé en ligne de commande (CLI) ou dans un script Node js.
Downloads
5
Readme
cadastre-pg
Script 100% Node Js permettant d'importer le cadastre en EDIGEO vers Postgis. Il peut être utilisé en ligne de commande (CLI) ou dans un script Node js.
C'est sans doute le plus rapide et le plus fiable d'après ce que j'ai pu tester.
Il utilise :
- edigeoToGeojson pour convertir les données edigeo en geojson.
- proj-geojson pour éventuelement reprojeter les données à la volée
- decompress pour décompresser les archives .tar.bz2
- flatbush & turf pour éventuelement déterminer le code département de la feuille cadastrale
- pg-promise pour envoyer efficacement les données vers Postgresql
Usage (CLI)
Installation
npm install -g cadastre-pg
Utilisation
Il prend comme input le chemin du répértoire qui contient les feuilles cadastrales au format .tar.bz2 que l'on peut télécherger ici
Le code du département peut être indiqué dans les options. Il est possible de lui passer la chaine "fromFile", le code du déparetement sera alors déterminé selon le nom du fichier (celui ci devant être sous la forme "edigeo-{dep}...") Sinon celui ci sera détérminé automatiquement pour chaque feuille par une opération spatiale (à partir des contours des départements de 2019).
Le système de projection des données sortantes peut être indiqué (à defaut : 4326).
La configuration des tables ainsi que le mapping des champs peut être configuré en lui passant le chemin de son propre fichier de configuration (flag --config). Vous pouvez egalement lui indiquer l'identifiant de l'une des 3 configurations prédéfinies (full / light / bati : elles se trouvent dans le repértoire config)
cadastre-pg [options]
Options
'--path': String, # obligatoire, chemin du répértoire contenant les tar.bz2
'--year': Number, # obligatoire, année de l'édition de l'EDIGEO
'--srid': Number, # SRID de destination defaut : 4326
'--config': String, # chemin ou identifiant du preset ( defaut "full")
'--threads' : Number, # defaut max
'--dep': String, # ex 38, si manquant le script va le determiné geographiquement. "fromFile" si le nom du fichier est sous la forme "edigeo-dep...."
'--schema': String, # schema de destination ( par defaut : public)
'--logLevel': Number, # (0, 1, 2 3) verbosité
'--dropSchema' : Boolean, # supprime le schema avant l'import
'--dropTable' : Boolean, # supprime les tables utilisées avant l'import
'--host': String, ## postgresql host (localhost)
'--database': String, ## postgresql database (postgres)
'--user': String, ## postgresql user (postgres)
'--password': String, ## postgresql password (null)
'--port': Number, ## postgresql password (5432)
Exemple
cadastre-pg --path "/data/EDIGEO/dep2A" --srid 2154 --config "full" --schema "cadastre" -y 2019 --dep "fromFile" --logLevel 2 --dropSchema --host "localhost" --database "gis" --user "fabien" --port 5432 --password "password"
Usage (Node.js)
Installation
npm install cadastre-pg
cadastrePg(edigeo-path, configuration, pgconfig, options)
edigeo-path
Obligatoire Chemin absolut ou relatif du repértoire contenant les fichiers EDIGEO compressé en .tar.bz2
configuration
Par défaut, "full" qui fait référence au fichier ./config/full.json. Ce fichier de configuration, en json, permet la création des tables ainsi que le "mapping" des champs. Il permet également de modifier les données à la volée Il est possible de lui donner un chemin vers un autre fichier de configuration (en json) ou de lui passer directement l'objet.
pgConfig
{
"user": "postgres",
"host": "localhost",
"database": "postgres",
"password": "password",
"port": 5432
};
options :
{
"schema": "public",
"year": 2019, // requis => année de la donnée
"srid": 4326,
"threads" : 8, // nombre de theards aloués (defaut = max)
"codeDep" : null,
"logLevel": 2, //0, 1, 2 , 3
"dropSchema": false, // supprime les tables concernées avant l'import
"dropTable": false, // supprime le schema avant l'import
}
Exemple
const cadastrePg = require('cadastre-pg');
let options = {
"schema": "cadastre_test",
"year": 2019,
"srid": 2154,
"threads" : 8,
"codeDep" : null,
"logLevel": 2,
"dropSchema": true,
"dropTable": true
}
let pgConfig = {
"user": "fabien",
"host": "localhost",
"database": "gis",
"password": "password",
"port": 5432
};
// chemin des dossiers contenant les fichier EDIGEO compressé en bz
cadastrePg('/data/dep38/', 'full', pgConfig , options)
.then( t => {
console.log('fini')
})
.catch(error => {
console.log(error);
})
Benchmark
Je fais ces tests sur un PC relativement puissant sous la dernière monture d'Ubuntu avec node 12.16
PC
- CPU : AMD Ryzen 2700X (8 coeurs, 16th)
- 16Go de RAM
- Un SSD
Système :
- Ubuntu 19.10
- Node 12.16
- Postgres 12 ( docker )
Les temps indiqués prennent en compte la décompression de l'archive en tar.bz2 On utilise tous les threads du CPU.
cadastre-pg --path "/data/EDIGEO/dep2A" --srid 2154/4326 --config "full" --schema "cadastre" -y 2019 --dep "fromFile" --logLevel 0 --dropSchema --host "localhost" --database "gis" --user "fabien" --port 5432 --password "password"
| Département | srid : 2154 (sans reprojection) | srid : 4326 | | ------ | ----------- |----------- | | 2A (189 Mo) | 53 s | 86 s | | 2B (367 Mo) | 93 s| 168 s | | 38 (722 Mo) | 230 s | 330 s |