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,
 
[...] 

voir le script complet

Remplissage des tables : exemple des parcelles non bâties

<?php
/*  Connexionn à la base de données */
if($conn = pg_connect("host=192.168.1.40 port=5432 dbname=sicen user=dba password=dbroot")) echo "connecté à la base !\n";
 
/* ouverture du ficjhier contenant les données */
if($fh = fopen('D:/CEN-LR/NBAT.300.txt','r')) echo "fichier ouvert !\n"; else die($php_errormsg);
 
/* Vidage de la table dgi.nbat */
$res = pg_query($conn, "delete from dgi.nbat") or die(pg_last_error());
 
/* initialisation de qq variables */
$i=1;
$nb_ligne=0;
$nb_erreurs=0;
 
/* parcours du fichier */
while($s = fgets($fh,1024)){
	$sql = "INSERT INTO dgi.nbat VALUES ('".$s."');"; /* création d ela requete d'insertion */
	if($i>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

integration_donnees/externes/dgi.txt · Dernière modification: 2011/04/27 23:37 par admin_wiki_sicen
www.chimeric.de Creative Commons License Valid CSS Propulsé par DokuWiki Get firefox!! Changements récents - flux RSS Valid XHTML 1.0 Hébergé par Alwaysdata