Table des matières

Intégration des thèmes de l'IGN à notre base de données

octobre 2010

Calcul de la taille sur disque des tables du schéma ign_bd_topo (5 départements)

pg_total_relation_size(regclass) renvoit l'espace disque total utilisé par la table de cet OID ou nom, incluant les index et les données de la partie TOAST

voici les statistiques pour notre serveur (RHEL 4, diques en ext4) :

SELECT f_table_name, pg_total_relation_size('ign_bd_topo.'||f_table_name), pg_size_pretty(pg_total_relation_size('ign_bd_topo.'||f_table_name))
  FROM geometry_columns
  WHERE f_table_schema='ign_bd_topo'

Au total, l'ensemble des tables prend une place d'environ 2.9 Giga, le mnt n'y est pas encore intégré (http://trac.osgeo.org/postgis/wiki/WKTRaster|piste]])

nom de la tablepg_total_relation_size()pg_size_pretty(pg_total_relation_size())
aire_triage172032168 kB
bati_indifferencie265838592254 MB
bati_industriel1568768015 MB
bati_remarquable27033602640 kB
canalisation_eau155648152 kB
chef_lieu385024376 kB
chemin185024512176 MB
cimetiere794624776 kB
conduite9011288 kB
construction_lineaire1914470418 MB
construction_ponctuelle12943361264 kB
construction_surfacique466944456 kB
emprise417792408 kB
gare9011288 kB
hydronyme475136464 kB
lieu_dit3401318432 MB
lieu_dit_habite47431684632 kB
lieu_dit_non_habite43499524248 kB
ligne_electrique434176424 kB
ligne_orographique3110502430 MB
oronyme27197442656 kB
pai_administratif_militaire548864536 kB
pai_culture_loisirs385024376 kB
pai_espace_naturel46858244576 kB
pai_gestion_eaux311296304 kB
pai_hydrographie475136464 kB
pai_industriel_commercial958464936 kB
pai_orographie27197442656 kB
pai_religieux 507904496 kB
pai_sante 122880120 kB
pai_science_enseignement393216384 kB
pai_sport9011288 kB
pai_transport638976624 kB
pai_zone_habitation51691525048 kB
piste_aerodrome172032168 kB
point_eau12533761224 kB
poste_transformation114688112 kB
pylone20889602040 kB
reservoir19415041896 kB
reservoir_eau16629761624 kB
route509304832486 MB
route_nommee130162688124 MB
route_primaire1209139212 MB
route_secondaire270352384258 MB
surface_activite29081602840 kB
surface_eau1703116816 MB
surface_route483328472 kB
terrain_sport14745601440 kB
toponyme_communication237568232 kB
toponyme_divers622592608 kB
toponyme_ferre8192080 kB
transport_cable106496104 kB
troncon_cours_eau104742912100 MB
troncon_laisse892928872 kB
troncon_voie_ferree21217282072 kB
zone_vegetation13614120961298 MB
total30083727362869 MB

juillet 2010

Création de la table des lieu-dits pour l'interface de saisie

Les toponymes sont stockés dans 4 tables de la BD TOPO :

De manière à pouvoir proposer efficacement une aide à la saisie d'un lieu-dit selon l'endroit ou la donnée a été localisée sur la carte, nous allons rassembler ces informations dans une seule et même table nommée lieu_dit, dans le schéma public de notre base de données :

lieu_dit.sql
CREATE TABLE lieu_dit
(
  id character varying(24) PRIMARY KEY,
  origin_nom character varying(13),
  nom character varying(70),
  importance character varying(2),
  nature character varying(24),
  code_insee character varying(5), 
  /* Ce dernier champ n'existe pas initialement dans les tables "nymes" de la BD TOPO 
  Nous le rajoutons pour permettre des jointures avec la table commune et accélérer 
  le temps de récupération des lieu-dits proches d'un objet créé sur la carte */
  gid serial UNIQUE -- utile pour QGIS
)
WITH (
  OIDS=FALSE
);
 
/* création de la colonne géométrique de type point en lambert 93 */
 
SELECT AddGeometryColumn('lieu_dit', 'geometrie', 310024140, 'POINT', 2 );
 
/* remplissage de la table */
 
INSERT INTO lieu_dit(id, origin_nom, nom, importance, nature, geometrie)
SELECT id, origin_nom, nom, importance, nature, geometrie FROM ign_bd_topo.lieu_dit_habite;
INSERT INTO lieu_dit(id, origin_nom, nom, importance, nature, geometrie)
SELECT id, origin_nom, nom, importance, nature, geometrie FROM ign_bd_topo.lieu_dit_non_habite;
/*INSERT INTO lieu_dit(id, origin_nom, nom, importance, nature, geometrie)
SELECT id, origin_nom, nom, importance, nature, geometrie FROM ign_bd_topo.hydronyme;
INSERT INTO lieu_dit(id, origin_nom, nom, importance, nature, geometrie)
SELECT id, origin_nom, nom, importance, nature, geometrie FROM ign_bd_topo.oronyme;*/
 
/* indexation des géométries */
 
CREATE INDEX lieu_dit_geometrie_gist
  ON lieu_dit
  USING gist
  (geometrie);
 
/* mise à jour du code insee */
 
UPDATE lieu_dit
SET code_insee=ign_bd_topo.commune.code_insee
FROM ign_bd_topo.commune
WHERE st_intersects(ign_bd_topo.commune.geometrie, lieu_dit.geometrie);
 
/* indexation du code_insee des lieu-dits */
 
