===== Intégration de la base de données d'occupation du sol du Languedoc-Roussillon de SIGLR =====
=== Procédure (adaptez les noms de fichiers à votre cas) ===
* Télécharger de l'archive qui nous intéresse sur la page :
http://ocsol.siglr.net/index.php?option=com_docman&task=cat_view&gid=14&Itemid=5
* Transformer le shp obtenu aprés décompression de l'archive :
shp2pgsql -s 27572 -g geometrie -I V0_OCSOL_LR_POLY_2006_L2E_SHP_NOBD.shp occsol_2006>occsol_2006.sql
puis
psql -f occsol_2006.sql -h addresse_ip_hote -U utilisateur nom_base_de_donnée
* On peut maintenant supprimer la redondance et les attributs "inutiles" :
CREATE TABLE poste_occsol
(
id_poste character varying(3) NOT NULL,
libelle character varying(100),
description text
);
ALTER TABLE poste_occsol ADD CONSTRAINT libelle_occsol_pkey PRIMARY KEY (id_poste);
INSERT INTO poste_occsol (SELECT distinct cde_06, intit_06, null FROM occsol_2006);
ALTER TABLE occsol_2006 DROP COLUMN bd06_;
ALTER TABLE occsol_2006 DROP COLUMN bd06_id;
ALTER TABLE occsol_2006 DROP COLUMN niv1_06; /* la fonction substring(cde_06 FROM 1 FOR 1) fera l'affaire */
ALTER TABLE occsol_2006 DROP COLUMN niv2_06; /* la fonction substring(cde_06 FROM 2 FOR 1) fera l'affaire */
ALTER TABLE occsol_2006 DROP COLUMN niv3_06; /* la fonction substring(cde_06 FROM 3 FOR 1) fera l'affaire */
ALTER TABLE occsol_2006 DROP COLUMN intit_06; /* on utilisera une jointure sur la table poste_ocsol */
ALTER TABLE occsol_2006 DROP COLUMN int_06;
ALTER TABLE occsol_2006 RENAME gid TO id_entite_occsol;
ALTER TABLE occsol_2006 ALTER COLUMN cde_06 TYPE character varying(3);
ALTER TABLE occsol_2006 RENAME cde_06 TO id_poste;
ALTER TABLE occsol_2006 add CONSTRAINT fk_id_poste_est_occsol FOREIGN KEY (id_poste) REFERENCES poste_occsol(id_poste);
=== Résolution des problèmes d'intégration de la base d'occupation du sol ===
[[http://trac.osgeo.org/postgis/wiki/UsersWikiCleanPolygons|Utilisation de la fonction CleanPolygons]]
Les données, valides sous mapinfo sont transformées par shp2pgsql. Lors de leur insertion dans la base postgis, un
select count(*) from occsol where isvalid(geometrie) is false;
retourne le résultat 983!!!
Ce qui présage des erreurs lors de l'exécution de requêtes géographiques.
Une première tentative de correction avec la requête suivante :
update occsol set geometrie=buffer(geometrie,0) where isvalid(geometrie) is false;
nous permet d'avoir 0 comme résultat à la requête précédente.
Cependant, une première requête spatiale calculant la part de chaque poste d'occupation du sol de différents périmètres retourne une surface totale supérieure à la surface de l'aire d'étude.
Les géométries sont corrigées mais la couche contient des objets superposés!
Le wiki de [[http://www.postgis.org|PostGIS]] et particulièrement cette page nous apportent la solution :
http://trac.osgeo.org/postgis/wiki/UsersWikiCleanPolygons