Calcul des aires d’occurences de taxons pour les listes rouges régionales

PostGIS 2.4 propose des fonction de fenêtre très pratiques pour les calculs d’aire d’occupation de taxon, utilisés dans la définition des listes rouges

Deux fonctions sont disponibles, ST_ClusterDBSCAN et ST_ClusterKMeans :

  • https://postgis.net/docs/manual-dev/ST_ClusterDBSCAN.html
  • https://postgis.net/docs/manual-dev/ST_ClusterKMeans.html

La requête ci-dessous créée l’aire d’occurence de l’espèce, pour les observations anciennes et récentes, en excluant les artefacts marins (découpage des périmètres produits selon les départements puis union des résultats)

WITH calcul_cluster AS (
	SELECT id_entite, nom_ref , cd_ref, tous_point_espece_selon_format_esri.geometrie,
	CASE WHEN annee<2007 THEN 'ancien' WHEN annee>=2007 THEN 'recent' END AS age,
	ST_ClusterDBSCAN(tous_point_espece_selon_format_esri.geometrie, 25000, 1) OVER(PARTITION BY nom_ref, CASE WHEN annee<2007 THEN 'ancien' WHEN annee>=2007 THEN 'recent' END) as cluster_id
	FROM public.tous_point_espece_selon_format_esri
	JOIN departement ON st_intersects(departement.geometrie, tous_point_espece_selon_format_esri.geometrie)
	WHERE statut_validation NOT IN ('non valide','douteux','accidentel')
	AND "nom_reg" = 'LANGUEDOC-ROUSSILLON-MIDI-PYRENEES'
), cluster_entier AS (
	SELECT row_number() OVER() as gid, nom_ref, age,
	st_area2d(st_makevalid(st_multi(st_buffer(st_buffer(ST_ConvexHull(ST_Collect(geometrie)),1000),-900)))::geometry(MULTIPOLYGON,2154) )/1000000 as surf_km2,
	st_makevalid(st_multi(st_buffer(st_buffer(ST_ConvexHull(ST_Collect(geometrie)),1000),-900)))::geometry(MULTIPOLYGON,2154) as geometrie
	FROM calcul_cluster
	GROUP BY nom_ref, cluster_id, age
)
SELECT row_number() OVER() AS id_noyau, nom_ref, age,
st_area2d(st_union(st_intersection(cluster_entier.geometrie, departement.geometrie)) )/1000000 as surf_km2,
st_union(st_intersection(cluster_entier.geometrie, departement.geometrie)) AS geometrie
FROM cluster_entier
JOIN departement ON st_intersects(cluster_entier.geometrie, departement.geometrie)
GROUP BY nom_ref, age