====== Travailler avec le cadastre ====== ===== Intégration de ces données à notre SI ===== ==== Création du schéma et des tables dans la base de données ==== CREATE SCHEMA dgi; CREATETABLE dgi.compte_communal ( ccodep character varying(2) NOT NULL, ccodir character varying(1) NOT NULL, ccocom character varying(3) NOT NULL, dnupro character varying(6) NOT NULL ); CREATETABLE dgi.parcelle_majic2 ( ccodep character varying(2) NOT NULL, ccodir character varying(1) NOT NULL, ccocom character varying(3) NOT NULL, [...] [[:integration_donnees:externes:dgi_sql|voir le script complet]] ==== Remplissage des tables : exemple des parcelles non bâties ==== 1 && (substr($s,19,2)=='10')){ if($res = pg_query($conn, $sql)){ $nb_lignes++; } else{$nb_erreurs++; $sql_erreur.=$sql; } } $i++; } echo $nb_lignes.' insérées !'; echo $nb_erreurs.' erreurs : '; echo $sql_erreur; $sql_vacuum_nbat="VACUUM dgi.nbat;"; pg_query($conn, $sql_vacuum_nbat) or die(pg_last_error()); echo "vacuum dgi.nbat ok !"; $sql_vide_parcelle_non_bati="DELETE FROM dgi.parcelle_non_bati"; pg_query($conn, $sql_vide_parcelle_non_bati) or die(pg_last_error()); $sql_ventil="INSERT INTO dgi.parcelle_non_bati( ccodep, ccodir, ccocom, ccopre, ccosec, dnupla, filler, cenr, dcntpa, dsrpar, dnupro, jdatat, dreflf, gpdl, cprsecr, ccosecr, dnuplar, dnupdl, gurbpa, dparpi, ccoarp, gparnf, gparbat, parrev, gpardp, fviti, dnvoiri, dindic, ccovoi, ccoriv, ccocif, gpafpd) SELECT substring (ligne FROM 1 for 2), substring (ligne FROM 3 for 1), substring (ligne FROM 4 for 3), substring (ligne FROM 7 for 3), substring (ligne FROM 10 for 2), substring (ligne FROM 12 for 4), substring (ligne FROM 16 for 4), substring (ligne FROM 20 for 2), substring (ligne FROM 22 for 9), substring (ligne FROM 31 for 1), substring (ligne FROM 32 for 6), substring (ligne FROM 38 for 8), substring (ligne FROM 46 for 5), substring (ligne FROM 51 for 1), substring (ligne FROM 52 for 3), substring (ligne FROM 55 for 2), substring (ligne FROM 57 for 4), substring (ligne FROM 61 for 3), substring (ligne FROM 64 for 1), substring (ligne FROM 65 for 4), substring (ligne FROM 69 for 1), substring (ligne FROM 70 for 1), substring (ligne FROM 71 for 1), substring (ligne FROM 72 for 12), substring (ligne FROM 84 for 01), substring (ligne FROM 85 for 01), substring (ligne FROM 86 for 4), substring (ligne FROM 90 for 1), substring (ligne FROM 91 for 5), substring (ligne FROM 96 for 4), substring (ligne FROM 100 for 4), substring (ligne FROM 104 for 1) FROM dgi.nbat"; pg_query($conn, $sql_ventil) or die(pg_last_error()); $sql_vacuum_parcelle_non_bati="VACUUM dgi.parcelle_non_bati"; pg_query($conn, $sql_vacuum_parcelle_non_bati) or die(pg_last_error()); echo "vacuum dgi.parcelle_non_bati ok !"; ?> ==== Exploitation de ces données ==== === Sans affichage cartographique === CREATE OR REPLACE VIEW dgi.analyse_fonciere_fr9101402 AS SELECT ((compte_communal.ccodep::text || compte_communal.ccodir::text) || compte_communal.ccocom::text) || compte_communal.dnupro::text AS compte_propriete, count(parcelle.id_parcelle) AS nb_parcelle, sum(area2d(parcelle.geometrie)) / 10000::double precision AS surface_en_propriete_ha, sum(area2d(parcelle.geometrie)) / 10000::double precision / count(parcelle.id_parcelle)::double precision AS surf_moy_ha, proprietaires.ddenom, proprietaires.dqualp, proprietaires.dprnlp, proprietaires.dnomlp, proprietaires.dlign3, proprietaires.dlign4, proprietaires.dlign5, proprietaires.dlign6, proprietaires.ccopos, proprietaires.epxnee, proprietaires.dnomcp, proprietaires.dprncp FROM ign_bd_parcellaire.parcelle JOIN dgi.parcelle_majic2 ON parcelle_majic2.ccodep::text = parcelle.code_dep::text AND parcelle_majic2.ccocom::text = parcelle.code_com::text AND replace(parcelle_majic2.ccopre::text, ' '::text, '0'::text) = parcelle.com_abs::text AND replace(parcelle_majic2.ccosec::text, ' '::text, '0'::text) = parcelle.section::text AND parcelle_majic2.dnupla::text = parcelle.numero::text JOIN dgi.compte_communal ON compte_communal.ccodep::text = parcelle_majic2.ccodep::text AND compte_communal.ccodir::text = parcelle_majic2.ccodir::text AND compte_communal.ccocom::text = parcelle_majic2.ccocom::text AND compte_communal.dnupro::text = parcelle_majic2.dnupro::text JOIN perimetre ON st_intersects(perimetre.geometrie, parcelle.geometrie) JOIN dgi.proprietaires ON compte_communal.ccodep::text = proprietaires.ccodep::text AND compte_communal.ccodir::text = proprietaires.ccodir::text AND compte_communal.ccocom::text = proprietaires.ccocom::text AND compte_communal.dnupro::text = proprietaires.dnupro::text WHERE perimetre.id_perimetre::text = 'FR9101402'::text AND proprietaires.gdesip::text = '1'::text GROUP BY compte_communal.ccodep, compte_communal.ccodir, compte_communal.ccocom, compte_communal.dnupro, proprietaires.ddenom, proprietaires.dqualp, proprietaires.dprnlp, proprietaires.dnomlp, proprietaires.dlign3, proprietaires.dlign4, proprietaires.dlign5, proprietaires.dlign6, proprietaires.ccopos, proprietaires.jdatnss, proprietaires.epxnee, proprietaires.dnomcp, proprietaires.dprncp ORDER BY sum(area2d(parcelle.geometrie)) / 10000::double precision DESC; === Avec affichage carto === CREATE OR REPLACE VIEW dgi.foncier_fr9101402_avec_proprio AS SELECT ((compte_communal.ccodep::text || compte_communal.ccodir::text) || compte_communal.ccocom::text) || compte_communal.dnupro::text AS compte_propriete, parcelle.id_parcelle, area2d(parcelle.geometrie) / 10000::double precision AS surf_ha, proprietaires.ddenom, proprietaires.dqualp, proprietaires.dprnlp, proprietaires.dnomlp, proprietaires.dlign3, proprietaires.dlign4, proprietaires.dlign5, proprietaires.dlign6, proprietaires.ccopos, proprietaires.epxnee, proprietaires.dnomcp, proprietaires.dprncp, parcelle.geometrie FROM ign_bd_parcellaire.parcelle JOIN dgi.parcelle_majic2 ON parcelle_majic2.ccodep::text = parcelle.code_dep::text AND parcelle_majic2.ccocom::text = parcelle.code_com::text AND replace(parcelle_majic2.ccopre::text, ' '::text, '0'::text) = parcelle.com_abs::text AND replace(parcelle_majic2.ccosec::text, ' '::text, '0'::text) = parcelle.section::text AND parcelle_majic2.dnupla::text = parcelle.numero::text JOIN dgi.compte_communal ON compte_communal.ccodep::text = parcelle_majic2.ccodep::text AND compte_communal.ccodir::text = parcelle_majic2.ccodir::text AND compte_communal.ccocom::text = parcelle_majic2.ccocom::text AND compte_communal.dnupro::text = parcelle_majic2.dnupro::text JOIN perimetre ON st_intersects(perimetre.geometrie, parcelle.geometrie) JOIN dgi.proprietaires ON compte_communal.ccodep::text = proprietaires.ccodep::text AND compte_communal.ccodir::text = proprietaires.ccodir::text AND compte_communal.ccocom::text = proprietaires.ccocom::text AND compte_communal.dnupro::text = proprietaires.dnupro::text WHERE perimetre.id_perimetre::text = 'FR9101402'::text AND proprietaires.gdesip::text = '1'::text; ===== Ressources ===== * http://georezo.net/wiki/main:cadastre:start * [[http://datagistips.blogspot.com/2010/07/majic-integration-opensource-des.html|Intégration OpenSource des Fichiers Fonciers]] * [[http://www.geomatique-aln.fr/IMG/pdf/Fiche_no10_foncier_public_cle01168f.pdf|Référentiels du foncier public en Languedoc-Roussillon et Provence-Alpes-Côte-d’Azur]] * http://georezo.net/blog/parcellair/