diff --git a/__init__.py b/__init__.py
index 9dac68a7..3b270337 100644
--- a/__init__.py
+++ b/__init__.py
@@ -4,6 +4,13 @@
from flask_sqlalchemy import SQLAlchemy
from flask_bootstrap import Bootstrap
+#import de babel pour traduction
+#from flask_babel import Babel, gettext, ngettext
+#from flask_babel import Babel
+
+#app = Flask(__name__)
+#babel = Babel(app)
+
APP_DIR = os.path.abspath(os.path.dirname(__file__))
BASE_DIR = os.path.abspath(os.path.join(APP_DIR, os.pardir))
TEMPLATE_DIR = APP_DIR+'/templates'
diff --git a/babel.cfg b/babel.cfg
new file mode 100644
index 00000000..0cc0baca
--- /dev/null
+++ b/babel.cfg
@@ -0,0 +1,3 @@
+[python: **.py]
+[jinja2: **/templates/**.html]
+extensions=jinja2.ext.autoescape,jinja2.ext.with_
\ No newline at end of file
diff --git a/data/gbif.sql b/data/gbif.sql
new file mode 100644
index 00000000..c329f08d
--- /dev/null
+++ b/data/gbif.sql
@@ -0,0 +1,722 @@
+-- SQL to update atlas database with GBIF data and backbone
+
+----------------------
+-- Remove default data
+----------------------
+
+-- Drop materialized in order to recreate it later
+drop materialized view atlas.vm_altitudes;
+drop materialized view atlas.vm_mois;
+drop materialized view atlas.vm_taxons_plus_observes;
+drop materialized view atlas.vm_observations_mailles;
+drop materialized view atlas.vm_search_taxon;
+drop materialized view atlas.vm_taxons;
+drop materialized view atlas.vm_observations;
+drop materialized view atlas.vm_taxref;
+
+-- Delete a constraint dependancy
+ALTER TABLE taxonomie.taxref_protection_especes DROP CONSTRAINT taxref_protection_especes_cd_nom_fkey;
+
+-- Truncate taxref table content (with default French taxonomic data to replace it later with GBIF backbone taxonomy)
+DELETE FROM taxonomie.taxref;
+
+-- Drop some views to recreate them later
+DROP view taxonomie.v_taxref_all_listes;
+DROP view taxonomie.v_taxref_hierarchie_bibtaxons;
+
+-- Update lb_auteur and lb_nom field length to 255 characters
+ALTER TABLE taxonomie.taxref ALTER COLUMN lb_auteur TYPE character varying (255);
+ALTER TABLE taxonomie.taxref ALTER COLUMN lb_nom TYPE character varying (255);
+
+-- Create a function to convert GBIF rank names to codes
+CREATE OR REPLACE FUNCTION gbif.convert_rank(my_rank text)
+ RETURNS text AS
+$BODY$
+ DECLARE
+ the_rank text;
+ BEGIN
+ IF my_rank = 'KINGDOM' THEN
+ the_rank = 'KD';
+ ELSIF my_rank = 'PHYLUM' THEN
+ the_rank = 'PH';
+ ELSIF my_rank = 'CLASS' THEN
+ the_rank = 'CL';
+ ELSIF my_rank = 'ORDER' THEN
+ the_rank = 'OR';
+ ELSIF my_rank = 'FAMILY' THEN
+ the_rank = 'FM';
+ ELSIF my_rank = 'GENUS' THEN
+ the_rank = 'GN';
+ ELSIF my_rank = 'SPECIES' THEN
+ the_rank = 'ES';
+ ELSIF my_rank = 'SUBSPECIES' THEN
+ the_rank = 'SSES';
+ ELSE my_rank = NULL;
+ END IF;
+ return the_rank;
+ END;
+ $BODY$
+ LANGUAGE plpgsql VOLATILE
+ COST 100;
+
+-----------------
+-- Taxonomic data
+-----------------
+
+-- Fill taxref table with GBIF backbone taxonomy data (more than 5 millions, can be long)
+INSERT INTO taxonomie.taxref(
+ cd_nom,
+ id_statut,
+ id_habitat,
+ id_rang,
+ regne,
+ phylum,
+ classe,
+ ordre,
+ famille,
+ cd_taxsup,
+ cd_sup,
+ cd_ref,
+ lb_nom,
+ lb_auteur,
+ nom_complet,
+ nom_complet_html,
+ nom_valide,
+ nom_vern,
+ nom_vern_eng,
+ group1_inpn,
+ group2_inpn
+ )
+WITH sup_species AS
+ (SELECT id, parent_key FROM gbif.backbone WHERE is_synonym = true LIMIT 100),
+k AS
+ (SELECT id, scientific_name FROM gbif.backbone
+ WHERE rank ='KINGDOM'),
+p AS
+ (SELECT id, scientific_name FROM gbif.backbone
+ WHERE rank ='PHYLUM'),
+c AS
+ (SELECT id, scientific_name FROM gbif.backbone
+ WHERE rank ='CLASS'),
+o AS
+ (SELECT id, scientific_name FROM gbif.backbone
+ WHERE rank ='ORDER'),
+f AS
+ (SELECT id, scientific_name FROM gbif.backbone
+ WHERE rank ='FAMILY')
+SELECT
+ b.id AS cd_nom,
+ '' AS id_statut,
+ 0 AS id_habitat,
+ gbif.convert_rank(rank) AS id_rang,
+ k.scientific_name AS regne,
+ p.scientific_name AS phylum,
+ c.scientific_name AS classe,
+ o.scientific_name AS ordre,
+ f.scientific_name AS famille,
+ CASE WHEN (b.is_synonym = false) THEN b.parent_key
+ WHEN (b.is_synonym = true) THEN NULL
+ END AS cd_taxsup,
+ CASE WHEN (b.is_synonym = false) THEN b.parent_key
+ WHEN (b.is_synonym = true) THEN NULL
+ END AS cd_sup,
+ CASE WHEN (b.is_synonym = false) THEN b.id
+ WHEN (b.is_synonym = true) THEN b.parent_key
+ END AS cd_ref,
+ b.scientific_name AS lb_nom,
+ b.authorship AS lb_auteur,
+ b.canonical_name AS nom_complet,
+ b.canonical_name AS nom_complet_html,
+ b.scientific_name AS nom_valide,
+ b.scientific_name AS nom_vern,
+ b.scientific_name AS nom_vern_eng,
+ p.scientific_name AS group1_inpn,
+ p.scientific_name AS group2_inpn
+FROM gbif.backbone AS b
+LEFT JOIN k ON k.id = b.kingdom_key
+LEFT JOIN p ON p.id = b.phylum_key
+LEFT JOIN c ON c.id = b.class_key
+LEFT JOIN o ON o.id = b.order_key
+LEFT JOIN f ON f.id = b.family_key;
+
+-- Add primary key index on taxonKey field from gbif.gbifjam table
+create index on gbif.gbifjam ("taxonKey");
+
+-- Insert taxons (that have at least 1 observation data) in bib_noms table, in order to be able to associate them some medias later
+INSERT INTO taxonomie.bib_noms (cd_nom, cd_ref, nom_francais)
+SELECT DISTINCT cd_nom, cd_ref, nom_vern
+FROM taxonomie.taxref t
+JOIN gbif.gbifjam j ON j."taxonKey" = t.cd_nom
+;
+
+--------------------
+-- Observations data
+--------------------
+
+-- Function to change date type from gbif.gbifjam table
+CREATE OR REPLACE FUNCTION synthese.change_date(my_date character varying(254))
+ RETURNS date AS
+$BODY$
+ DECLARE
+ the_date date;
+ BEGIN
+ the_date = to_date(my_date, 'YYYY-MM-DD');
+ return the_date;
+ EXCEPTION
+ WHEN others
+ THEN
+ raise notice 'Error date';
+ return null;
+ END;
+$BODY$
+LANGUAGE plpgsql VOLATILE
+COST 100;
+
+-- Truncate default content from syntheff table
+DELETE FROM synthese.syntheseff
+
+-- Change observateurs field type from character varying(255) to text
+ALTER TABLE synthese.syntheseff ALTER COLUMN observateurs TYPE text;
+
+-- Change id_synthese field type from serial to bigint to fill it with gbif.gbifjam.gbifid
+ALTER TABLE synthese.syntheseff ALTER COLUMN id_synthese TYPE bigint;
+
+-- Insert GBIF observations data into syntheseff table
+INSERT INTO synthese.syntheseff (id_synthese, cd_nom, dateobs, observateurs, the_geom_point, effectif_total, diffusable)
+SELECT
+ "gbifID",
+ "taxonKey",
+ synthese.change_date("eventDate"),
+ ' ',
+ ST_transform(ST_SETSRID(ST_MakePoint("decimalLongitude", "decimalLatitude"),4326),3857),
+ 1,
+ 'True'
+FROM gbif.gbifjam
+WHERE synthese.change_date("eventDate") IS NOT NULL;
+
+-- Create a function to get all parent taxons from a taxon with its unique ID (cd_nom)
+CREATE OR REPLACE FUNCTION atlas.get_all_cd_sup(the_cd_nom integer)
+ RETURNS SETOF integer AS
+$BODY$
+DECLARE rec record;
+BEGIN
+for rec in
+ WITH RECURSIVE taxon_sup(cd_nom, lb_nom, cd_taxsup) AS (
+ SELECT cd_nom, lb_nom, cd_taxsup
+ FROM taxonomie.taxref WHERE cd_nom = the_cd_nom
+ UNION ALL
+ SELECT e.cd_nom, e.lb_nom, e.cd_taxsup
+ FROM taxon_sup AS ss, taxonomie.taxref AS e
+ WHERE e.cd_nom = ss.cd_taxsup
+)
+SELECT cd_nom FROM taxon_sup
+LOOP
+ RETURN NEXT rec.cd_nom;
+END LOOP;
+ END;
+$BODY$
+LANGUAGE plpgsql IMMUTABLE
+COST 100;
+
+-- Delete a materialized view
+DROP materialized view atlas.vm_taxref;
+-- Recreate vm_taxref with all taxons observed at least once + their synonyms and parents
+-- Better for performances, rather than including the whole GBIF backbone that has more than 5 millions records
+CREATE materialized view atlas.vm_taxref AS
+WITH observed_taxons AS (
+ SELECT DISTINCT atlas.get_all_cd_sup(cd_nom) AS cd_nom FROM synthese.syntheseff)
+SELECT
+ tx.cd_nom,
+ tx.id_statut,
+ tx.id_habitat,
+ tx.id_rang,
+ tx.regne,
+ tx.phylum,
+ tx.classe,
+ tx.ordre,
+ tx.famille,
+ tx.cd_taxsup,
+ tx.cd_sup,
+ tx.cd_ref,
+ tx.lb_nom,
+ tx.lb_auteur,
+ tx.nom_complet,
+ tx.nom_complet_html,
+ tx.nom_valide,
+ tx.nom_vern,
+ tx.nom_vern_eng,
+ tx.group1_inpn,
+ tx.group2_inpn
+FROM taxonomie.taxref tx
+ RIGHT JOIN observed_taxons ot ON ot.cd_nom = tx.cd_ref;
+
+-- Add an index on cd_nom field from atlas.vm_taxref materialized view
+CREATE UNIQUE INDEX vm_taxref_cd_nom_idx
+ ON atlas.vm_taxref
+ USING btree
+ (cd_nom);
+
+-- Add another index
+CREATE INDEX vm_taxref_cd_ref_idx
+ ON atlas.vm_taxref
+ USING btree
+ (cd_ref);
+
+-- Add another index
+CREATE INDEX vm_taxref_cd_taxsup_idx
+ ON atlas.vm_taxref
+ USING btree
+ (cd_taxsup);
+
+-- Add another index
+CREATE INDEX vm_taxref_lb_nom_idx
+ ON atlas.vm_taxref
+ USING btree
+ (lb_nom COLLATE pg_catalog."default");
+
+-- Add another index
+CREATE INDEX vm_taxref_nom_complet_idx
+ ON atlas.vm_taxref
+ USING btree
+ (nom_complet COLLATE pg_catalog."default");
+
+-- Add another index
+CREATE INDEX vm_taxref_nom_valide_idx
+ ON atlas.vm_taxref
+ USING btree
+ (nom_valide COLLATE pg_catalog."default");
+
+-- Now that we have inserted GBIF data, we can recreate all materialized views used by GeoNature-atlas
+
+CREATE MATERIALIZED VIEW atlas.vm_observations AS
+ SELECT s.id_synthese AS id_observation,
+ s.insee,
+ s.dateobs,
+ s.observateurs,
+ s.altitude_retenue,
+ s.the_geom_point,
+ s.effectif_total,
+ tx.cd_ref,
+ st_asgeojson(st_transform(st_setsrid(s.the_geom_point, 3857), 4326)) AS geojson_point
+ FROM synthese.syntheseff s
+ LEFT JOIN atlas.vm_taxref tx ON tx.cd_nom = s.cd_nom
+ JOIN atlas.t_layer_territoire m ON ST_Intersects(m.the_geom, s.the_geom_point)
+ WHERE s.supprime = false AND s.diffusable = true
+WITH DATA;
+
+CREATE MATERIALIZED VIEW atlas.vm_observations_mailles AS
+ SELECT obs.cd_ref,
+ obs.id_observation,
+ m.id_maille,
+ m.the_geom,
+ m.geojson_maille
+ FROM atlas.vm_observations obs
+ JOIN atlas.t_mailles_territoire m ON st_intersects(obs.the_geom_point, st_transform(m.the_geom, 3857))
+WITH DATA;
+
+REINDEX INDEX atlas.vm_observations_mailles_cd_ref_idx;
+REINDEX INDEX atlas.index_gist_atlas_vm_observations_mailles_geom;
+REINDEX INDEX atlas.vm_observations_mailles_geojson_maille_idx;
+REINDEX INDEX atlas.vm_observations_mailles_id_maille_idx;
+REINDEX INDEX atlas.vm_observations_mailles_id_observation_idx;
+
+DROP MATERIALIZED VIEW atlas.vm_search_taxon;
+DROP MATERIALIZED VIEW atlas.vm_taxons_plus_observes;
+DROP MATERIALIZED VIEW atlas.vm_taxons;
+
+CREATE MATERIALIZED VIEW atlas.vm_taxons AS
+ WITH obs_min_taxons AS (
+ SELECT vm_observations.cd_ref,
+ min(date_part('year'::text, vm_observations.dateobs)) AS yearmin,
+ max(date_part('year'::text, vm_observations.dateobs)) AS yearmax,
+ count(vm_observations.id_observation) AS nb_obs
+ FROM atlas.vm_observations
+ GROUP BY vm_observations.cd_ref
+ ), tx_ref AS (
+ SELECT tx_1.cd_ref,
+ tx_1.regne,
+ tx_1.phylum,
+ tx_1.classe,
+ tx_1.ordre,
+ tx_1.famille,
+ tx_1.cd_taxsup,
+ tx_1.lb_nom,
+ tx_1.lb_auteur,
+ tx_1.nom_complet,
+ tx_1.nom_valide,
+ tx_1.nom_vern,
+ tx_1.nom_vern_eng,
+ tx_1.group1_inpn,
+ tx_1.group2_inpn,
+ tx_1.nom_complet_html,
+ tx_1.id_rang
+ FROM atlas.vm_taxref tx_1
+ WHERE (tx_1.cd_ref IN ( SELECT obs_min_taxons.cd_ref
+ FROM obs_min_taxons)) AND tx_1.cd_nom = tx_1.cd_ref
+ ), my_taxons AS (
+ SELECT DISTINCT n.cd_ref,
+ pat.valeur_attribut AS patrimonial,
+ pr.valeur_attribut AS protection_stricte
+ FROM tx_ref n
+ LEFT JOIN taxonomie.cor_taxon_attribut pat ON pat.cd_ref = n.cd_ref AND pat.id_attribut = 1
+ LEFT JOIN taxonomie.cor_taxon_attribut pr ON pr.cd_ref = n.cd_ref AND pr.id_attribut = 2
+ WHERE (n.cd_ref IN ( SELECT obs_min_taxons.cd_ref
+ FROM obs_min_taxons))
+ )
+ SELECT tx.cd_ref,
+ tx.regne,
+ tx.phylum,
+ tx.classe,
+ tx.ordre,
+ tx.famille,
+ tx.cd_taxsup,
+ tx.lb_nom,
+ tx.lb_auteur,
+ tx.nom_complet,
+ tx.nom_valide,
+ tx.nom_vern,
+ tx.nom_vern_eng,
+ tx.group1_inpn,
+ tx.group2_inpn,
+ tx.nom_complet_html,
+ tx.id_rang,
+ t.patrimonial,
+ t.protection_stricte,
+ omt.yearmin,
+ omt.yearmax,
+ omt.nb_obs
+ FROM tx_ref tx
+ LEFT JOIN obs_min_taxons omt ON omt.cd_ref = tx.cd_ref
+ LEFT JOIN my_taxons t ON t.cd_ref = tx.cd_ref
+WITH DATA;
+
+CREATE UNIQUE INDEX vm_taxons_cd_ref_idx
+ ON atlas.vm_taxons
+ USING btree
+ (cd_ref);
+
+CREATE MATERIALIZED VIEW atlas.vm_taxons_plus_observes AS
+ SELECT count(*) AS nb_obs,
+ obs.cd_ref,
+ tax.lb_nom,
+ tax.group2_inpn,
+ tax.nom_vern,
+ m.id_media,
+ m.url,
+ m.chemin,
+ m.id_type
+ FROM atlas.vm_observations obs
+ JOIN atlas.vm_taxons tax ON tax.cd_ref = obs.cd_ref
+ LEFT JOIN atlas.vm_medias m ON m.cd_ref = obs.cd_ref AND m.id_type = 1
+ WHERE date_part('day'::text, obs.dateobs) >= date_part('day'::text, 'now'::text::date - 15) AND date_part('month'::text, obs.dateobs) = date_part('month'::text, 'now'::text::date - 15) OR date_part('day'::text, obs.dateobs) <= date_part('day'::text, 'now'::text::date + 15) AND date_part('month'::text, obs.dateobs) = date_part('day'::text, 'now'::text::date + 15)
+ GROUP BY obs.cd_ref, tax.lb_nom, tax.nom_vern, m.url, m.chemin, tax.group2_inpn, m.id_type, m.id_media
+ ORDER BY (count(*)) DESC
+ LIMIT 12
+WITH DATA;
+
+CREATE UNIQUE INDEX vm_taxons_plus_observes_cd_ref_idx
+ ON atlas.vm_taxons_plus_observes
+ USING btree
+ (cd_ref);
+
+CREATE MATERIALIZED VIEW atlas.vm_search_taxon AS
+ SELECT tx.cd_nom,
+ tx.cd_ref,
+ COALESCE((tx.lb_nom::text || ' | '::text) || tx.nom_vern::text, tx.lb_nom::text) AS nom_search
+ FROM atlas.vm_taxref tx
+ JOIN atlas.vm_taxons t ON t.cd_ref = tx.cd_ref
+WITH DATA;
+
+CREATE UNIQUE INDEX vm_search_taxon_cd_nom_idx
+ ON atlas.vm_search_taxon
+ USING btree
+ (cd_nom);
+
+CREATE INDEX vm_search_taxon_cd_ref_idx
+ ON atlas.vm_search_taxon
+ USING btree
+ (cd_ref);
+
+CREATE INDEX vm_search_taxon_nom_search_idx
+ ON atlas.vm_search_taxon
+ USING btree
+ (nom_search COLLATE pg_catalog."default");
+
+CREATE MATERIALIZED VIEW atlas.vm_mois AS
+ WITH _01 AS (
+ SELECT vm_observations.cd_ref,
+ count(*) AS nb
+ FROM atlas.vm_observations
+ WHERE date_part('month'::text, vm_observations.dateobs) = '1'::double precision
+ GROUP BY vm_observations.cd_ref
+ ), _02 AS (
+ SELECT vm_observations.cd_ref,
+ count(*) AS nb
+ FROM atlas.vm_observations
+ WHERE date_part('month'::text, vm_observations.dateobs) = '2'::double precision
+ GROUP BY vm_observations.cd_ref
+ ), _03 AS (
+ SELECT vm_observations.cd_ref,
+ count(*) AS nb
+ FROM atlas.vm_observations
+ WHERE date_part('month'::text, vm_observations.dateobs) = '3'::double precision
+ GROUP BY vm_observations.cd_ref
+ ), _04 AS (
+ SELECT vm_observations.cd_ref,
+ count(*) AS nb
+ FROM atlas.vm_observations
+ WHERE date_part('month'::text, vm_observations.dateobs) = '4'::double precision
+ GROUP BY vm_observations.cd_ref
+ ), _05 AS (
+ SELECT vm_observations.cd_ref,
+ count(*) AS nb
+ FROM atlas.vm_observations
+ WHERE date_part('month'::text, vm_observations.dateobs) = '5'::double precision
+ GROUP BY vm_observations.cd_ref
+ ), _06 AS (
+ SELECT vm_observations.cd_ref,
+ count(*) AS nb
+ FROM atlas.vm_observations
+ WHERE date_part('month'::text, vm_observations.dateobs) = '6'::double precision
+ GROUP BY vm_observations.cd_ref
+ ), _07 AS (
+ SELECT vm_observations.cd_ref,
+ count(*) AS nb
+ FROM atlas.vm_observations
+ WHERE date_part('month'::text, vm_observations.dateobs) = '7'::double precision
+ GROUP BY vm_observations.cd_ref
+ ), _08 AS (
+ SELECT vm_observations.cd_ref,
+ count(*) AS nb
+ FROM atlas.vm_observations
+ WHERE date_part('month'::text, vm_observations.dateobs) = '8'::double precision
+ GROUP BY vm_observations.cd_ref
+ ), _09 AS (
+ SELECT vm_observations.cd_ref,
+ count(*) AS nb
+ FROM atlas.vm_observations
+ WHERE date_part('month'::text, vm_observations.dateobs) = '9'::double precision
+ GROUP BY vm_observations.cd_ref
+ ), _10 AS (
+ SELECT vm_observations.cd_ref,
+ count(*) AS nb
+ FROM atlas.vm_observations
+ WHERE date_part('month'::text, vm_observations.dateobs) = '10'::double precision
+ GROUP BY vm_observations.cd_ref
+ ), _11 AS (
+ SELECT vm_observations.cd_ref,
+ count(*) AS nb
+ FROM atlas.vm_observations
+ WHERE date_part('month'::text, vm_observations.dateobs) = '11'::double precision
+ GROUP BY vm_observations.cd_ref
+ ), _12 AS (
+ SELECT vm_observations.cd_ref,
+ count(*) AS nb
+ FROM atlas.vm_observations
+ WHERE date_part('month'::text, vm_observations.dateobs) = '12'::double precision
+ GROUP BY vm_observations.cd_ref
+ )
+ SELECT DISTINCT o.cd_ref,
+ COALESCE(a.nb::integer, 0) AS _01,
+ COALESCE(b.nb::integer, 0) AS _02,
+ COALESCE(c.nb::integer, 0) AS _03,
+ COALESCE(d.nb::integer, 0) AS _04,
+ COALESCE(e.nb::integer, 0) AS _05,
+ COALESCE(f.nb::integer, 0) AS _06,
+ COALESCE(g.nb::integer, 0) AS _07,
+ COALESCE(h.nb::integer, 0) AS _08,
+ COALESCE(i.nb::integer, 0) AS _09,
+ COALESCE(j.nb::integer, 0) AS _10,
+ COALESCE(k.nb::integer, 0) AS _11,
+ COALESCE(l.nb::integer, 0) AS _12
+ FROM atlas.vm_observations o
+ LEFT JOIN _01 a ON a.cd_ref = o.cd_ref
+ LEFT JOIN _02 b ON b.cd_ref = o.cd_ref
+ LEFT JOIN _03 c ON c.cd_ref = o.cd_ref
+ LEFT JOIN _04 d ON d.cd_ref = o.cd_ref
+ LEFT JOIN _05 e ON e.cd_ref = o.cd_ref
+ LEFT JOIN _06 f ON f.cd_ref = o.cd_ref
+ LEFT JOIN _07 g ON g.cd_ref = o.cd_ref
+ LEFT JOIN _08 h ON h.cd_ref = o.cd_ref
+ LEFT JOIN _09 i ON i.cd_ref = o.cd_ref
+ LEFT JOIN _10 j ON j.cd_ref = o.cd_ref
+ LEFT JOIN _11 k ON k.cd_ref = o.cd_ref
+ LEFT JOIN _12 l ON l.cd_ref = o.cd_ref
+ WHERE o.cd_ref IS NOT NULL
+ ORDER BY o.cd_ref
+WITH DATA;
+
+CREATE UNIQUE INDEX vm_mois_cd_ref_idx
+ ON atlas.vm_mois
+ USING btree
+ (cd_ref);
+
+-- Altitude classes - Should be updated with altitudes for your territory
+
+CREATE MATERIALIZED VIEW atlas.vm_altitudes AS
+ WITH alt1 AS (
+ SELECT vm_observations.cd_ref,
+ count(*) AS nb
+ FROM atlas.vm_observations
+ WHERE vm_observations.altitude_retenue < 499
+ GROUP BY vm_observations.cd_ref
+ ), alt2 AS (
+ SELECT vm_observations.cd_ref,
+ count(*) AS nb
+ FROM atlas.vm_observations
+ WHERE vm_observations.altitude_retenue >= 500 AND vm_observations.altitude_retenue <= 999
+ GROUP BY vm_observations.cd_ref
+ ), alt3 AS (
+ SELECT vm_observations.cd_ref,
+ count(*) AS nb
+ FROM atlas.vm_observations
+ WHERE vm_observations.altitude_retenue >= 1000 AND vm_observations.altitude_retenue <= 1499
+ GROUP BY vm_observations.cd_ref
+ ), alt4 AS (
+ SELECT vm_observations.cd_ref,
+ count(*) AS nb
+ FROM atlas.vm_observations
+ WHERE vm_observations.altitude_retenue >= 1500 AND vm_observations.altitude_retenue <= 1999
+ GROUP BY vm_observations.cd_ref
+ ), alt5 AS (
+ SELECT vm_observations.cd_ref,
+ count(*) AS nb
+ FROM atlas.vm_observations
+ WHERE vm_observations.altitude_retenue >= 2000 AND vm_observations.altitude_retenue <= 2499
+ GROUP BY vm_observations.cd_ref
+ ), alt6 AS (
+ SELECT vm_observations.cd_ref,
+ count(*) AS nb
+ FROM atlas.vm_observations
+ WHERE vm_observations.altitude_retenue >= 2500 AND vm_observations.altitude_retenue <= 2999
+ GROUP BY vm_observations.cd_ref
+ ), alt7 AS (
+ SELECT vm_observations.cd_ref,
+ count(*) AS nb
+ FROM atlas.vm_observations
+ WHERE vm_observations.altitude_retenue >= 3000 AND vm_observations.altitude_retenue <= 3499
+ GROUP BY vm_observations.cd_ref
+ ), alt8 AS (
+ SELECT vm_observations.cd_ref,
+ count(*) AS nb
+ FROM atlas.vm_observations
+ WHERE vm_observations.altitude_retenue >= 3500 AND vm_observations.altitude_retenue <= 3999
+ GROUP BY vm_observations.cd_ref
+ ), alt9 AS (
+ SELECT vm_observations.cd_ref,
+ count(*) AS nb
+ FROM atlas.vm_observations
+ WHERE vm_observations.altitude_retenue >= 4000 AND vm_observations.altitude_retenue <= 4102
+ GROUP BY vm_observations.cd_ref
+ )
+ SELECT DISTINCT o.cd_ref,
+ COALESCE(a1.nb::integer, 0) AS _0_500,
+ COALESCE(a2.nb::integer, 0) AS _500_1000,
+ COALESCE(a3.nb::integer, 0) AS _1000_1500,
+ COALESCE(a4.nb::integer, 0) AS _1500_2000,
+ COALESCE(a5.nb::integer, 0) AS _2000_2500,
+ COALESCE(a6.nb::integer, 0) AS _2500_3000,
+ COALESCE(a7.nb::integer, 0) AS _3000_3500,
+ COALESCE(a8.nb::integer, 0) AS _3500_4000,
+ COALESCE(a9.nb::integer, 0) AS _4000_4103
+ FROM atlas.vm_observations o
+ LEFT JOIN alt1 a1 ON a1.cd_ref = o.cd_ref
+ LEFT JOIN alt2 a2 ON a2.cd_ref = o.cd_ref
+ LEFT JOIN alt3 a3 ON a3.cd_ref = o.cd_ref
+ LEFT JOIN alt4 a4 ON a4.cd_ref = o.cd_ref
+ LEFT JOIN alt5 a5 ON a5.cd_ref = o.cd_ref
+ LEFT JOIN alt6 a6 ON a6.cd_ref = o.cd_ref
+ LEFT JOIN alt7 a7 ON a7.cd_ref = o.cd_ref
+ LEFT JOIN alt8 a8 ON a8.cd_ref = o.cd_ref
+ LEFT JOIN alt9 a9 ON a9.cd_ref = o.cd_ref
+ WHERE o.cd_ref IS NOT NULL
+ ORDER BY o.cd_ref
+WITH DATA;
+
+REINDEX INDEX atlas.vm_altitudes_cd_ref_idx;
+
+-- Create a function to cast taxonkey
+CREATE OR REPLACE FUNCTION atlas.cast_taxonkey(my_taxonkey character varying(254))
+ RETURNS integer AS
+$BODY$
+ DECLARE
+ the_taxonkey integer;
+ BEGIN
+ the_taxonkey = my_taxonkey::integer;
+ return the_taxonkey;
+ EXCEPTION
+ WHEN others
+ THEN
+ raise notice 'Error taxonkey';
+ return null;
+ END;
+$BODY$
+LANGUAGE plpgsql VOLATILE
+COST 100;
+
+-- Cast insee column (municipality ID) to integer (instead of float)
+DROP MATERIALIZED VIEW atlas.vm_communes;
+
+CREATE MATERIALIZED VIEW atlas.vm_communes AS
+ SELECT c.insee::integer,
+ c.commune_maj,
+ c.the_geom,
+ st_asgeojson(st_transform(c.the_geom, 4326)) AS commune_geojson
+ FROM atlas.l_communes c
+ JOIN atlas.t_layer_territoire t ON st_contains(st_buffer(t.the_geom, 200::double precision), c.the_geom)
+WITH DATA;
+
+-- Intersect observations with municipalities polygons
+UPDATE synthese.syntheseff s SET insee = c.insee
+FROM atlas.vm_communes c
+WHERE ST_Intersects(s.the_geom_point, c.the_geom);
+
+-- And include municipalities ID in observations materialized view
+REFRESH MATERIALIZED VIEW CONCURRENTLY atlas.vm_observations;
+
+-- Translate main ranks into English
+UPDATE atlas.bib_taxref_rangs SET nom_rang = 'Domain'
+WHERE id_rang = 'Dumm';
+UPDATE atlas.bib_taxref_rangs SET nom_rang = 'Kingdom'
+WHERE id_rang = 'KD';
+UPDATE atlas.bib_taxref_rangs SET nom_rang = 'Family'
+WHERE id_rang = 'FM';
+UPDATE atlas.bib_taxref_rangs SET nom_rang = 'Subfamily'
+WHERE id_rang = 'SBFM';
+UPDATE atlas.bib_taxref_rangs SET nom_rang = 'Order'
+WHERE id_rang = 'OR';
+UPDATE atlas.bib_taxref_rangs SET nom_rang = 'Suborder'
+WHERE id_rang = 'SBOR';
+UPDATE atlas.bib_taxref_rangs SET nom_rang = 'Class'
+WHERE id_rang = 'CL';
+UPDATE atlas.bib_taxref_rangs SET nom_rang = 'Genus'
+WHERE id_rang = 'GN';
+UPDATE atlas.bib_taxref_rangs SET nom_rang = 'Subgenus'
+WHERE id_rang = 'SSGN';
+UPDATE atlas.bib_taxref_rangs SET nom_rang = 'Species'
+WHERE id_rang = 'ES';
+UPDATE atlas.bib_taxref_rangs SET nom_rang = 'Subspecies'
+WHERE id_rang = 'SSES';
+
+-- GRANT SELECT to your database reader user on ALL TABLES
+-- Replace
+ The National Park has been collecting fauna and flora data on its territory for more than 40 years, which are used to better understand biodiversity, to monitor the evolution of certain fragile or heritage species ... To act intelligently to safeguard this natural heritage. requires to know him and understand it. +
++ Biodiv'Ecrins puts at your disposal all the data collected by the Ecrins National Park since its creation in 1973. +
++ Everyday, its agents make observations in the framework of their missions with a real concern to enrich the knowledge on the alpine biodiversity.They are displayed in real time on this atlas.You can thus follow the state of the knowledge on this territory." +
++ +
++ Inauguration of Biodiv'Ecrins on November 29, 2016 during the press conference organized by the Ministry of the Environment, at the National Museum of Natural History (MNHN) in Paris. +
++ This meeting is associated with the publication of the first law enforcement decree for the recovery of biodiversity, nature and landscapes which, in its article 7, strengthens the national policy on the inventory of natural heritage and opening the data. +
+
+ Read the article on the website of the Ecrins National Park
+ Download the press release
+ Download the photos
+
Find the record of each species with their map of the observations, their altitudinal and monthly distribution, as well as descriptions, photos, videos, audios and complementary links
+ +Discover the species observed in each commune of the national park and post their observations on the map of the town.
+ +Discover the photographs of the various species, made mainly by the agents of the National Park during their missions in the field.
+ ++ With some surprises always possible, the vertebrate fauna is now well identified in the Ecrins National Park. + These are mammals, birds, reptiles and amphibians. +
++ This is not the case for invertebrate fauna. These are the strange little beasts that are insects, snails, centipedes or even spiders, beetles and crayfish ... A quantity of species as impressive as full of scientific promise. +
++ + « The National Park database is not an inventory. + It gathers information collected under different scientific protocols with different objectives. + In fact, the large number of ibex sightings does not mean that it is the species most present in the massif but of a highly followed species, especially in the context of reintroductions ! » + +
++ -Ludovic Imberdis, 'Wildlife' project manager at the Écrins National Park +
++ To know more : http://www.ecrins-parcnational.fr/thematique/faune-sauvage. +
++ +
+ More than 2000 species of plants are presented in this atlas. + If the inventory of the plant world continues in the Ecrins, the National Park also keeps track of emblematic species (such as the blue thistle and the Venus hoof) and participates in many research programs on the natural environments and species of high altitude. +
++ Some plants present remarkable life stories, ranging from heirs to old farming practices (hay meadows, extensive grain crops) to high mountain explorers. +
+
+
+ « The immense interest of an online atlas is to share and make live an exceptional knowledge of the wild world present in the Ecrins.
+ Such a tool restores the sometimes hackneyed term of 'biodiversity', elegantly describing and illustrating the abundant diversity of species observed and studied.»
+
+
+ - Cédric Dentant, botanist, project manager flora and environment in the Ecrins National Park +
++ To know more : http://www.ecrins-parcnational.fr/thematique/flore. +
+ ++ The preservation of species, habitats and natural resources is based on the collection of observations, the shaping of knowledge and the contribution to scientific research. +
++ + Which species frequent the massif, how do they interact, how do their populations evolve, or what are the consequences for these species of the territory's human activities? + It is to answer such questions that different scientific protocols are implemented. + Many of the raw observations related to these protocols are synthesized in this atlas. + +
++ The richness of the fauna and flora of the Ecrins is due to the diversity of climatic and geological influences, to the altitudinal amplitude - ranging from about 800 m to 4102 m - and to the different reliefs of the massif. + So, the Provencal vole and the ocellated lizard, southern species, are present in the territory of the Ecrins in the same way as the snow vole and ptarmigan, relicts of the last glaciations. + The diversity of ecological conditions is suitable for many plants, ranging from robust larch steep slopes to microscopic chlamydomonas of fir trees ! +
++ To preserve this exceptional natural heritage, at the origin of the creation of the National Park, it is necessary to know it well. The various inventory, monitoring and study programs undertaken in the territory all pursue this objective. +
+
+ To learn more, see the action of the National Park in terms of fauna and flora :
+ http://www.ecrins-parcnational.fr/thematique/faune-sauvage
+ http://www.ecrins-parcnational.fr/thematique/flore
+
+ Biodiv'Ecrins uses the tool GeoNature-atlas developed by the Ecrins National Park and published under a free license. It is thus freely transferable to other structures wishing to share their naturalistic observations based on the INPN's national standards. +
++ Download it presentation sheet of GeoNature-atlas to know more. +
++ It is part of a set of tools developed by the National Park and its partners, in order to capture, manage and process data from different protocols (http://geonature.fr). +
++ +
++ + « Our tools are thought from the outset to be able to be deployed by other structures in different contexts. + For this, the focus is on generic developments and on the publication of the freely licensed tool for ease of use by others. ». + +
++ - Camille Monchicourt, head of the information system at the Ecrins National Park +
+
+ Indeed the Ecrins National Park has undertaken for the past ten years, to migrate its information system to open source tools.
+ Free software (whose source code is open, accessible and modifiable by whomever it wishes) allows greater modularity and interoperability of tools and data, in addition to facilitating pooling and reducing licensing costs.
+
+ This is why the national park also wished that the tools that it develops for its own needs are also published under free license.
+ In 2011, the Ecrins National Park designed and published under free license the application Geotrek
to manage and enhance the trails. Today, it is used by some forty structures in France that have made it evolve in turn, leading to significant pooling of public resources.
+ To learn more, read 'Geotrek, the advent of a community of users'.
+
+ * Opensource software is a computer program whose source code is distributed under a "free" license, allowing anyone to read, modify or redistribute this software. +
++ The National Park is part of a naturalist data collection network. + It contributes to the enrichment of thematic databases available to both specialists and the public. +
++ By multiplying the exchange conventions, the National Park values and expands the use of the data acquired by its agents. +
++ According to the websites, it is possible to CONSULT information, DOWNLOAD syntheses or even to PARTICIPATE in the observations. +
++ +
++ National Inventory of Natural Heritage (MNHN) +
+
+ On the site dedicated to the MNHN (National Museum of Natural History), we find more than 300 000 data on wildlife in the Ecrins National Park among 30 million collected throughout the national territory and agglomerated in this national inventory .
+
+ The National Museum uses this information to synthesize at national and international levels.
+
+ This approach makes it possible to include environmental issues in national and European policies.
+
+ To learn more, read National Park observations are online. +
++ To download organized data +
++ SILENE PACA +
+
+ Silene, ISNL platform (Information System on Nature and Landscapes), is the data portal of the Provence-Alpes-Côte d'Azur region.}
+ On this site which allows to enter and to consult a mass of very important data, syntheses of the inheritances flora and fauna of the region by commune and by mesh are available
+
+ See also the counterpart for the Rhône-Alpes region : The Flora and Habitats Information Center (FHIC). +
++ National Alpine Botanical Conservatory (NABC) +
++ The site of the National Alpine Botanical Conservatory offers for its entire range of approval (Alps and Ain: 04-05-01) data relating to flora and habitats. + The Park is an important contributor. +
++ See as well SI National Flora et Tela Botanica. +
++ To participate ! +
+
+ Anyone can, if he wishes, become a contributor by transmitting his observations of mammals, but also other species, on different naturalistic platforms and in particular, for the Ecrins, on the two participatory sites of the LPO.
+
+ faune-paca.org et faune-isere.org
+
+ It is also a way to supplement the knowledge of the National Park since there is a data exchange agreement with the LPO.
+
+ This is also the case with the Group chiroptera of Provence.
+
+ For flora, an online atlas for the Hautes-Alpes department also welcomes contributions : bdflore05.org.
+ As for wildlife, a convention has been initiated and is actively involved in regularly exchanging observational data.
+
Side Isère, the association Gentiana animates a permanent inventory of the flora of the department : gentiana.org.
+
+ Le Parc national recueille des données faune et flore sur son territoire depuis plus de 40 ans. Celles-ci sont utilisées pour mieux connaître la biodiversité, suivre les évolutions de certaines espèces fragiles ou patrimoniales… Car agir intelligemment pour la sauvegarde de ce patrimoine naturel requiert de le connaître et le comprendre. +
++ Biodiv'Ecrins met à votre disposition l'ensemble des données collectées par le Parc national des Écrins depuis sa création en 1973. +
++ Chaque jour, ses agents font des observations dans le cadre de leurs missions avec un véritable souci d'enrichissement des connaissances sur la biodiversité alpine. Elles sont affichées en temps réel sur cet atlas. Vous pouvez ainsi suivre l'état des connaissances sur ce territoire. +
++ +
++ Inauguration de Biodiv'Ecrins le 29 novembre 2016 lors de la conférence de presse organisée par le Ministère de l'Environnement, au Musée national d'histoire naturelle (MNHN) à Paris. +
++ Ce rendez-vous est associé à la publication du premier décret d'application de la loi pour la reconquête de la biodiversité, de la nature et des paysages qui, dans son article 7, renforce la politique nationale en matière d'inventaire du patrimoine naturel et d'ouverture des données. +
+
+ Lire l'article sur le site internet du Parc national des Ecrins
+ Télécharger le communiqué de presse
+ Télécharger les photos
+
Retrouvez la fiche de chaque espèce avec leur carte des observations, leur répartition altitudinale et mensuelle, ainsi que des descriptions, photos, vidéos, audios et liens complémentaires
+ +Découvrez les espèces observées sur chaque commune du parc national et affichez leurs observations sur la carte de la commune.
+ +Découvrez les photographies des différentes espèces, réalisées principalement par les agents du Parc national lors de leurs missions sur le terrain.
+ ++ A quelques surprises près toujours possibles, la faune des vertébrés est aujourd'hui bien identifiée dans le Parc national des Écrins. + Il s'agit des mammifères, oiseaux, reptiles et amphibiens. +
++ Il n'en va pas de même pour la faune des invertébrés. Il s'agit de ces étranges petites bêtes que sont les insectes, les escargots, les millepattes ou encore les araignées, coléoptères et écrevisses... Une quantité d'espèces aussi impressionnante que pleine de promesses scientifiques. +
++ + « La base de données du Parc national n'est pas un inventaire. + Elle rassemble des informations collectées dans le cadre de différents protocoles scientifiques avec des objectifs différents. + De fait, le nombre important d'observations de bouquetins ne veut pas dire qu'il s'agit de l'espèce la plus présente dans le massif mais bien d'une espèces très suivie, notamment dans le cadre des réintroductions ! » + +
++ - Ludovic Imberdis, chargé de mission « faune » au Parc national des Écrins +
++ Pour en savoir plus : http://www.ecrins-parcnational.fr/thematique/faune-sauvage. +
++ +
+ Plus de 2000 espèces de plantes sont présentées dans cet atlas. + Si l'inventaire du monde végétal se poursuit dans les Écrins, le Parc national assure également le suivi d'espèces emblématiques (comme le chardon bleu et le sabot de Vénus) et participe à de nombreux programmes de recherche sur les milieux et espèces naturels de haute altitude. +
++ Certaines plantes présentent des histoires de vie remarquables, allant des héritières de pratiques agricoles anciennes (prairies de fauche, cultures extensives de céréales) aux exploratrices de la haute montagne. +
+
+
+ « L'immense intérêt d'un atlas en ligne est de partager et faire vivre une connaissance exceptionnelle du monde sauvage présent dans les Ecrins.
+ Un tel outil redonne corps au terme parfois éculé de 'biodiversité', décrivant et illustrant avec élégance la foisonnante diversité des espèces observées et étudiées. »
+
+
+ - Cédric Dentant, botaniste, chargé de mission flore et milieux au Parc national des Écrins +
++ Pour en savoir plus : http://www.ecrins-parcnational.fr/thematique/flore. +
+ ++ La préservation des espèces, des habitats et des ressources naturelles s'appuie sur le recueil d'observations, le façonnage des connaissances et la contribution à la recherche scientifique. +
++ + Quelles espèces fréquentent le massif, comment elles interagissent, comment évoluent leurs populations, ou encore quelles sont les conséquences sur ces espèces des activités humaines du territoire ? + C'est pour répondre à ce type de questions que différents protocoles scientifiques sont mis en œuvre. + Un grand nombre des observations brutes liées à ces protocoles sont synthétisées dans cet atlas. + +
++ La richesse de la faune et de la flore des Écrins tient à la diversité des influences climatiques, géologiques, à l'amplitude altitudinale – s'échelonnant d'environ 800 m à 4102 m –, et aux différents modelés des reliefs du massif. + Ainsi, le campagnol provençal et le lézard ocellé, espèces méridionales, sont présents dans le territoire des Ecrins au même titre que le campagnol des neiges et le lagopède alpin, relictes des dernières glaciations. + La diversité des conditions écologiques convient à nombre de plantes, allant du robuste mélèze des pentes abruptes à la microscopique chlamydomonas des névés ! +
++ Pour conserver ce patrimoine naturel d'exception, à l'origine de la création du Parc national, il convient de bien le connaître. Les différents programmes d'inventaire, de suivi ou d'études engagés sur le territoire poursuivent tous cet objectif. +
+
+ Pour en savoir plus, voir l'action du Parc national en termes de faune et de flore :
+ http://www.ecrins-parcnational.fr/thematique/faune-sauvage
+ http://www.ecrins-parcnational.fr/thematique/flore
+
+ Biodiv'Ecrins utilise l'outil GeoNature-atlas développé par le Parc national des Écrins et publié sous licence libre. Il est ainsi transférable librement à d'autres structures qui souhaitent partager leurs observations naturalistes en se basant sur les référentiels nationaux de l'INPN. +
++ Téléchargez la fiche de présentation de GeoNature-atlas pour en savoir plus. +
++ Il fait partie d'un ensemble d'outils développé par le Parc national et ses partenaires, pour pouvoir saisir, gérer et traiter les données des différents protocoles (http://geonature.fr). +
++ +
++ + « Nos outils sont pensés, dès le départ, pour pouvoir être déployés par d’autres structures dans des contextes différents. + Pour cela, l’accent est mis sur des développements génériques et sur la publication de l’outil sous licence libre pour en faciliter l’utilisation par d’autres ». + +
++ - Camille Monchicourt, responsable du système d’informations au Parc national des Ecrins +
+
+ En effet le Parc national des Ecrins a entrepris depuis une dizaine d'années, de migrer son système d'informations vers des outils open source.
+ Les logiciels libres (dont le code source est ouvert, accessible et modifiable par qui le souhaite) permettent une plus grande modularité et interopérabilité des outils et des données, en plus de faciliter la mutualisation et de réduire les coûts liés aux licences.
+
+ C'est pourquoi le parc national a aussi souhaité que les outils qu'il développe pour ses propres besoins soient eux-aussi publiés sous licence libre.
+ En 2011, le Parc national des Ecrins a conçu et publié sous licence libre l'application Geotrek
pour gérer et valoriser les sentiers. Elle est aujourd'hui utilisée par une quarantaine de structures en France qui l'ont faite évoluer à leur tour, entrainant ainsi d'importantes mutualisations des ressources publiques.
+ Pour en savoir plus, lire "Geotrek, l’avènement d'une communauté d'utilisateurs".
+
+ * Un logiciel Opensource est un programme informatique dont le code source est distribué sous une licence dite « libre », permettant à quiconque de lire, modifier ou redistribuer ce logiciel. +
++ Le Parc national fait partie d'un réseau de collecte de données naturalistes. + Il contribue ainsi à enrichir des bases de données thématiques mises à disposition tant des spécialistes que du public. +
++ En multipliant les conventions d'échanges, le Parc national valorise et élargit l'utilisation des données acquises par ses agents. +
++ Selon les sites internet, il est possible de CONSULTER les informations, de TÉLÉCHARGER des synthèses voire de PARTICIPER aux observations. +
++ +
++ Inventaire National du Patrimoine Naturel (INPN) +
+
+ Sur le site consacré à l'INPN (Muséum national d'histoire naturelle), on retrouve plus de 300 000 données sur la faune du Parc national des Écrins parmi les 30 millions collectées sur l'ensemble du territoire national et agglomérées dans cet inventaire national.
+
+ Le Muséum national utilise ces informations pour réaliser des synthèses aux échelles nationales et internationales.
+
+ Cette démarche permet d'inscrire les enjeux environnementaux dans les politiques nationales et européennes.
+
+ Pour en savoir plus, lire Les observations du Parc national sont en ligne. +
++ Pour télécharger des données organisées +
++ SILENE PACA +
+
+ Silene, plate-forme SINP (Système d'information sur la nature et les paysages), est le portail de données de la région Provence-Alpes-Côte d'Azur.
+ Sur ce site qui permet de saisir et de consulter une masse de données très importante, des synthèses des patrimoines flore et faune de la région par commune et par maille sont disponibles.
+
+ Voir aussi l'homologue pour la région Rhône-Alpes: Le pôle d'information flore et habitats (PIFH). +
++ Conservatoire botanique national alpin (CBNA) +
++ Le site du Conservatoire botanique national alpin offre pour toute son aire d'agrément (Alpes et Ain : 04-05-01) les données relatives à la flore et aux habitats. + Le Parc en est un contributeur important. +
++ Voir aussi le SI Flore national et Tela Botanica. +
++ Pour participer ! +
+
+ Chacun peut, s'il le souhaite, devenir contributeur en transmettant ses observations de mammifères, mais aussi d'autres espèces, sur différentes plateformes naturalistes et notamment, pour les Écrins, sur les deux sites participatifs de la LPO.
+
+ faune-paca.org et faune-isere.org
+
+ C'est aussi une façon de compléter les connaissances du Parc national puisqu'il existe une convention d'échanges de données avec la LPO.
+
+ C'est également le cas avec avec leGroupe chiroptères de Provence.
+
+ Pour la flore, un atlas en ligne pour le département des Hautes-Alpes accueille également les contributions : bdflore05.org.
+ De même que pour la faune, une convention a été engagée et vit activement pour régulièrement échanger les données d'observation.
+
Côté Isère, l'association Gentiana anime un inventaire permanent de la flore du département :gentiana.org.
+
" - +"
Nombre d'observation(s): "+nb_obs+"
"); + +""+nb_obs+" observation(s)
"); L.DomEvent.disableClickPropagation(sliderContainer); return sliderContainer; } diff --git a/static/mapMailles.js b/static/mapMailles.js index 5d087354..637ec288 100644 --- a/static/mapMailles.js +++ b/static/mapMailles.js @@ -40,7 +40,7 @@ $.ajax({ myGeoJson.features.forEach(function(l){ nbObs += l.properties.nb_observations }) - $("#nbObs").html("Nombre d'observation(s): "+ nbObs); + $("#nbObs").html( nbObs + " observation(s)"); @@ -58,7 +58,7 @@ $.ajax({ nbObs += l.properties.nb_observations }) - $("#nbObs").html("Nombre d'observation(s): "+ nbObs); + $("#nbObs").html( nbObs + " observation(s)"); }); diff --git a/static/mapPoint.js b/static/mapPoint.js index f250e2b6..0799b8ab 100644 --- a/static/mapPoint.js +++ b/static/mapPoint.js @@ -57,7 +57,7 @@ $.ajax({ nbObs += l.properties.nb_observations }) - $("#nbObs").html("Nombre d'observation(s): "+ nbObs); + $("#nbObs").html(nbObs + " observation(s)"); }); @@ -109,7 +109,7 @@ $.ajax({ nbObs += l.properties.nb_observations }) - $("#nbObs").html("Nombre d'observation(s): "+ nbObs); + $("#nbObs").html(nbObs + " observation(s)"); }); } diff --git a/templates/404.html b/templates/404.html new file mode 100644 index 00000000..8a54ebc2 --- /dev/null +++ b/templates/404.html @@ -0,0 +1,127 @@ + + + + +