http://ocsol.siglr.net/index.php?option=com_docman&task=cat_view&gid=14&Itemid=5
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
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);
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 PostGIS et particulièrement cette page nous apportent la solution :
http://trac.osgeo.org/postgis/wiki/UsersWikiCleanPolygons