Faciliter l’export des données et en garder la trace

Les demandes de données sont fréquentes et il est intéressant d'une part, de se faciliter la vie, et d'autre part de garder une trace de ces exports afin de valoriser le travail réalisé par les naturalistes et de les tenir informés de l'utilisation qui est faite de leurs données.

On créer pour cela deux tables :

  • une destinée à recueillir l'emprise des zones sur lesquelles des demandes de données sont réalisées
CREATE TABLE export.zone_export_donnee
(
  id_zone serial NOT NULL,
  motif character varying(200),
  date date NOT NULL DEFAULT ('now'::text)::date,
  geometrie geometry,
  id_structure integer,
  CONSTRAINT pk_zone_export PRIMARY KEY (id_zone ),
  CONSTRAINT enforce_dims_geometrie CHECK (st_ndims(geometrie) = 2),
  CONSTRAINT enforce_geotype_geometrie CHECK (geometrytype(geometrie) = 'MULTIPOLYGON'::text OR geometrie IS NULL),
  CONSTRAINT enforce_srid_geometrie CHECK (st_srid(geometrie) = 2154)
)
WITH (
  OIDS=FALSE
);
COMMENT ON TABLE export.zone_export_donnee
  IS 'Table utilisée dans un projet Qgis pour définir des emprises sur lesquelles exporter les données. Assure une traçabilité des export dans la table export.structure_a_recu_donnee';
  • la seconde pour garder la trace des envois
CREATE TABLE export.structure_a_recu_donnee
(
  date_export date NOT NULL,
  id_entite character varying NOT NULL,
  id_structure integer NOT NULL,
  CONSTRAINT structure_a_recu_ese_pk PRIMARY KEY (date_export , id_entite , id_structure ),
  CONSTRAINT id_structure_reference_structure FOREIGN KEY (id_structure)
      REFERENCES md.structure (id_structure) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
  OIDS=FALSE
);
COMMENT ON TABLE export.structure_a_recu_donnee
  IS 'Trace l''ensemble des données envoyées à une structure, ainsi que la date d''envoi.';

Enfin, on crée un script (export_atlas_par_zone_export.sh) qui sera utilisé dans une action QGis :

mkdir -p "export"/$1/$3
cd "export"/$1/$3
pgsql2shp -f point_atlas_odopap_lr.shp -h adr.es.sse.ip -u nom_utilisateur -g geometrie nom_bdd "SELECT export.tous_point_espece_selon_format_esri.* FROM export.tous_point_espece_selon_format_esri, export.zone_export_donnee WHERE st_intersects(export.tous_point_espece_selon_format_esri.geometrie, export.zone_export_donnee.geometrie) AND id_zone='$2';"
psql -c "INSERT INTO export.structure_a_recu_donnee(date_export, id_entite, id_structure) SELECT current_date, id_entite, id_structure FROM export.tous_point_espece_selon_format_esri, export.zone_export_donnee WHERE st_intersects(export.tous_point_espece_selon_format_esri.geometrie, export.zone_export_donnee.geometrie) AND id_zone='$2'" -h adr.es.sse.ip -U nom_utilisateur nom_bdd 
echo "export terminé!"

L'action unix est créée comme ceci dans QGis :

./export_atlas_par_zone_export.sh %id_structure %id_zone %date