CREATE INDEX ind_lieu_dit_code_insee
  ON lieu_dit
  USING btree
  (code_insee);

Comment lister les lieux-dits situés dans un rayon de 2 km de l'objet créé

SELECT ign_bd_topo.commune.nom||' | '||lieu_dit.nom||' - '||round(st_distance(centroid(st_transform(saisie_faune.geometrie,310024140)), lieu_dit.geometrie))||' m.', round(st_distance(centroid(st_transform(saisie_faune.geometrie,310024140)), lieu_dit.geometrie)), ign_bd_topo.commune.nom
FROM (SELECT * FROM saisie_faune WHERE gid=4) AS saisie_faune JOIN ign_bd_topo.commune ON st_intersects(ign_bd_topo.commune.geometrie, centroid(st_transform(saisie_faune.geometrie,310024140)))
JOIN lieu_dit USING (code_insee)
WHERE st_intersects(st_buffer(st_transform(saisie_faune.geometrie,310024140),2000), lieu_dit.geometrie)
ORDER BY round(st_distance(st_transform(saisie_faune.geometrie,310024140), lieu_dit.geometrie)) ASC, ign_bd_topo.commune.nom
SELECT ign_bd_topo.commune.nom||' | '||lieu_dit.nom||' - '||round(st_distance(centroid(st_transform(geomfromtext(),310024140)), lieu_dit.geometrie))||' m.', round(st_distance(centroid(st_transform(geomfromtext(),310024140)), lieu_dit.geometrie)), ign_bd_topo.commune.nom
FROM ign_bd_topo.commune JOIN lieu_dit USING (code_insee) 
WHERE st_intersects(ign_bd_topo.commune.geometrie, centroid(st_transform(geomfromtext(),310024140)))
AND st_intersects(st_buffer(st_transform(geomfromtext(),310024140),2000), lieu_dit.geometrie)
ORDER BY round(st_distance(st_transform(geomfromtext(),310024140), lieu_dit.geometrie)) ASC, ign_bd_topo.commune.nom

février 2010

integration de la BD PARCELLAIRE dans le schema ign_bd_parcellaire

janvier 2010

Intégration de la BDTOPO

Transformation des MIF en shp

La BD topo a été initialement commandée en MIF/MID…

#!/bin/bash
set -x
i=1 # on initialise le compteur
option=''
for rep in `ls -d */`; do
	for mif in `find $rep -iname "*.MIF"`; do
                #echo $i : $PWD : $rep : $(echo $(basename $mif) | cut -d"." -f1) | tr '[A-Z]' '[a-z]'
                echo ogr2ogr $option -a_srs \"+init=IGNF:LAMB93\" -f \"ESRI Shapefile\" SHP/$(echo $(basename $mif) | cut -d"." -f1 | tr '[A-Z]' '[a-z]').shp ./$mif
                #echo ogr2ogr $option -f \"PostgreSQL\" PG:\"host=localhost user=dba dbname=ign password=dbroot\" $PWD/$rep$mif -nln bdtopo.$(echo $mif | cut -d"." -f1) | tr '[A-Z]' '[a-z]' 
		eval ogr2ogr $option -a_srs \"+init=IGNF:LAMB93\" -f \"ESRI Shapefile\" SHP/$(echo $(basename $mif) | cut -d"." -f1 | tr '[A-Z]' '[a-z]').shp ./$mif
	done
	let $[ i+=1 ] # incremente i de 1 a chaque boucle
	option='-update -append' # après la première série de fichier, il faudra ajouter les nouvelles données aux fichiers shp déja existants.
done

Intégration des shp à la base de données

#!/bin/bash
for shp in `ls -R *.shp`; do
	eval shp2pgsql -d -W "latin1" -s 310024140 -g geometrie -I -S $shp ign_bd_topo.$(echo $(basename $shp) | cut -d"." -f1 | tr '[A-Z]' '[a-z]')>../SQL/$(echo $(basename $shp) | cut -d"." -f1 | tr '[A-Z]' '[a-z]').sql
	eval psql -f ../SQL/$(echo $(basename $shp) | cut -d"." -f1 | tr '[A-Z]' '[a-z]').sql -h localhost -U dba sicen 2>>../erreurs.log
done

février 2009

Transformer les shapes en sql : ”“for /R %F IN (*.shp) DO shp2pgsql -s 27572 -g geometrie -I ”%F” ”%~nF”>“ign_bdcarto_%~nF.sql””“

Chargement dans la base de données : ”“for /R %F IN (*.sql) DO psql -f ”%F” -h addresse_ip_hote -U utilisateur base_de_donnée”“

- Données de la BD Parcellaire (Département du Gard)

octobre 2008

intégration des différentes couches de la BD CARTHAGE

La version mise à disposition sur le site du sandre introduit des accents dans le nommage des colonnes.

Après téléchargement des couches (ici au format mif/mid, si shp alors passer à l'étape suivante), les transformer en shp à l'aide de la console (windows):

for /R %F IN (*.MIF) DO ogr2ogr -f "ESRI ShapeFile" -s_srs "EPSG:2154" -t_srs "EPSG:27582" "%~nF.shp" %F

Transformer ces shapes en sql :

for /R %F IN (*.shp) DO shp2pgsql -s 27582 -S -g geometrie -I  "%F"  "ign_bdc_%~nF">"prefixe_%~nF_suffixe.sql"

Les charger dans la base de données :

for /R %F IN (*.sql) DO psql -f "%F" -h addresse_ip_hote -U utilisateur base_de_donnée